Wenn das Feld Mitglied eines Arrays ist, wählen Sie alle aus, indem Sie es auswählen.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Außerdem können Sie Aktualisierungsoperatoren nicht mit Aggregation mischen, Sie können keine Dinge wie $sites.$.energy_consumption
verwenden , wenn Sie eine Aggregation durchführen, müssen Sie Aggregatoperatoren verwenden, mit Ausnahme von $match
Phase, in der Sie Abfrageoperatoren verwenden können.
Abfrage
- alternative etwas andere Lösung als Ihre mit
$setField
- Ich schätze, es wird schneller sein, aber wahrscheinlich kaum ein Unterschied
- Javascript muss nicht verwendet werden, es wird langsamer
- das ist>=MongoDB 5-Lösung,
$setField
ist neuer Betreiber
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)