MongoDB 파헤치기 - 3
개요
이제 본격적인 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로 찾아뵙겠습니다!