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

Aktualizace hlubokého záznamu v MongoDb

Problém je v tom, že nemůžete použít $ operátor, který zobrazí shodu na vnořených úrovních v poli. A co je nejdůležitější, můžete zadat pouze jednou.

Jak je uvedeno v dokumentaci , je to $ bude pouze odpovídat prvnímu nalezený prvek. To nejen jen znamená, že pokud máte pro svůj dotaz více shod, bude vybrána pouze první, což také znamená, že pouze první odpovídající bude použita pozice pole. To znamená, že něco takového by také nefungovalo:

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

Protože by to chybně odpovídalo index 1 hodnotu a aktualizaci položky, kterou jste nečekali.

Pokud byste mohli aktualizovat celek pole, pak by fungovalo následující:

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

Jak jsem řekl, protože index odpovídá prvnímu pole.

Ale vzhledem ke struktuře, kterou máte, se zdá, že nejlepší možností je změnit pole nejvyšší úrovně na vnořený dokument. Pokud to ve skutečnosti nemá důvod být polem spíše než dva smíšené typy dokumentů, jak se nyní zdá.



  1. jak se mohu připojit k mongodb z kódu Ruby?

  2. redis-cli přesměrován na 127.0.0.1

  3. Mongoose předává data pomocí pomocníka Transaction

  4. Návrh schématu MongoDB:Vždy existuje schéma