백엔드/MongBO Basic

MongoDB CRUD

테오구 2021. 11. 19. 21:42
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표현식으로 입력 문서를 그룹화하고 개별 그룹화에 대해 문서를 출력

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