Проблемът е, че не можете да използвате $
оператор за показване на съвпадение на вложени нива в масив. И най-важното, можете да посочите само веднъж.
Както е посочено от документацията
, това ли е $
щесамо съответства напървия намерен елемент. Това несамо означава, че ако сте имали множество съвпадения за вашата заявка, тогава ще бъде избрано само първото, това също означава, че само първото съвпадение ще се използва позиция на масива. Това означава, че нещо подобно също няма да работи:
{ $set: { '_children.addressesR.1._children.configId.a._children.$.b': 30 }
Тъй като това погрешно би съвпаднало с index
1
стойност и актуализиране на елемент, който не сте очаквали.
Ако може евентуално да актуализирате целия масив, следното ще работи:
{ $set: {"_children.addressesR.$._children.configId.a._children": [ { b: 10}, { b: 30} ] } }
Това е както казах, защото index
съвпада спървото масив.
Но предвид структурата, която имате, изглежда, че най-добрият ви вариант е да промените този масив от най-високо ниво, за да бъде вместо това поддокумент. Освен ако в действителност това няма причина да бъде масив, а не двете смесени типове документи, каквито изглежда сега.