MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come utilizzare la notazione $ set e punto per aggiornare gli elementi dell'array incorporati utilizzando il vecchio elemento corrispondente?

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

Testare il codice qui

aggregate(
[{"$set":
  {"sites":
   {"$map":
    {"input":"$sites",
     "in":
     {"$setField":
      {"field":"new_field",
       "input":"$$this",
       "value":"$$this.energy_consumption"}}}}}}]
)