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 }}});
'Database > MongoDB' 카테고리의 다른 글
MongoDB find elemMatch projection option (0) | 2017.07.08 |
---|---|
Express에서 Mongoose로 DB 연결 (0) | 2017.07.06 |
Window 32bit MongoDB 설치하기 (0) | 2017.07.06 |
MEAN stack과 친해지기(2) CentOS에 MongoDB를 설치해보자 (0) | 2017.04.06 |