$setOnInsert
MongoDB operator pembaruan bidang dapat digunakan untuk memasukkan nilai tertentu selama upsert.
Jika operasi pembaruan menghasilkan dokumen baru yang dimasukkan (yaitu upsert), maka $setOnInsert
operator berlaku, jika tidak maka tidak akan berpengaruh.
Contoh
Misalkan kita memiliki koleksi yang disebut dogs
dengan dokumen berikut:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 }
Dan kami menjalankan update()
berikut ini:perintah untuk memperbarui dokumen yang tidak ada dalam koleksi:
db.dogs.update(
{ _id: 2 },
{
$set: { weight: 50, height: 40 },
$setOnInsert: { name: "Bark" }
},
{ upsert: true }
)
Ini akan menghasilkan output berikut:
WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 2 })
Yang memberi tahu kita bahwa satu dokumen telah disalin.
Yuk cek koleksinya:
db.dogs.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 } { "_id" : 2, "height" : 40, "name" : "Bark", "weight" : 50 }
Kita dapat melihat bahwa dokumen 2 telah disisipkan, dan itu termasuk bidang/nilai yang kita sediakan untuk $setOnInsert
operator (yaitu name: "Bark"
).
Saat Dokumen Ada (yaitu Tanpa Upsert)
Sekarang mari kita coba memperbarui dokumen yang baru saja kita masukkan. Mari kita gunakan pernyataan yang sama seperti pada contoh sebelumnya, tetapi dengan nilai yang berbeda.
db.dogs.update(
{ _id: 2 },
{
$set: { weight: 55, height: 45 },
$setOnInsert: { name: "Fluffy" }
},
{ upsert: true }
)
Keluaran:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Kali ini, satu dokumen cocok dan diperbarui. Tidak ada yang terganggu.
Yuk cek lagi koleksinya.
db.dogs.find()
Hasil:
{ "_id" : 1, "name" : "Wag", "weight" : 11, "height" : 30 } { "_id" : 2, "height" : 45, "name" : "Bark", "weight" : 55 }
Jadi dalam hal ini, weight
dan height
bidang telah diperbarui, tetapi name
bidang tidak.
Alasan bidang nama tidak diperbarui adalah karena upsert tidak dilakukan. $setOnInsert
operator hanya menentukan bidang/nilai yang akan disetel saat operasi pembaruan menghasilkan dokumen baru yang dimasukkan (yaitu upsert).