Jawaban:
Sama seperti memperbarui bidang koleksi yang ada, $setakan menambahkan bidang baru jika bidang yang ditentukan tidak ada.
Lihat contoh ini:
> 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" }
EDIT:
Jika Anda ingin menambahkan new_field ke semua koleksi Anda, Anda harus menggunakan pemilih kosong, dan mengatur multi flag ke true (param terakhir) untuk memperbarui semua dokumen
db.your_collection.update(
{},
{ $set: {"new_field": 1} },
false,
true
)
EDIT:
Dalam contoh di atas 2 bidang terakhir false, truemenentukan upsertdan multibendera.
Upsert: Jika disetel ke true, buat dokumen baru saat tidak ada dokumen yang cocok dengan kriteria kueri.
Multi: Jika disetel ke true, perbarui beberapa dokumen yang memenuhi kriteria kueri. Jika disetel ke false, perbarui satu dokumen.
Ini untuk orang Mongo versionssebelum 2.2. Untuk versi terbaru kueri diubah sedikit
db.your_collection.update({},
{$set : {"new_field":1}},
{upsert:false,
multi:true})
new_fieldint yang sama dengan panjang string di testlapangan.
Untuk memperjelas, sintaksnya adalah sebagai berikut untuk MongoDB versi 4.0.x:
db.collection.update({},{$set: {"new_field*":1}},false,true)
Berikut ini adalah contoh kerja menambahkan bidang yang diterbitkan ke koleksi artikel dan menetapkan nilai bidang menjadi true :
db.articles.update({},{$set: {"published":true}},false,true)
Pymongo 3.9+
update()sekarang tidak berlaku dan Anda harus menggunakan replace_one(), update_one()atau update_many()sebaliknya.
Dalam kasus saya, saya menggunakan update_many()dan itu memecahkan masalah saya:
db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)
Dari dokumen
update_many(filter, update, upsert=False, array_filters=None, bypass_document_validation=False, collation=None, session=None) filter: A query that matches the documents to update. update: The modifications to apply. upsert (optional): If True, perform an insert if no documents match the filter. bypass_document_validation (optional): If True, allows the write to opt-out of document level validation. Default is False. collation (optional): An instance of Collation. This option is only supported on MongoDB 3.4 and above. array_filters (optional): A list of filters specifying which array elements an update should apply. Requires MongoDB 3.6+. session (optional): a ClientSession.