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

MongoDB:Menghapus bidang dari SEMUA subdokumen dalam bidang array

Alasan Anda mendapatkan kesalahan itu adalah karena Anda tidak memiliki predikat dalam klausa filter. Anda dapat melakukan ini:

mongos> db.test.update({"messages.id": {$exists: true}}, {$unset: {"messages.$.id":true}}, {multi:true})

Dan Anda tidak akan mendapatkan kesalahan - sebenarnya salah satu dokumen akan memiliki id atribut dihapus. Masalahnya adalah bahwa operator posisi hanya cocok dengan elemen PERTAMA dari array yang cocok dengan predikat Anda, tidak cocok dengan semua elemen. Masalah yang lebih besar adalah saat ini tidak mungkin untuk memperbarui semua elemen dalam array di MongoDB (https ://jira.mongodb.org/browse/SERVER-1243 ).

Anda harus mengulangi setiap elemen dalam larik menggunakan posisi numerik ("messages.0.id", "messages.1.id", dll.) atau Anda dapat menarik larik ke dalam aplikasi Anda, loop melalui elemen dan memperbaruinya, lalu menyimpan array kembali.

Anda dapat melihat dari tiket JIRA bahwa masalah ini telah dibuka cukup lama tetapi 10gen tampaknya tidak menganggapnya sebagai prioritas yang sangat tinggi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Praktik terbaik untuk memperbarui data yang digandakan secara tidak sinkron di mongodb

  2. DropIndex MongoDB()

  3. Bagaimana cara menggunakan variabel sebagai nama bidang di mongodb-native findOne()?

  4. MongoDB ReplicaSet - peran PRIMARY jatuh ke SECONDARY ketika hanya PRIMARY yang tersisa

  5. Bagaimana saya bisa menghapus peringatan penghentian ini di MongoDB dan mengapa itu terjadi?