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

Adakah cara untuk mendapatkan IDS yang dimodifikasi dari operasi massal mongodb menggunakan luwak?

Dari satu sudut pandang jawabannya adalah "tidak" dan ada alasan yang sangat bagus untuk itu.

Secara umum, operasi "pembaruan" MongoDB dimaksudkan untuk bekerja di semua dokumen yang umumnya "banyak", oleh karena itu berarti apa pun yang cocok dengan kriteria. Jadi kasus umum di sini adalah apa pun yang Anda minta untuk diperbarui baik dalam bentuk tunggal atau dengan pilihan diperbarui atau tidak, tergantung pada apakah ada yang cocok.

Dalam konteks "Massal", banyak hal yang sama berlaku, karena ada kriteria yang cocok atau tidak, dalam hal ini Anda akan mendapatkan nilai yang dikembalikan untuk nMatched dan nModified masing-masing, karena ada juga kemungkinan bahwa dokumen "cocok" tidak benar-benar diperbarui di mana data yang ada untuk dimodifikasi sudah merupakan nilai yang menjadi target modifikasi.

Perbedaan terakhir antara nMatched dan nModified adalah alasan utama mengapa "Anda tidak dapat melakukan ini dengan andal" , karena tidak semua yang cocok harus diubah.

Namun Anda dapat membuat perkiraan nilai dalam hal membedakan antara tindakan "upsert" dan "pembaruan" yang sebenarnya. Itu tidak akan 100% akurat karena perbedaan yang dicatat, tetapi proses dasarnya adalah membandingkan daftar input Anda dengan nilai yang dikembalikan dari getUpsertedIds() , yang merupakan panggilan yang valid.

Menghindari sintaks ES6 untuk seluruh dunia saat ini:

var upserted = result.getUpsertedIds();    // get this from the bulk result

upserted = upserted.map(function(up) { return up._id }); // filter out just the _id values

var modifiedIds = edges.map(function(edge) {    // get _id only from source 
    return edge.id;  
}).filter(function(edge) {
    return upserted.indexOf(edge) == -1;        // and return only non upserted
});

Di mana hasil yang dikembalikan dari .getUpsertedIds() adalah larik objek yang berisi posisi "indeks" dari pembaruan massal dan _id yang dihasilkan atau disediakan nilai "upsert".

[ { index: 0, _id: 1 } ]

Jadi, cocokkan daftar masukan Anda dengan daftar "yang dimasukkan" untuk melihat "apa yang tidak ada" , pada dasarnya mengembalikan hal-hal yang mungkin baru saja dimodifikasi. Tentu dengan catatan jika nilainya sudah sama dengan modifikasi, maka itu sama sekali bukan modifikasi.

Namun karena cara kerja API, itu yang akan Anda dapatkan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dokumen Baca dan sisipkan dengan penguncian/transaksi di nodejs dengan mongodb

  2. Indeks Teks MongoDB di semua Bidang menggunakan Java

  3. Periksa jumlah koneksi saat ini ke MongoDb

  4. kueri di mongo Shell memberikan SyntaxError:missing :after property

  5. Hitung turunan orde pertama dengan kerangka agregasi MongoDB