본문 바로가기
Database/MongoDB

MongoDB 기존 document에 데이터 추가하기 $push

by supdev 2017. 7. 6.

Stack overflow와 Velopert님의 블로그를 참조하였습니다.


기존 document를 변경은 다음과 같은 명령으로 수행할 수 있었습니다.

db.collection_name.update({document 쿼리 조건}, {변경할 데이터})'

하지만 이렇게 변경하게 되면 중복된 key의 데이터에 경우 기존 데이터에 덮어쓰기가 됩니다.


ex)

{     "name" : "abc",     "item" : [{                 "name" : "sword",                 "price" : 1000             },         {                 "name" : "helm",                 "price" : 500             }] }


이 document의 item에 armor 객체를 추가하려고 합니다.

db.user.update({ name : "abc" }, { item : [{ name : "armor", price : 800 }]})

이 문장을 실행하면 sword와 helm은 몽땅 날아가고 armor만 남게됩니다.


원하는 의도대로 추가하려면 기존의 데이터를 함께 적어주어야합니다.

db.user.update({ name : "abc" }, { item : [{ name : "sword", price : 1000 }, { name : "helm", price : 500 }, { name : "armor", price : 800 }]})

하지만 기존 데이터를 불러와야하기 때문에 번거로우며 I/O의 낭비로 이어질 수 있을 것 같습니다.


구글링으로 원하는 결과를 찾을 수 있었습니다.


update시 $push 옵션을 통해 새로운 데이터를 기존 데이터에 추가할 수 있다고 합니다.

위에 map을 사용하지 않는다면 $each 부분에 직접 데이터를 입력해도 무관합니다.


아래와 같이 입력하면 원하는 결과를 얻을 수 있습니다.

db.user.update({ name : "abc" }, { $push : { item : { name : "armor", price : 800 }}});