sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB updateMany con Condicional

Realmente quieres querer bulkWrite() usando dos "updateMany" declaraciones dentro de él en su lugar. Las expresiones de agregación no se pueden usar para hacer una "selección alternativa" en ninguna forma de declaración de actualización.

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

Todavía hay una "solicitud de función" pendiente en SERVER-6566 para "sintaxis condicional", pero esto aún no está resuelto. La API "en masa" en realidad se introdujo después de que se presentó esta solicitud, y realmente se puede adaptar como se muestra para hacer más o menos lo mismo.

También usando $out en una declaración de agregación, como se sugirió de otra manera, no es una opción para "actualizar" y solo puede escribir en una "nueva colección" en la actualidad. El cambio programado de MongoDB 4.2 en adelante permitiría $out para realmente "actualizar" una colección existente, sin embargo esto solo sería donde la colección que se actualizará es diferente de cualquier otra colección utilizada dentro de la recopilación de datos de la canalización de agregación. Entonces no es posible usar una canalización de agregación para actualizar el mismo colección como lo que estás leyendo.

En resumen, use bulkWrite() .