본문 바로가기

MongoDB

MongoDB 기본 명령어(Create, Read,Delete,Update)

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 ] } 
>