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

Mongodb memperbarui sejumlah dokumen

Per Sammaye, sepertinya tidak ada cara yang "tepat" untuk melakukan ini. Solusi saya adalah membuat urutan seperti yang dijelaskan di situs mongo dan cukup tambahkan bidang 'seq' ke setiap catatan dalam koleksi saya. Sekarang saya memiliki bidang unik yang dapat diurutkan dengan andal untuk diperbarui.

Penyortiran yang andal penting di sini. Saya hanya akan mengurutkan _id yang dibuat secara otomatis tetapi saya segera menyadari bahwa urutan alami TIDAK sama dengan urutan naik untuk ObjectId (dari halaman ini sepertinya nilai string lebih diutamakan daripada nilai objek yang cocok dengan perilaku yang saya amati dalam pengujian). Selain itu, sangat mungkin untuk sebuah record dipindahkan pada disk yang membuat urutan alami tidak dapat diandalkan untuk penyortiran.

Jadi sekarang saya dapat meminta catatan dengan 'seq' terkecil yang BELUM diperbarui untuk mendapatkan titik awal yang inklusif. Selanjutnya saya meminta catatan dengan 'seq' lebih besar dari titik awal saya dan melewati (penting untuk dilewati karena 'seq' mungkin jarang jika Anda menghapus dokumen, dll...) jumlah catatan yang ingin saya perbarui. Letakkan batas 1 pada kueri itu dan Anda mendapatkan titik akhir non-inklusif. Sekarang saya dapat mengeluarkan pembaruan dengan kueri 'diperbarui' =0, 'seq'>=titik awal saya dan

Berikut langkah-langkahnya lagi:

  1. buat urutan kenaikan otomatis menggunakan findAndModify
  2. tambahkan bidang ke koleksi Anda yang menggunakan urutan kenaikan otomatis
  3. kueri untuk menemukan titik awal yang sesuai:db.xx.find({ updated:0 }).sort({ seq:1 }).limit(1)
  4. kueri untuk menemukan titik akhir yang sesuai:db.xx.find({ seq:{ $gt:startSeq }}).sort({ seq:1 }).skip(updateCount).limit(1)
  5. perbarui koleksi menggunakan titik awal dan akhir:db.xx.update({ updated:0, seq:{ $gte:startSeq }, seq:{ $lt:endSeq }, $isolated:1}, { updated :1 },{ multi:benar })

Cukup menyakitkan tapi itu menyelesaikan pekerjaan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB :Kerangka kerja agregasi :Dapatkan dokumen bertanggal terakhir per ID pengelompokan

  2. Mengelola Operasi yang Berjalan Lama di MongoDB

  3. luwak mengisi referensi ke subdokumen

  4. Mongodb:mengembalikan filter yang cocok saat menggunakan $atau di find()

  5. Nilai waktu tanggal MongoDB tidak disimpan dengan benar