既存のコレクションフィールドの更新と同じ、$set
指定されたフィールドが存在しない場合、新しいフィールドが追加されます。
この例を確認してください:
> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }
編集:
すべてのコレクションにnew_fieldを追加する場合は、空のセレクターを使用し、マルチフラグをtrue(最後のパラメーター)に設定してすべてのドキュメントを更新する必要があります
db.your_collection.update(
{},
{ $set: {"new_field": 1} },
false,
true
)
編集:
上記の例では、最後の2つのフィールドfalse, true
upsert
を指定します およびmulti
フラグ。
アップサート: trueに設定すると、クエリ条件に一致するドキュメントがない場合に新しいドキュメントが作成されます。
マルチ: trueに設定すると、クエリ条件を満たす複数のドキュメントが更新されます。 falseに設定すると、1つのドキュメントが更新されます。
これはMongoのversions
用です 2.2
より前 。最新バージョンでは、クエリが少し変更されています
db.your_collection.update({},
{$set : {"new_field":1}},
{upsert:false,
multi:true})