sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizace vnořených polí v mongodb

Zde je velká otázka, potřebujete využít operace Mongo „addToSet“ a „push“? Pokud skutečně plánujete upravit pouze jednotlivé položky v poli, pak byste pravděpodobně měli tato pole sestavit jako objekty.

Zde je návod, jak bych to strukturoval:

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

To v podstatě transformuje vše na objekty JSON namísto polí. Ztratíte možnost používat $push a $addToSet ale myslím, že to všechno usnadňuje. Váš dotaz bude vypadat například takto:

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

Také si všimnete, že jsem vyhodil „ID“. Když vnořujete věci, jako je toto, můžete obecně nahradit „ID“ pouhým použitím tohoto čísla jako indexu. Koncept "ID" je nyní implikován.

Tato funkce byla přidána ve verzi 3.6 s výraznými aktualizacemi.

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



  1. Hosting ScaleGrid přidává podporu pro vysoce dostupné clustery Redis™ s automatickým sdílením

  2. Může redis plně nahradit mysql?

  3. Může být příkaz redis incr omezen na konkrétní číslo?

  4. Nejmodernější správa databáze:ClusterControl – Průvodce