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

MongoDB updateMany mit Conditional

Sie möchten wirklich bulkWrite() mit zwei "updateMany" stattdessen darin enthaltene Anweisungen. Aggregationsausdrücke können nicht verwendet werden, um eine "alternative Auswahl" in irgendeiner Form von Update-Anweisungen vorzunehmen.

db.country.bulkWrite([
  { "updateMany": {
    "filter": { "pop": { "$lt": 20000000 } },
    "update": { "$set": { "country": "Small Country" } }
  }},
  { "updateMany": {
    "filter": { "pop": { "$gt": 20000000 } },
    "update": { "$set": { "country": "Large Country" } } 
  }}
])

Es gibt noch eine ausstehende "Funktionsanfrage" auf SERVER-6566 für "bedingte Syntax", aber das ist noch nicht gelöst. Die "Massen"-API wurde tatsächlich eingeführt, nachdem diese Anfrage gestellt wurde, und kann wirklich angepasst werden wie gezeigt, um mehr oder weniger zu tun dasselbe.

Verwenden Sie auch $out in einer Aggregationsanweisung, wie ansonsten vorgeschlagen wurde, ist keine Option zum "Aktualisieren" und kann derzeit nur in eine "neue Sammlung" schreiben. Die geplante Änderung ab MongoDB 4.2 würde $out tatsächlich "aktualisieren" eine bestehende Sammlung, allerdings dies wäre nur der Fall, wenn sich die zu aktualisierende Sammlung von jeder anderen Sammlung unterscheidet, die beim Sammeln von Daten aus der Aggregationspipeline verwendet wird. Es ist also nicht möglich um eine Aggregationspipeline zum Aktualisieren derselben zu verwenden Sammlung als das, woraus Sie lesen.

Kurz gesagt, verwenden Sie bulkWrite() .