Problem polega na tym, że nie możesz użyć $
operator, aby pokazać dopasowanie na zagnieżdżonych poziomach w tablicy. A co najważniejsze, możesz określić tylko raz.
Jak stwierdzono w dokumentacji
, czy $
będzie tylko dopasuj pierwszy znaleziony element. To nie tylko oznacza, że jeśli masz wiele dopasowań do zapytania, zostanie wybrane tylko pierwsze, oznacza to również, że tylko pierwszy dopasowany zostanie użyta pozycja tablicy. Oznacza to, że coś takiego również nie zadziała:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 }
Ponieważ to błędnie pasuje do index
1
wartość i zaktualizuj element, którego się nie spodziewałeś.
Jeśli mógłbyś ewentualnie zaktualizować całość tablicy, wtedy zadziałałoby następujące:
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }
Tak jak powiedziałem, ponieważ index
pasuje do pierwszego tablica.
Ale biorąc pod uwagę strukturę, którą masz, wydaje się, że najlepszą opcją jest zmiana tablicy najwyższego poziomu na dokument podrzędny. Chyba że w rzeczywistości ma to powód, by być tablicą, a nie dwoma mieszane typy dokumentów, na które wygląda teraz.