Si le champ est membre d'un tableau en le sélectionnant, vous les sélectionnez tous.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
De plus, vous ne pouvez pas mélanger les opérateurs de mise à jour avec l'agrégation, vous ne pouvez pas utiliser des choses comme $sites.$.energy_consumption
, si vous faites de l'agrégation, vous devez utiliser des opérateurs d'agrégation, à la seule exception du $match
étape où vous pouvez utiliser des opérateurs de requête.
Requête
- solution alternative légèrement différente de la vôtre en utilisant
$setField
- je suppose que ce sera plus rapide, mais probablement peu de différence
- pas besoin d'utiliser javascript, ce sera plus lent
- c'est>=la solution MongoDB 5,
$setField
est un nouvel opérateur
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)