MongoDB 문법
mongo Shell에서 쓰이는 문법은 앞 게시물에 설명한 JSON = BSON처럼 javascript로 되어있다.
따라서 자바스크립트의 문법을 기본적으로 생각하면 된다.
Insert
하나의 데이터를 입력하고 싶을떄는 아래와 같이 입력하면 된다.
(options는 생략가능, writeConcern : 지연 처리, ordered : 정렬 , 문법은 ({field값 : value값}) 형태)
use.data
db.user.insertOne{username:"karoid",password:1111})
db.user.insertOne({username:"hello",password:1111})
db.course.insertOne({username:"mongoDB",grade:1})
또한 여러 다수의 데이터를 한번에 입력하고 싶을때는 이렇게 사용한다.
여러 객체를 입력할때는 아래 코드처럼 동시에 입력하며,
아래 코드처럼 변수에 담는 식으로 insert가 가능하다.
var i = db.user.insertMany([{username:"hi",password:1111},{username:"kkk",passward:1111}])
> i
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5dc2bee63cea8f8ca57ca2fc"),
ObjectId("5dc2bee63cea8f8ca57ca2fd")
]
}
Read
데이터를 읽어올때는 아래 코드처럼 해당 저장위치를 참고하여 읽어오면 된다.
//데이터 전체조회
> db.user.find().pretty()
{
"_id" : ObjectId("5dc26e23ddf190c3dccf28d2"),
"username" : "karoid",
"password" : 1111
}
{
"_id" : ObjectId("5dc26e2bddf190c3dccf28d3"),
"username" : "hello",
"password" : 1111
}
{
"_id" : ObjectId("5dc2bee63cea8f8ca57ca2fc"),
"username" : "hi",
"password" : 1111
}
{
"_id" : ObjectId("5dc2bee63cea8f8ca57ca2fd"),
"username" : "kkk",
"passward" : 1111
}
//특정 필드값을 가지고 있는 데이터 불러오기
> db.user.find({username:"karoid"}).pretty()
{
"_id" : ObjectId("5dc26e23ddf190c3dccf28d2"),
"username" : "karoid",
"password" : 1111
}
참고로 find() 뒤에 .pretty()를 붙이면 가독성이 좋게 출력된다.
Projection 옵션은 일종의 보이기/안보이기 필터옵션인데, 아래 코드와 같이 사용한다.
> db.user.find({password:1111},{username:true}).pretty()
{ "_id" : ObjectId("5dc26e23ddf190c3dccf28d2"), "username" : "karoid" }
{ "_id" : ObjectId("5dc26e2bddf190c3dccf28d3"), "username" : "hello" }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fc"), "username" : "hi" }
> db.user.find({password:1111},{username:false}).pretty()
{ "_id" : ObjectId("5dc26e23ddf190c3dccf28d2"), "password" : 1111 }
{ "_id" : ObjectId("5dc26e2bddf190c3dccf28d3"), "password" : 1111 }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fc"), "password" : 1111 }
>
Delete
mongoDB를 다루다가 실수나 잘못으로 데이터를 입력하는 경우 삭제가 가능하다.
1.해당 db속에 있는 데이터만 삭제
db.collectionsname.remove({}); //콜렉션 내부의 모든 document 삭제
db.monsters.remove({ name: 'Zerp' }); // WriteResult({ 'nRemoved': 1 })
2.데이터 자체를 드랍
해당 데이터베이스에 접속 후
->db.dropDatabase()
(database드랍)
->db.collections(해당콜렉션).drop()
(Collections드랍)
//drop전
show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
testDB 0.000GB
> db.dropDatabase()
{ "dropped" : "testDB", "ok" : 1 }
//drop후
> show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
*11월12일 추가 보충내용
하나의 데이터를 삭제하고 싶을때
> db.user.find()
{ "_id" : ObjectId("5dc26e23ddf190c3dccf28d2"), "username" : "karoid", "password" : 1111 }
{ "_id" : ObjectId("5dc26e2bddf190c3dccf28d3"), "username" : "hello", "password" : 1111 }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fc"), "username" : "hi", "password" : 1111 }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fd"), "username" : "kkk", "passward" : 1111 }
> db.user.deleteOne({username:"karoid"})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.user.find() //삭제완료
{ "_id" : ObjectId("5dc26e2bddf190c3dccf28d3"), "username" : "hello", "password" : 1111 }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fc"), "username" : "hi", "password" : 1111 }
{ "_id" : ObjectId("5dc2bee63cea8f8ca57ca2fd"), "username" : "kkk", "passward" : 1111 }
>
다수의 데이터를 삭제하고 싶을때
db.user.deleteMany({password: 1111}, )
Update
여러 방법이 있겠으나 간단한 콜렉션 이름변경을 예로 들어보려고 한다.
//이름변경전
> show collections
collections
course
user
> db.collections.renameCollection("first");
{ "ok" : 1 }
//이름변경후
> show collections
course
first
user
>
*11월12일 추가 보충내용
update query 구성
>db.collection.updateOne(
<query>, //검색할 쿼리문
<update> //수정할내용
{
upsert: <boolean>, //query단계에서 일치하는 값을 찾지 못했을시, update내용과 같은 새로운 document를 생성
writeConcern: <document, //지연입력
collation:
}
)
replace query 구성
>db.collection.replaceOne(
<filter>, //적용할 범위
<replacement>,//교체할 document
{
upsert: <boolean>, //검색실패시 새로운 document생성
writeConcern: <document>, //지연입력
collation: <document>
}
)
특정 field 업데이트 하기 ->$set
db.inventory.updateOne( { item: "canvas" }, { $set: { "size.h": 20 } } )
> db.inventory.find({"item":"canvas"}).pretty()
{
"_id" : ObjectId("5dca50ec99829b057884b7e5"),
"item" : "canvas",
"qty" : 100,
"size" : {
"h" : 28,
"w" : 35.5,
"uom" : "cm"
},
"status" : "A"
}
> db.inventory.updateOne( { item: "canvas" }, { $set: { "size.h": 20 } } )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.inventory.find({"item":"canvas"}).pretty()
{
"_id" : ObjectId("5dca50ec99829b057884b7e5"),
"item" : "canvas",
"qty" : 100,
"size" : {
"h" : 20,
"w" : 35.5,
"uom" : "cm"
},
"status" : "A"
}
document를 replace 하기
db.inventory.replaceOne( { item: "journal" }, { item: "journal", sold_id:[1,2,3,4,10,14]})
> db.inventory.find({item : "journal"}).pretty()
{
"_id" : ObjectId("5dca50ec99829b057884b7e6"),
"item" : "journal",
"qty" : 25,
"size" : {
"h" : 14,
"w" : 21,
"uom" : "cm"
},
"status" : "A"
}
> db.inventory.replaceOne( { item: "journal" }, { item: "journal", sold_id:[1,2,3,4,10,14]})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.inventory.find({item : "journal"}).pretty()
{
"_id" : ObjectId("5dca50ec99829b057884b7e6"),
"item" : "journal",
"sold_id" : [
1,
2,
3,
4,
10,
14
]
}
>
id는 변함이 없고, 기존값에서 replace값으로 변경되었다.
특정 field를 제거하기 ->$unset
db.inventory. updateOne( { item: "mat" }, { $unset: {status: 1} }) -> 1은 true를 의미
해당되는 document가 없다면 새로 추가하기 ->$upsert:true
db.inventory. updateOne( { item: "flash" }, { $set: {size: {h: 10, w: 8} ,status: "F"} }, {upsert: true})
> db.inventory. updateOne( { item: "flash" }, { $set: {size: {h: 10, w: 8} ,status: "F"} }
... )
{ "acknowledged" : true, "matchedCount" : 0, "modifiedCount" : 0 }
> db.inventory. updateOne( { item: "flash" }, { $set: {size: {h: 10, w: 8} ,status: "F"} }, {upsert: true})
{
"acknowledged" : true,
"matchedCount" : 0,
"modifiedCount" : 0,
"upsertedId" : ObjectId("5dca5e079ef584a18f08490b")
}
여러 document의 특정 field를 수정하기
db.inventory. updateMany( { "size.h": { $lte: 10 } }, { $set : {mini: true} })
db.inventory. updateMany( { "size.h": { $lte: 10 } }, { $set : {mini: true} })
{"item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "P" }
{"item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{"item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }
{"item" : "flash", "size" : { "h" : 10, "w" : 8 }, "status" : "F" }
↓
{"item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "P", mini: true }
{"item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" , mini: true}
{"item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" , mini: true}
{"item" : "flash", "size" : { "h" : 10, "w" : 8 }, "status" : "F" , mini: true}
배열에 값 추가하기 ->$push
db.inventory. updateOne( { item: "journal" }, { $push: {sold_id: 15 }})
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 1, 2, 3, 4, 10, 14 ] }
> db.inventory. updateOne( { item: "journal" }, { $push: {sold_id: 15 }})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 1, 2, 3, 4, 10, 14, 15 ] }
>
배열에 값 여러개 추가하기 ->$push + $each
db.inventory. updateOne( { item: "journal" }, { $push: {sold_id: {$each: [20,25]} }})
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 1, 2, 3, 4, 10, 14, 15 ] }
> db.inventory. updateOne( { item: "journal" }, { $push: {sold_id: {$each: [20,25]} }})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
>
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 1, 2, 3, 4, 10, 14, 15, 20, 25 ] }
>
배열에 값 제거하기 ->$pull
db.inventory. updateOne( { item: "journal" }, { $pull: {sold_id: 1 }})
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 1, 2, 3, 4, 10, 14, 15, 20, 25 ] }
> db.inventory. updateOne( { item: "journal" }, { $pull: {sold_id: 1 }})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 2, 3, 4, 10, 14, 15, 20, 25 ] }
>
배열에서 값 여러개 제거하기 -> $pull + $in
db.inventory. updateOne( { item: "journal" }, { $pull: {sold_id: {$in: [15,20,25]} }})
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 2, 3, 4, 10, 14, 15, 20, 25 ] }
> db.inventory. updateOne( { item: "journal" }, { $pull: {sold_id: {$in: [15,20,25]} }})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
>
> db.inventory.find({item:"journal"})
{ "_id" : ObjectId("5dca50ec99829b057884b7e6"), "item" : "journal", "sold_id" : [ 2, 3, 4, 10, 14 ] }
>
'MongoDB' 카테고리의 다른 글
Node.js와 Mongodb 연동 기본(TypeError : db.collection is not a funtion오류해결) (0) | 2019.11.14 |
---|---|
mongoDB aggregation (pipeline) (1) | 2019.11.12 |
MongoDB Query 연습문제 (0) | 2019.11.12 |
MongoDB query 이해하기 (0) | 2019.11.07 |
MongoDB 이해하기 (0) | 2019.11.05 |