Das Problem ist, dass Sie $
nicht verwenden können -Operator, um Übereinstimmungen auf verschachtelten Ebenen in einem Array anzuzeigen. Und vor allem können Sie nur einmal angeben.
Wie in der Dokumentation
angegeben , ist das der $
wird nur mit dem ersten übereinstimmen Element gefunden. Das nicht nur bedeutet, wenn Sie mehrere Übereinstimmungen für Ihre Suchanfrage hätten, würde nur die erste ausgewählt werden, es bedeutet auch, dass nur die erste Übereinstimmung Array-Position wird verwendet. Das heißt, so etwas würde auch nicht funktionieren:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 }
Da dies fälschlicherweise mit dem index
übereinstimmen würde 1
Werten und aktualisieren Sie ein Element, das Sie nicht erwartet haben.
Wenn Sie möglicherweise das Ganze aktualisieren könnten array dann würde folgendes funktionieren:
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }
Das liegt wie gesagt daran, dass der index
entspricht dem ersten Array.
Aber angesichts der Struktur, die Sie haben, scheint es Ihre beste Option zu sein, dieses Array der obersten Ebene stattdessen in ein Filialdokument zu ändern. Es sei denn, dies hat tatsächlich einen Grund, ein Array zu sein, und nicht die zwei gemischte Dokumenttypen, die es jetzt zu sein scheint.