Saya baru mengenal mongodb dan sangat stres karena dokumentasi mongodb yang tidak lengkap membuat saya harus coba-coba... sayangnya, semua upaya saya tidak berhasil tanpa kesalahan, membuat saya bingung tentang apa yang terjadi dan apa yang harus di-debug...
Saya hanya perlu memperbarui beberapa catatan di database yang cocok dengan kriteria tertentu, dan untuk catatan yang tidak ada, membuat entri baru untuk itu. Saya yakin saya bisa melakukannya dengan akses database tunggal dengan update, upsert dan multi. Inilah yang saya hasilkan:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { options: { upsert: true, multi: true } } );
Saya juga sudah mencoba beberapa kombinasi atau bahkan versi lama seperti:
dbschema.Person.update( { person_id: { $in: ["734533604" ,"701084015"] } }, { $set: {"scores": 1200} }, { upsert: true }, { multi: true } );
tidak ada satupun yang berhasil...
Tolong bantu saya dengan hal-hal sepele ini... Saya dapat dengan mudah melakukannya di sql, tetapi hal nosql sangat membatasi saya.. Terima kasih!
Sunting:
Permintaan yang sama pada find berfungsi dengan baik:
dbschema.Person.find( { person_id: { $in: ["734533604" ,"701084015"] } }, function ( err, results ) {
console.log( 'result: ' + results );
console.log( 'error: ' + err );
console.log( 'result length: ' + results.length );
} );
Sunting:
Saya mengharapkan catatan "tidak ditemukan" dibuat, dan catatan yang ditemukan diperbarui. logika saya mungkin salah dan saya sangat bingung sekarang.
Awalnya, saya mencari () satu catatan pada satu waktu, mengubah nilainya, dan memanggil save () untuk setiap catatan yang diubah, tetapi ketika saya menerapkannya secara langsung, waktu respons menjadi ratusan kali lebih lambat terutama ketika ada beberapa ratus catatan untuk diperbarui pada setiap permintaan.
Kemudian saya menemukan find() + $in, dan kinerjanya dipulihkan dan bahkan lebih baik dari sebelumnya (saat kueri), tetapi pembaruan masih sangat lambat.. Oleh karena itu, sekarang saya mencari cara untuk memperbarui semua dokumen dalam satu permintaan. .
apa yang biasanya saya lakukan di SQL adalah menggunakan UPDATE WHEN CASE THEN... misalnya:
UPDATE person SET score = CASE
WHEN person_id = "734533604" THEN 1200
WHEN person_id = "701084015" THEN 1200
ELSE
score
END