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

Memperbarui array bersarang di mongodb

Inilah pertanyaan besarnya, apakah Anda perlu memanfaatkan operasi "addToSet" dan "push" Mongo? Jika Anda benar-benar berencana untuk memodifikasi item individual saja dalam array, maka Anda mungkin harus membangun array ini sebagai objek.

Inilah cara saya menyusun ini:

{
    id: 1,
    items: 
        { 
          "2" : { "blocks" : { "3" : { txt : 'hello' } } },
          "5" : { "blocks" : { "1" : { txt : 'foo'}, "2" : { txt : 'bar'} } }
        }
}

Ini pada dasarnya mengubah semuanya menjadi objek JSON alih-alih array. Anda kehilangan kemampuan untuk menggunakan $push dan $addToSet tapi saya pikir ini membuat segalanya lebih mudah. Misalnya, kueri Anda akan terlihat seperti ini:

db.objects.update({'items.2': {$exists:true} }, {'$set': {'items.2.blocks.0.txt': 'hi'}})

Anda juga akan melihat bahwa saya telah membuang "ID". Saat Anda menyusun hal-hal seperti ini, Anda biasanya dapat mengganti "ID" dengan hanya menggunakan nomor itu sebagai indeks. Konsep "ID" sekarang tersirat.

Fitur ini telah ditambahkan di 3.6 dengan pembaruan ekspresif.

db.objects.update( {id: 1 }, { $set: { 'items.$[itm].blocks.$[blk].txt': "hi", } }, { multi: false, arrayFilters: [ { 'itm.id': 2 }, { 'blk.id': 3} ] } )



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. nilai grup mongodb berdasarkan beberapa bidang

  2. Meminta MongoDB GridFS?

  3. Mengurutkan berdasarkan bidang virtual di mongoDB (luwak)

  4. MongoDb:Manfaat menggunakan ObjectID vs string yang berisi Id?

  5. Tingkat Ketidakamanan MongoDB dan Cara Menghindarinya