sql >> Database >  >> NoSQL >> MongoDB

Een diep record bijwerken in MongoDb

Het probleem is dat je de $ . niet kunt gebruiken operator om overeenkomsten op geneste niveaus in een array weer te geven. En het belangrijkste is dat je maar één keer kunt specificeren.

Zoals vermeld in de documentatie , is dat de $ zal alleen overeenkomen met de eerste element gevonden. Dat niet alleen betekent dat als u meerdere overeenkomsten voor uw zoekopdracht had, alleen de eerste zou worden gekozen, dit betekent ook dat alleen de eerste overeenkomende array-positie wordt gebruikt. Dat betekent dat zoiets als dit ook niet zou werken:

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

Omdat dat ten onrechte overeenkomt met de index 1 waardeer en update een item dat u niet had verwacht.

Als je de gehele . zou kunnen updaten array, dan zou het volgende werken:

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

Dat is zoals ik al zei, omdat de index komt overeen met de eerste array.

Maar gezien de structuur die je hebt, lijkt het de beste optie om die array op het hoogste niveau te veranderen in een subdocument. Tenzij dit in werkelijkheid een reden heeft om een ​​array te zijn, in plaats van de twee gemengde documenttypen die het nu lijkt te zijn.



  1. Hoe verschilt kolomgeoriënteerd NoSQL van documentgeoriënteerd?

  2. erfenis in documentendatabase?

  3. MongoDB:hoe vind je 10 willekeurige documenten in een verzameling van 100?

  4. Multifield-indexen maken in Mongoose / MongoDB