Ако полето е член на масив, като го изберете, вие избирате всички тях.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Също така не можете да смесвате оператори за актуализиране с агрегиране, не можете да използвате неща като $sites.$.energy_consumption
, ако правите агрегиране, трябва да използвате оператори за агрегиране, с изключение само на $match
етап, където можете да използвате оператори за заявки.
Заявка
- алтернативно малко по-различно решение от вашето, използващо
$setField
- Предполагам, че ще бъде по-бързо, но вероятно малка разлика
- няма нужда да използвате javascript, ще бъде по-бавно
- това е>=решение MongoDB 5,
$setField
е нов оператор
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)