728x90
- MongoDB에서 CRUD를 할 수 있다.
- Insert(C), Find(R), Update(U), Delete(D)에 대한 쿼리문을 작성 할 수 있다.
- C : db.fruits.insert([{ "fruit": "apple" }, { "fruit": "banana" }, { "fruit": "blueberries" }])
- R : db.zips.find({"state":"NY"})
- U : db.animals.updateMany({ "animal": "tiger" }, { "$set": { "type": "dangerous", "look": "adorable" }})
- D : deleteOne, deleteMany
- $match, $project, $group 연산자를 사용할 수 있다.
- $match : 지정된 조건과 일치하는 문서만 다음 파이프라인 단계로 전달
- $project : 요청된 필드가 있는 문서를 파이프라인의 다음 단계로 전달
- $group : 지정된 _id표현식으로 입력 문서를 그룹화하고 개별 그룹화에 대해 문서를 출력
- Insert(C), Find(R), Update(U), Delete(D)에 대한 쿼리문을 작성 할 수 있다.
MongoDB CRUD && 명령어
데이터베이스 생성
use [데이터베이스]
// ex) use practice
데이터베이스 목록 확인
show dbs
현재 사용중인 데이터베이스 확인
db
컬렉션은 따로 생성할 필요 없음 - 다큐먼트를 넣는 순간 컬렉션이 자동 생성된다.
// but 생성하고 싶다면
db.createCollection('users')
{ "ok" : 1 }
생성한 컬렉션 확인
// collection create
show collections
Create
_id필드 없이 insert 사용하기
// 사용한다고 선언한 데이터베이스에 이제 값을 입력할 수 있다
// 다큐먼트 생성
db.컬렉션명.insert(다큐먼트)
ex) db.users.insert({ name: 'samsung', age: 90, married: true, comment: '몽고디비 5.0이 나오다니...', createdAt: new Date() });
// samsung의 ObjectId를 찾아야함
ex) db.users.find({ name: 'samsung' }, {_id : 1})
> { "_id" : ObjectId("60c2b6f64b62786f59a003cd") }
// samsung이 코멘트를 남긴다는 가정
ex) db.comments.save({ commenter: ObjectId('60c2b6f64b62786f59a003cd'), comment: '몽고디비야 듣고 있니??', createdAt: new Date() })
_id필드 없이 삽입하면 ObjectId()를 값으로 가져옵니다.
_id필드 값을 넣는 경우
db.products.insert( { _id: 10, item: "box", qty: 20 } )
{ "_id" : 10, "item" : "box", "qty" : 20 }
다중 Documents 삽입법
db.products.insert([{ _id: 11, item: "pencil", qty: 50, type: "no.2" }, { item: "pen", qty: 20 }, { item: "eraser", qty: 25 }])
READ
// 생성한 다큐먼트 보기
find({})를 통해 컬레션 내의 모든 다큐먼트를 조회할 수 있음
ex) db.users.find({})
{ "_id" : ObjectId("60c2b6d04b62786f59a003cc"), "name" : "zero", "age" : 24, "married" : false, "comment" : "몽고디비 잘 부탁해", "createdAt" : ISODate("2021-06-11T01:05:20.426Z") }
{ "_id" : ObjectId("60c2b6f64b62786f59a003cd"), "name" : "samsung", "age" : 90, "married" : true, "comment" : "몽고디비 5.0이 나오다니...", "createdAt" : ISODate("2021-06-11T01:05:58.056Z") }
// 특정 필드 조회
ex) db.users.find({}, {_id:0, name:1, married:1})
{ "name" : "zero", "married" : false }
{ "name" : "samsung", "married" : true }
find 메서드의 두번째 인자로 조회할 필드를 넣는다. 1 또는 true로 표시한 필드만 가져온다.
_id는 기본적으로 가져오기 때문에 0 또는 false로 표시해서 가져오지 않도록 주의
// 특정 데이터값만 받아오는 경우
findOne({})
db.bios.findOne({$or: [{ 'name.first' : /^G/ }, { birth: { $lt: new Date('01/01/1945') } }]})
// $gt를 활용해서 초과된 값만 가져오기
ex) db.users.find({ age: { $gt: 30 }, married: true }, { _id: 0, name: 1, age: 1 })
{ "name" : "samsung", "age" : 90 }
// 쿼리 옵션 두개
ex) db.users.find({ $or: [{ age: { $gte: 30 } }, { married: false }] }, { _id: 0, name: 1, age: 1 })
{ "name" : "zero", "age" : 24 }
{ "name" : "samsung", "age" : 90 }
몽고디비 쿼리 옵션
- $gt : greater than
- $lt : less than
- $gte : greater than or equal to
- $lte : less than or equal to
- $ne : not equal
- $or : or
- $in : in (배열 요소 중 하나)
db.컬렉션이름.find().count()
ord_dt 필드가 new Date('01/01/2012')보다 큰 주문 컬렉션의 문서 수:
db.orders.count( { ord_dt: { $gt: new Date('01/01/2012') } } )
db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()
cursor.pretty()
읽기 쉬운 형식으로 결과를 표시하도록 커서를 구성합니다. pretty() 방법은 다음과 같은 프로토타입 형태를 갖는다.
db.collection.find(<query>).pretty()
정렬 : sort 메소드 쓰기
-1: 오름차순
1: 내림차순
→ 쿼리 옵션과 다르게 .find()뒤에 붙인다
ex) db.users.find().sort('SORT_OPTION')
ex) db.users.find({}, { _id: 0, name: 1, age: 1 }).sort({ age: -1 })
{ "name" : "samsung", "age" : 90 }
{ "name" : "zero", "age" : 24 }
조회할 수 있는 다큐먼트 개수를 설정할 수 있음 - limit 메서드 사용
ex) db.users.find({}, { _id: 0, name: 1, age: 1 }).sort({ age: -1 }).limit(1)
{ "name" : "samsung", "age" : 90 }
Update
기존 데이터 수정하기
ex) db.users.update({ name: 'zero' }, { $set: { comment: '업데이트가 됐나요? 응답응답' } })
> WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
첫번째 객체: 수정할 다큐먼트를 지정하는 객체
두번째 객체: 수정할 내용을 입력하는 객체 → 여기서 $set을 사용한다
** $set 은 어떤 필드를 수정할지 정하는 연산자다
연산자를 사용하지 않고 일반 객체를 넣는다면 다큐먼트가 통째로 두번째 인자로 주어진 객체로 수정된다. 따라서 일부 필드만 수정하고 싶을 때 반드시 $set 해야함
→ 수정에 성공하면 nMatched, nModified에 1이 나옴
Delete
db.users.remove({ name: 'zero' })
WriteResult({ "nRemoved" : 0 })
728x90
'백엔드 > MongBO Basic' 카테고리의 다른 글
Aggregation Framework (0) | 2021.11.20 |
---|---|
MongoDB CRUD QUIZ (0) | 2021.11.20 |
MongoDB CRUD 연산자 (0) | 2021.11.19 |
Atlas Cluster 생성하기 (0) | 2021.11.19 |
MongoDB (0) | 2021.11.19 |