sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdaterar ett djupt rekord i MongoDb

Problemet är att du inte kan använda $ operatorn för att visa matchning på kapslade nivåer i en array. Och viktigast av allt kan du bara ange en gång.

Som framgår av dokumentationen , är att $ kommer endast matcha den första element hittades. Det inte bara betyder att om du hade flera matchningar för din fråga så skulle bara den första väljas, det betyder också att endast den första matchade arrayposition kommer att användas. Det betyder att något sådant här inte heller skulle fungera:

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

Eftersom det felaktigt skulle matcha index 1 värdera och uppdatera ett objekt du inte förväntade dig.

Om du möjligen kunde uppdatera hela array då skulle följande fungera:

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

Det är som jag sa, eftersom index matchar för den första array.

Men med tanke på den struktur du har, verkar det som att ditt bästa alternativ är att ändra den översta nivån till ett underdokument istället. Såvida detta inte i verkligheten har en anledning att vara en array, snarare än de två blandade dokumenttyper som det verkar vara nu.



  1. Meteor Mongo findOne returnerar odefinierad metod

  2. Konstruera ett personligt Facebook-liknande nyhetsflöde:SQL, MongoDB?

  3. Extrahera en lista med delsträngar från MongoDB med ett reguljärt uttryck

  4. Mongodb hitta skapade resultat efter datum idag