Saya sedikit bingung dengan findAndModify
metode di MongoDB. Apa keuntungannya dibandingkan update
metode ini? Bagi saya, sepertinya itu hanya mengembalikan item terlebih dahulu dan kemudian memperbaruinya. Tetapi mengapa saya harus mengembalikan barang terlebih dahulu? Saya membaca MongoDB: panduan definitif dan ia mengatakan bahwa itu berguna untuk memanipulasi antrian dan melakukan operasi lain yang memerlukan atomisitas gaya get-and-set. Tetapi saya tidak mengerti bagaimana cara mencapai ini. Adakah yang bisa menjelaskan hal ini kepada saya?
175
findAndModify
jaminan bahwa tidak ada operasi pembaruan lainnya yang mengganggu itu?findAndModify
mengembalikan dokumen, pembaruan tidak.Jika saya memahami Dwight Merriman (salah satu penulis asli mongoDB) dengan benar, menggunakan pembaruan untuk mengubah satu dokumen yaitu ("multi": false} juga atom. Saat ini, itu juga harus lebih cepat daripada melakukan menggunakan pembaruan yang setara menggunakan
findAndModify
.sumber
Dari dokumen MongoDB (penekanan ditambahkan):
sumber
findAndModify()
secara default memodifikasi hanya satu dokumen danupdate()
dapat memperbarui satu atau lebih dokumen, ketika saya menggunakanarrayFilters
,findAndModify()
pembaruan semua pertandingan. Mungkin itu bug ??Satu kelas kasus penggunaan yang berguna adalah penghitung dan kasus serupa. Misalnya, lihat kode ini (salah satu tes MongoDB): find_and_modify4.js .
Jadi, dengan
findAndModify
Anda menambah penghitung dan dapatkan nilainya yang bertambah dalam satu langkah. Bandingkan: jika Anda (A) melakukan operasi ini dalam dua langkah dan orang lain (B) melakukan operasi yang sama di antara langkah-langkah Anda maka A dan B mungkin mendapatkan nilai penghitung terakhir yang sama dan bukannya dua berbeda (hanya satu contoh masalah yang mungkin).sumber
Kami menggunakan findAndModify () untuk operasi Penghitung (inc atau dec) dan bidang tunggal lainnya bermutasi kasus. Memigrasi aplikasi kami dari Couchbase ke MongoDB, saya menemukan API ini untuk menggantikan kode yang tidak GetAndlock (), memodifikasi konten secara lokal, ganti () untuk menyimpan dan Dapatkan () lagi untuk mengambil kembali dokumen yang diperbarui. Dengan mongoDB, saya hanya menggunakan API tunggal ini yang mengembalikan dokumen yang diperbarui.
sumber