MongoDB 파헤치기 - 3

2019-05-18

개요

이제 본격적인 CRUD 동작을 해보겠습니다.

Create 동작

Create 또는 insert 동작은 컬렉션에 새로운 문서를 추가합니다.

컬렉션이 존재하지 않으면 insert 동작은 컬렉션을 생성합니다.

MongoDB는 다음과 같은 insert 동작이 있습니다.

  • db.collection.insertOne()

       db.inventory.insertOne({
      item: "canvas",
      qty: 100,
      tags: ["cotton"],
      size: { h: 28, w: 35.5, uom: "cm" } 
        })
    
  • db.collection.insertMany()

    db.inventory.insertMany([
     { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
     { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
     { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
      ])
    

inventory 라는 컬렉션에 다음의 문서를 넣는 예제였습니다. 만약 _id 필드를 지정하지 않았다면, MongoDB가 _id 필드에 ObjectId 라는걸 자동으로 추가해줍니다.

각각의 문서에는 우리가 흔히 아는 primary key 를 대신해주는 _id 가 있습니다. 문서를 추가하고 나면 MongoDB에서 자동으로 만들어주는 이 _id의 값을 보여줍니다.

Read 동작

Read 동작은 컬렉션에 있는 문서를 가져오는 동작입니다.

  • db.collection.find()

    위에서 insertMany() 를 이용해서 3개의 데이터를 넣어줬는데요,

    그중에서 한개를 가져오겠습니다.

    db.inventory.find( { item : "mat"})
    

    SQL에서 다음 동작과 같은 역할을 수행합니다.

    SELECT * FROM inventory where item="mat";
    

    inventory 컬렉션에 있는 모든데이터를 가져오려면 다음과 같이 입력하면 됩니다.

    NoSQL
    db.inventory.find( { } );
    
    SQL
    SELECT * FROM inventory
    

조금더 깊숙히 들어가볼까요?

  • where ~ in절 사용해보기

    다음은 SQL에서의 where ~ in 절을 사용한 예제 입니다.

    NoSQL
    db.inventory.find( { tags: { $in: [ "blank", "blue" ] } } )
    
    { "_id" : ObjectId("5cdf861adb4e3f60b2ab6ee3"), "item" : "journal", "qty" : 25, "tags" : [ "blank", "red" ], "size" : { "h" : 14, "w" : 21, "uom" : "cm" } }
    { "_id" : ObjectId("5cdf861adb4e3f60b2ab6ee5"), "item" : "mousepad", "qty" : 25, "tags" : [ "gel", "blue" ], "size" : { "h" : 19, "w" : 22.85, "uom" : "cm" } }
    

    위와 같이 tags 의 값이 blank가 존재하거나 blue가 존재하는 문서를 출력하게 됩니다.

  • AND 조건 이용하기

    NoSQL
    db.inventory.find( { item: "mat", qty: { $lt: 86 } } )
    

    $lt 는 less than의 약자로 해당 값 보다 작은 조건을 말합니다.

    SQL
    SELECT * FROM inventory WHERE item = "mat" AND qty < 86
    
  • OR 조건 이용하기

    NoSQL
    db.inventory.find( { $or: [ { item: "mat" }, { qty: { $lt: 26 } } ] } )
    
    SQL
    SELECT * FROM inventory WHERE item = "mat" OR qty < 26
    
  • AND 조건과 OR 조건 같이 이용하기.

    NoSQL
    db.inventory.find( {
         item: "mat",
         $or: [ { qty: { $lt: 30 } }, { tags: /^g/ } ]
    } )
    
    SQL
    SELECT * FROM inventory WHERE item = "mat" AND ( qty < 30 OR tags LIKE "g%")
    

다음 포스팅은 Update와 Delete로 찾아뵙겠습니다!