Hvis feltet er medlem af et array ved at vælge det, markerer du dem alle.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Du kan heller ikke blande opdateringsoperatører med aggregering, du kan ikke bruge ting som$sites.$.energy_consumption
, hvis du laver aggregering, skal du bruge aggregerede operatorer, kun med undtagelse af $match
trin, hvor du kan bruge forespørgselsoperatorer.
Forespørgsel
- alternativ lidt anderledes løsning end din ved hjælp af
$setField
- Jeg tror, det vil være hurtigere, men sandsynligvis en lille forskel
- ingen grund til at bruge javascript det vil være langsommere
- dette er>=MongoDB 5-løsning,
$setField
er ny operatør
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)