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

Memperbarui catatan mendalam di MongoDb

Masalahnya adalah Anda tidak dapat menggunakan $ operator untuk menunjukkan kecocokan pada level bersarang dalam array. Dan yang terpenting Anda hanya bisa menentukan sekali.

Sebagaimana dinyatakan dari dokumentasi , apakah itu $ akan hanya cocok dengan pertama elemen ditemukan. Itu bukan hanya berarti jika Anda memiliki beberapa kecocokan untuk kueri Anda, maka hanya yang pertama yang akan dipilih, itu juga berarti bahwa hanya pertama cocok posisi array akan digunakan. Itu berarti sesuatu seperti ini juga tidak akan berhasil:

{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 } 

Karena itu akan secara keliru cocok dengan index 1 nilai dan perbarui item yang tidak Anda harapkan.

Jika Anda dapat memperbarui keseluruhan array maka yang berikut ini akan berfungsi:

{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }

Itu seperti yang saya katakan, karena index cocok untuk pertama larik.

Tetapi mengingat struktur yang Anda miliki, tampaknya pilihan terbaik Anda adalah mengubah array tingkat atas itu menjadi subdokumen. Kecuali dalam kenyataannya ini memiliki alasan untuk menjadi sebuah array, bukan dua jenis dokumen campuran yang tampak seperti sekarang.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kesalahan MongoDb dengan php 7 di xampp CodeIgniter

  2. Operator kueri $expr tampaknya tidak berfungsi dengan notasi titik array

  3. luwak menggunakan luwak di simpul ingin menggunakan atau dan dalam kueri

  4. Django-Nonrel dengan bidang daftar Mongodb

  5. Fungsi Azure tidak mengembalikan hasil