Se il campo è membro di un array selezionandolo li stai selezionando tutti.
{ar :[{"a" : 1}, {"a" : 2}]}
"$ar.a" = [1 ,2]
Inoltre non puoi combinare gli operatori di aggiornamento con l'aggregazione, non puoi usare cose come $sites.$.energy_consumption
, se stai facendo l'aggregazione devi usare gli operatori aggregati, con l'unica eccezione $match
fase in cui puoi utilizzare gli operatori di query.
Interroga
- soluzione alternativa leggermente diversa dalla tua utilizzando
$setField
- Penso che sarà più veloce, ma probabilmente poca differenza
- non c'è bisogno di usare javascript, sarà più lento
- questa è>=soluzione MongoDB 5,
$setField
è un nuovo operatore
aggregate(
[{"$set":
{"sites":
{"$map":
{"input":"$sites",
"in":
{"$setField":
{"field":"new_field",
"input":"$$this",
"value":"$$this.energy_consumption"}}}}}}]
)