Mongo DB: ドキュメントの更新

db.collection.update(query, update, options);

データの更新(新しいフィールドを追加、既存のフィールドを置き換え) ($set)

{ "_id" : ObjectId("532120993a39c815efdbc148"), "name" : "oasis", "songs" : [  "wonderwall",  "songbird" ], "debut" : 1994 }
> db.artist.update({name: 'oasis'}, {$set: {songs: ['wonderwall', 'songbird', 'whatever']}}, {multi: true});
{ "_id" : ObjectId("532120993a39c815efdbc148"), "debut" : 1994, "name" : "oasis", "songs" : [  "wonderwall",  "songbird",  "whatever" ] }

データの更新(既存のフィールドに追加) ($addToSet)

> db.artist.update({name: 'oasis'}, {'$addToSet': {songs: 'layla' }});
{ "_id" : ObjectId("532120993a39c815efdbc148"), "debut" : 1994, "name" : "oasis", "songs" : [  "wonderwall",  "songbird",  "whatever",  "layla" ] }

キーを削除 ($unset)

> db.artist.update({name: 'oasis'}, {'$unset': {songs: '' }});
{ "_id" : ObjectId("532120993a39c815efdbc148"), "debut" : 1994, "name" : "oasis" }

データを加算、減算 ($inc)

> db.artist.update({name: 'oasis'}, {'$inc': {debut: 1 }});
{ "_id" : ObjectId("532120993a39c815efdbc148"), "debut" : 1995, "name" : "oasis" }
> db.artist.update({name: 'oasis'}, {'$inc': {debut: -1 }});
{ "_id" : ObjectId("532120993a39c815efdbc148"), "debut" : 1994, "name" : "oasis" }

データの追加 ($push)

> db.artist.update({name: 'blur'}, {$push: {songs: 'beetlebum'}});
db.things.update({x: 2}, {$push: {music: "peach"}})
{ "_id" : ObjectId("5321266c3a39c815efdbc14b"), "debut" : 1991, "name" : "blur", "songs" : [  "song2",  "parklife",  "beetlebum" ] }

配列の追加 ($push)

> db.artist.update({name: 'blur'}, {$pushAll: {songs: ['country house', 'the universal']}});
{ "_id" : ObjectId("5321266c3a39c815efdbc14b"), "debut" : 1991, "name" : "blur", "songs" : [  "song2",  "parklife",  "beetlebum",  "country house",  "the universal" ] }

末尾からデータを 1 件削除 ($pop 1)

> db.artist.update({name: 'blur'}, {$pop: {songs: 1}});
{ "_id" : ObjectId("5321266c3a39c815efdbc14b"), "debut" : 1991, "name" : "blur", "songs" : [  "song2",  "parklife",  "beetlebum",  "country house" ] }

頭からデータを 1 件削除 ($pop -1)

> db.artist.update({name: 'blur'}, {$pop: {songs: -1}});
{ "_id" : ObjectId("5321266c3a39c815efdbc14b"), "debut" : 1991, "name" : "blur", "songs" : [  "parklife",  "beetlebum",  "country house" ] }

データを複数件削除 ($pullAll)

> db.artist.update({name: 'blur'}, {$pullAll: {songs: ["beetlebum",  "country house"]}});
{ "_id" : ObjectId("5321266c3a39c815efdbc14b"), "debut" : 1991, "name" : "blur", "songs" : [  "parklife" ] }

 

options

multi:true
デフォルトでは条件 query に一致する最初のドキュメントしか更新されないので、options に multi: true を癖で付けるようにしておく。デフォルトは false。

upsert:true
ドキュメントが存在しない場合にインサートするかどうか。デフォルトは true。