MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizowanie tablic zagnieżdżonych w mongodb

Oto ważne pytanie, czy musisz wykorzystać operacje „addToSet” i „push” Mongo? Jeśli naprawdę planujesz modyfikować tylko pojedyncze elementy w tablicy, prawdopodobnie powinieneś zbudować te tablice jako obiekty.

Oto, jak bym to zorganizował:

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

To zasadniczo przekształca wszystko w obiekty JSON zamiast w tablice. Tracisz możliwość używania $push i $addToSet ale myślę, że to wszystko ułatwia. Na przykład Twoje zapytanie wyglądałoby tak:

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

Zauważysz również, że porzuciłem „dowody”. Kiedy zagnieżdżasz takie rzeczy, zazwyczaj możesz zastąpić "ID" używając po prostu tej liczby jako indeksu. Koncepcja „ID” jest teraz sugerowana.

Ta funkcja została dodana w wersji 3.6 z ekspresyjnymi aktualizacjami.

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. Pierwsze kroki ze sterownikiem MongoDB Go

  2. MongoDB - Agregacja - Aby uzyskać unikalne elementy w tablicy

  3. Node.js + mangusta znajdź zawiesza węzeł, gdy ponad 100 wyników

  4. Obserwujący - projekt bazy danych mongodb

  5. Meteor:nieoczekiwany kod wyjścia mongo 100