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.