Jeśli pole należy do tablicy, zaznaczając je, zaznaczasz je wszystkie.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Nie możesz też mieszać operatorów aktualizacji z agregacją, nie możesz używać takich rzeczy jak $sites.$.energy_consumption
, jeśli robisz agregację, musisz użyć operatorów agregujących, z wyjątkiem $match
etap, w którym możesz użyć operatorów zapytań.
Zapytanie
- alternatywne, nieco inne rozwiązanie niż twoje przy użyciu
$setField
- chyba będzie szybciej, ale prawdopodobnie niewielka różnica
- nie ma potrzeby używania javascriptu, będzie wolniej
- to jest>=rozwiązanie MongoDB 5,
$setField
jest nowym operatorem
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)