MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie verwendet man die $set- und Punktnotation, um eingebettete Array-Elemente mit dem entsprechenden alten Element zu aktualisieren?

Wenn das Feld Mitglied eines Arrays ist, wählen Sie alle aus, indem Sie es auswählen.

{ar :[{"a" : 1}, {"a" : 2}]}

"$ar.a" = [1 ,2]

Außerdem können Sie Aktualisierungsoperatoren nicht mit Aggregation mischen, Sie können keine Dinge wie $sites.$.energy_consumption verwenden , wenn Sie eine Aggregation durchführen, müssen Sie Aggregatoperatoren verwenden, mit Ausnahme von $match Phase, in der Sie Abfrageoperatoren verwenden können.

Abfrage

  • alternative etwas andere Lösung als Ihre mit $setField
  • Ich schätze, es wird schneller sein, aber wahrscheinlich kaum ein Unterschied
  • Javascript muss nicht verwendet werden, es wird langsamer
  • das ist>=MongoDB 5-Lösung, $setField ist neuer Betreiber

Code hier testen

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