Si el campo es miembro de una matriz al seleccionarlo, los está seleccionando a todos.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Además, no puede mezclar operadores de actualización con agregación, no puede usar cosas como $sites.$.energy_consumption
, si está agregando, debe usar operadores agregados, con la única excepción de $match
etapa en la que puede utilizar operadores de consulta.
Consulta
- solución alternativa ligeramente diferente a la suya usando
$setField
- supongo que será más rápido, pero probablemente poca diferencia
- no es necesario usar javascript, será más lento
- esta es>=la solución MongoDB 5,
$setField
es nuevo operador
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)