Om fältet är medlem i en array genom att markera det väljer du dem alla.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Du kan inte heller blanda uppdateringsoperatorer med aggregering, du kan inte använda saker som$sites.$.energy_consumption
, om du gör aggregering måste du använda aggregerade operatorer, med undantag för $match
steg där du kan använda frågeoperatorer.
Fråga
- alternativ något annorlunda lösning än din med
$setField
- Jag antar att det kommer att gå snabbare, men förmodligen liten skillnad
- du behöver inte använda javascript det kommer att gå långsammare
- detta är>=MongoDB 5-lösning,
$setField
är ny operatör
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)