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

Scientific Computing & Data Science

[MongoDB] Update Modifiers / Part 5. - $addToSet 본문

Data Science/MongoDB

[MongoDB] Update Modifiers / Part 5. - $addToSet

cinema4dr12 2014. 1. 26. 00:42

Written by cinema4d

앞서 설명한 바와 같이 "$push" modifier를 통해 동일한 아이템을 추가할 경우 중복적으로 추가됨을 살펴 보았다.

만약 동일한 아이템을 추가할 때 중복적으로 추가하지 않도록 하려면 "$addToSet" modifier를 사용하면 된다.

우선 다음과 같이 입력해 보자.

use foobar

var user = {"username" : "gchoi", "age" : 37};
db.users.insert(user);

db.users.update({"username" : "gchoi"}, {$push : {"email" : "gchoi@gmail.com"}});


결과를 확인해 보면 다음과 같다.

> db.users.find() { "_id" : ObjectId("52e3d4dd623bbd008840d671"), "age" : 37, "email" : [  "gchoi@gmail.com" ], "username" : "gchoi" }


이제 다음과 같이 입력해 보자. "$push" 대신 "$addToSet" modifier가 사용되었음을 유의하자.

db.users.update({"username" : "gchoi"}, {$addToSet : {"email" : "gchoi@gmail.com"}})


결과를 확인해 보면 동일한 "email"이 한 번 더 추가되었음에도 결과에서는 중복적으로 추가되지 않았음을 확인할 수 있다.

> db.users.find() { "_id" : ObjectId("52e3d4dd623bbd008840d671"), "age" : 37, "email" : [  "gchoi@gmail.com" ], "username" : "gchoi" }


"$addToSet"과 "$each"를 함께 사용하면 여러 개의 아이템을 한꺼번에 추가할 수 있다. 가령 여러 개의 "email"을 추가한다고 가정해 보자.

db.users.update({"username" : "gchoi"}, {"$addToSet" : {"email" : {"$each" : ["cinema4dr12@gmail.com", "cinema4d@yahoo.com", "cinema4d@aaa.com"]}}})


결과를 확인해 보자. 여러 개의 "email"이 한 번에 추가되었음을 확인할 수 있을 것이다.

> db.users.findOne() { "_id" : ObjectId("52e3d4dd623bbd008840d671"), "age" : 37, "email" : [ "gchoi@gmail.com", "cinema4dr12@gmail.com", "cinema4d@yahoo.com", "cinema4d@aaa.com" ], "username" : "gchoi" }


Comments