MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $setOnInsert

$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).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Penerapan &Pemantauan Basis Data Sumber Terbuka Gratis dengan Edisi Komunitas ClusterControl

  2. $melepaskan objek dalam kerangka agregasi

  3. MongoDB $bagi

  4. Cara Mendapatkan Nama Bulan Pendek di SQL

  5. MongoDB $kisaran