DB/MongoDB

[MongoDB] 몽고디비 CRUD 관련 쿼리 알아보기

  • -

몽고디비를 처음 사용하면서 알게 된 쿼리들에 대해서 정리한 글입니다.

 

✨ 이 글을 읽기 전 참고하면 좋은 글

https://hulrud.tistory.com/69

 

[Node.js] 몽고디비 알아보기

✨ Node.js 공부 중, 몽고디비를 사용하게 되면서 알게 된 내용을 정리한 글입니다. 몽고디비가 무엇일까? 몽고디비를 들어보신 분들이라면 NoSQL 데이터베이스에 대해서도 들어보셨을겁니다. 왜냐

hulrud.tistory.com

 


데이터베이스, 도큐먼트

먼저 저는 몽고디비 콤파스에서 쿼리들을 테스트해보겠습니다.

 

use 데이터베이스이름

 

use study 는 study라는 이름의 db를 만들거나, 기존에 있던 데이터베이스를 선택하는 명령입니다. 

use study 명령 이후 switched to db study라는 메세지가 출력되면 정상적으로 실행된 것입니다.

 

CRUD

생성(Create)

도큐먼트 추가하기

db.컬렉션명.insertOne()
db.users.insertOne({ name: "Anna", age: 18, married: false, comment: "안녕하세요. 만나서 반가워요.", created_at: new Date()})

 

use를 사용해서 db를 만들어도 콤파스에서 보이지 않을 것입니다. 왜냐하면 도큐먼트가 없기 때문입니다.

 

MySQL의 테이블은 몽고디비에서 콜렉션(Collection)

MySQL의 칼럼은 몽고디비에서 필드(Field)

MySQL의 로우는 몽고디비에서 도큐먼트(Document)

라고 칭합니다.

 

위 명령에서 users 콜렉션에 하나의 도큐먼트를 추가하였습니다.

{ 
    name: "Anna", 
    age: 18, 
    married: false, 
    comment: "안녕하세요. 만나서 반가워요.", 
    created_at: new Date()
}

 

위 데이터를 도큐먼트라고 하는데요, json 형식으로 되어 있습니다만, json에서는 볼 수 없는 것이 있습니다.

new Date()는 현재 시간을 입력하라는 뜻입니다.

 

명령이 실행되면 터미널에 위처럼 출력됩니다. 실패한 경우에는 에러 내용이 응답으로 옵니다.

 

콤파스에서도 도큐먼트가 생성된 것을 보실 수 있습니다.

여기서 _id는 터미널의 출력된 메세지 중 insertedId와 같은데요, 이 오브젝트 아이디가 데이터를 검색할 때 쓰이는 키입니다. 

 

컬렉션만 추가하기

위처럼 바로 도큐먼트 데이터를 추가하는 것이 아니라, 도큐먼트가 없는 빈 콜렉션을 만들 수 있습니다.

db.createCollection("콜렉션 이름") >> 형식
db.createCollection("comments") >> 예시

 

위 명령을 통해서 콜렉션만 만들 수 있습니다.

응답 메세지는 "{ ok: 1 }" 가 출력됩니다. 

아무것도 없는 콜렉션이 만들어 진 것을 확인할 수 있습니다.



여러 도큐먼트 추가하기

앞서 보여드린 insertOne은 하나의 도큐먼트만 추가하였습니다.

db.users.insertMany([
  { 데이터 1 },
  { 데이터 2 }
]);

db.users.insertMany([
  { name: "Bob", age: 25, married: true, comment: "안녕하세요. 나는 Bob입니다.", created_at: new Date() },
  { name: "Charlie", age: 30, married: true, comment: "안녕하세요. 날씨가 좋네요.", created_at: new Date() }
]);

위처럼 insertMany로 여러 데이터를 추가할 수 있습니다.

 

응답 메세지로 오브젝트 아이디도 추가한 데이터에 대해 알 수 있습니다.

 

조회(Read)

컬렉션 조회하기

show collections


위 명령으로 현재 db의 콜렉션들을 조회할 수 있습니다.

콜렉션의 모든 데이터 조회

db.콜렉션이름.find()
db.users.find()

 

콜렉션에 있는 모든 데이터를 조회할 수 있습니다.

조건에 맞는 데이터 조회

db.콜렉션이름.find({ 찾을필드: 값, ...})
db.users.find({ name: "Anna" })

 

위 명령을 통해서 조건에 맞는 데이터만 찾을 수 있습니다.

예시로 보여드린 쿼리는 name이 "Anna"인 도큐먼트를 검색합니다.

데이터의 특정 필드만 조회하기

db.콜렉션이름.find(조건, { 찾을 필드 })
db.users.find({}, { _id: 0, name: 1 })

 

find의 첫 번째 매개변수는 찾을 데이터의 조건, 두 번째 매개변수에는 조회할 필드를 지정할 수 있습니다.

_id는 따로 지정하지 않으면 1이기 때문에 0으로 바꾸어 조회하지 않고, name의 값을 1로 하여 name만 조회합니다.

위처럼 첫 번째 매개변수 자리에 {} 를 입력하면 아무 조건도 적용되지 않아 모든 데이터를 적용할 수 있습니다.

 

수정(Update)

db.콜렉션이름.updateOne(
    { 수정할 도큐먼트를 찾기 위한 조건 },
    { $set: { 수정할 내용 }
)

db.users.updateOne(
  { name: "Anna" }, // 수정할 도큐먼트를 찾기 위한 조건
  { $set: { comment: "좋은 하루 보내세요." } } // 수정할 내용
)

 

위는 name이 "Anna"인 도큐먼트의 comment를 "좋은 하루 보내세요." 로 수정하는 쿼리입니다.

 

데이터가 성공적으로 변경되면 아래와 같은 출력 결과를 확인할 수 있습니다. 

{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}

 

이 메세지에서

  • acknowlege: 업데이트 작업이 몽고디비 서버에 성공적으로 전달되고 확인되었는지의 여부
  • insertedId: 새로운 도큐먼트를 추가한 경우에만 해당 도큐먼트의 '_id' 값이 여기에 들어감. 업데이트의 경우에는 null]
  • matchedCount: 지정된 조건과 일치하는 도큐먼트의 수
  • modifiedCount: 실제로 업데이트가 적용된 도큐먼트의 수
  • upsertedCount: upsert 작업이 수행된 경우 적용된 도큐먼트의 수
    • upsert는 일치하는 도큐먼트가 없어서 새로운 도큐먼트를 추가한 경우를 의미함.

삭제 (Delete)

db.콜렉션이름.remove({ 삭제할 도큐먼트 검색 조건 })
db.users.remove({ name: "Bob" })

 

조건에 맞는 도큐먼트를 삭제합니다. 조건에 {}를 입력하면 모든 도큐먼트가 삭제됩니다.

 


읽어주셔서 감사합니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.