05-14 07:20
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Update Modifiers / Part 8. - Updating Multiple Documents 본문

Data Science/MongoDB

[MongoDB] Update Modifiers / Part 8. - Updating Multiple Documents

cinema4dr12 2014. 1. 30. 21:43

by Geol Choi | 

"update" 쿼리는 기본적으로 기준에 부합하는 첫번째 도큐먼트만 업데이트 한다. 즉 기준에 부합하는 도큐먼트가 더 있을 경우 부합하는 첫번째 도큐먼트를 제외한 나머지 도큐먼트의 내용은 그대로 유지된다.
만약 기준에 부합하는 모든 도큐먼트를 업데이트하려면 "update"의 네번째 파라미터를 "true"로 설정한다.
우선 테스트용 데이터를 다음과 같이 준비하는데 고객의 이름과 생일을 입력해 보자.

db.customers.remove()
db.customers.insert({name: "gchoi", birthday:"08/22"})
db.customers.insert({name: "jmpark", birthday:"04/02"})
db.customers.insert({name: "tjkwak", birthday:"11/11"})
db.customers.insert({name: "hskim", birthday:"12/08"})
db.customers.insert({name: "dsha", birthday:"04/02"})

입력한 결과는 다음과 같다.

> db.customers.find()
{ "_id" : ObjectId("52ea464d5e3b86c2a7325073"), "name" : "gchoi", "birthday" : "08/22" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325074"), "name" : "jmpark", "birthday" : "04/02" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325075"), "name" : "tjkwak", "birthday" : "11/11" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325076"), "name" : "hskim", "birthday" : "12/08" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325077"), "name" : "dsha", "birthday" : "04/02" }

입력된 결과를 눈여겨 보면, "jmpark"과 "dsha"의 생일이 모두 "04/02"로 동일함을 알 수 있다.
생일이 "04/02"인 고객을 기준으로 검색해 보면,

> db.customers.find({"birthday" : "04/02"})
{ "_id" : ObjectId("52ea464d5e3b86c2a7325074"), "name" : "jmpark", "birthday" : "04/02" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325077"), "name" : "dsha", "birthday" : "04/02" }

예상대로 "jmpark"과 "dsha"가 검색되었다.
오늘이 4월2일이라고 하고 오늘이 생일인 두 명의 고객에 대해 "gift" 키를 업데이트 해 보자.

db.customers.update({birthday : "04/02"}, {$set : {gift : "Happy Birthday!"}}, false, true)

만약 업데이트 된 도큐먼트에 대한 정보를 얻고자 한다면 "getLastError" 명령어를 입력한다.

> db.runCommand({getLastError : 1})
{
	"updatedExisting" : true,
	"n" : 2,
	"connectionId" : 1,
	"err" : null,
	"ok" : 1
}

"updatedExisting" 값 true는 업데이트 된 도큐먼트가 존재함을 의미하며, "n" 값 2는 업데이트 된 도큐먼트의 수가 2개임을 의미한다.
현재 업데이트 된 결과를 출력해 보면 다음과 같다.

> db.customers.find()
{ "_id" : ObjectId("52ea464d5e3b86c2a7325073"), "name" : "gchoi", "birthday" : "08/22" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325075"), "name" : "tjkwak", "birthday" : "11/11" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325076"), "name" : "hskim", "birthday" : "12/08" }
{ "_id" : ObjectId("52ea464d5e3b86c2a7325074"), "birthday" : "04/02", "gift" : "Happy Birthday!", "name" : "jmpark" }{ "_id" : ObjectId("52ea464d5e3b86c2a7325077"), "birthday" : "04/02", "gift" : "Happy Birthday!", "name" : "dsha" }

"$set" update modifier의 네번째 파라미터가 "true"로 설정했음을 주목한다. 예상대로 "birthday" 키가 "04/02"로 되어있는 "jmpark"과 "dsha"에 "gift" 키가 생성되었음을 확인할 수 있다.

Comments