12-12 04:59
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Update Modifiers / Part 7. - Upsert 본문

Data Science/MongoDB

[MongoDB] Update Modifiers / Part 7. - Upsert

cinema4dr12 2014. 1. 30. 20:56

Written by cinema4d

"upsert"는 "update"의 특별한 형태 (명령어는 아니며 DB의 컨셉)이다. "update" 기준에 일치하는 도큐먼트가 없을 경우 그 기준을 포함하는 도큐먼트로 업데이트한다. 만약 일치하는 도큐먼트가 있을 경우 정상적으로 업데이트 된다. "upsert"는 컬렉션의 구조를 정하고 시작할 필요가 없기 때문에 편리하게 사용할 수 있다.

우선 다음과 같이 명령어를 입력해 보자.

db.math.remove()
db.math.update({"count" : 25}, {"$inc" : {"count" : 3}}, true)


첫번째 라인을 통해 math 컬렉션을 삭제(컬렉션이 존재할 경우 "true"를 컬렉션이 존재하지 않을 경우 "false"를 반환한다)한 후, 두번째 라인에서 "count"가 "25"인 아이템에 "3"을 더한다.

그러나, 첫번째 라인에서 math 컬렉션이 삭제되었으므로 "count"가 "25"인 아이템이 있을리 없다. "upsert" 개념에 의해 이 아이템에 부합하는 기준이 없으므로 이 기준의 아이템을 생성하고 "3"을 더한다.

결과는 다음과 같다.

> db.math.find() { "_id" : ObjectId("52ea31953c6feb42c96ad802"), "count" : 28 }

"count"가 "25"로 생성된 후 "3"이 더해진 결과이다.

만약 동일한 명령을 한 번 더 실행하면 다음과 같이 아이템이 하나 더 생성될 것이다.

> db.math.update({"count" : 25}, {"$inc" : {"count" : 3}}, true) > db.math.find() { "_id" : ObjectId("52ea31953c6feb42c96ad802"), "count" : 28 } { "_id" : ObjectId("52ea37eb3c6feb42c96ad803"), "count" : 28 }


Comments