Dimulai dengan MongoDB 2.4, tidak perlu lagi bergantung pada indeks unik (atau solusi lainnya) untuk atom findOrCreate
seperti operasi.
Ini berkat $setOnInsert
operator new to 2.4, yang memungkinkan Anda menentukan pembaruan yang seharusnya hanya terjadi saat memasukkan dokumen.
Ini, dikombinasikan dengan upsert
opsi, berarti Anda dapat menggunakan findAndModify
untuk mencapai findOrCreate
atomic atomik -seperti operasi.
db.collection.findAndModify({
query: { _id: "some potentially existing id" },
update: {
$setOnInsert: { foo: "bar" }
},
new: true, // return new doc if one is upserted
upsert: true // insert the document if it does not exist
})
Sebagai $setOnInsert
hanya mempengaruhi dokumen yang dimasukkan, jika dokumen yang ada ditemukan, tidak akan terjadi modifikasi. Jika tidak ada dokumen, itu akan memasukkan satu dengan _id yang ditentukan, kemudian melakukan set penyisipan saja. Dalam kedua kasus, dokumen dikembalikan.