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

luwak untuk menentukan pembaruan-upsert melakukan penyisipan atau pembaruan

.update() metode di luwak membutuhkan tiga argumen untuk panggilan balik, menjadi err , numAffected , dan raw tanggapan. Gunakan objek "mentah" untuk melihat apa yang terjadi:

Member.update({user_id : 1}, 
    {$set : {name:"name1"}}, 
    {upsert : true }, 
    function (err, numAffected, raw) {
    if (!err) {
        console.log(raw)
    }
});

Anda akan melihat struktur seperti ini:

{ ok: true,
  n: 1,
  updatedExisting: false,
  upserted: [ { index: 0, _id: 5456fc7738209001a6b5e1be } ] }

Jadi selalu ada n dan kunci 'updatedExistingkeys available, where the second is false on upserts and true otherwise. terbalikwill contain the nilai _id` dari setiap dokumen baru yang dibuat.

Adapun n atau "numAffected", ini pada dasarnya selalu 1 di mana dokumen dicocokkan di bawah tanggapan kekhawatiran penulisan warisan.

Anda dapat melihat respons WriteResult baru di MongoDB 2.6 dan di atasnya menggunakan formulir Operasi Massal:

var bulk = Member.collection.initializeOrderedBulkOp();
bulk.find({user_id : 1}.upsert().update({$set : {name:"name1"}});
bulk.execute(err,result) {
   console.log( JSON.stringify( result, undefined, 2 ) );
}

Yang pada iterasi pertama Anda mendapatkan sesuatu seperti ini:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 1,
  "nMatched": 0,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": [
    {
      "index": 0,
      "_id": "5456fff138209001a6b5e1c0"
    }
  ]
}

Dan yang kedua dengan parameter yang sama seperti ini:

{
  "ok": 1,
  "writeErrors": [],
  "writeConcernErrors": [],
  "nInserted": 0,
  "nUpserted": 0,
  "nMatched": 1,
  "nModified": 0,
  "nRemoved": 0,
  "upserted": []
}

Dan dokumen hanya akan ditandai sebagai "dimodifikasi" jika ada sesuatu yang benar-benar diubah.

Jadi bagaimanapun juga, .update() operasi tidak mengembalikan dokumen yang dimodifikasi atau dokumen asli. Itu adalah .findOneAndUpdate() metode, pembungkus luwak di sekitar .findAndModify() dasar yang melakukan operasi atom. .update() metode biasanya dimaksudkan untuk operasi massal dan karena itu tidak mengembalikan konten dokumen.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana Memulai dengan ClusterControl

  2. Kueri Persimpangan Array Bersarang MongoDB

  3. indeks teks diperlukan untuk kueri $teks

  4. Bagaimana cara mengembalikan kemunculan pertama ID dengan Mongoose?

  5. sistem pemungutan suara sederhana dengan MongoDB