Se o campo for membro de um array ao selecioná-lo, você está selecionando todos eles.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Além disso, você não pode misturar operadores de atualização com agregação, você não pode usar coisas como
$sites.$.energy_consumption
, se você estiver fazendo agregação, terá que usar operadores agregados, com exceção do $match
estágio em que você pode usar operadores de consulta. Consulta
- solução alternativa ligeiramente diferente da sua usando
$setField
- acho que será mais rápido, mas provavelmente pouca diferença
- não há necessidade de usar javascript, será mais lento
- esta é>=solução MongoDB 5,
$setField
é novo operador
Teste o código aqui
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)