Iniciando Mongo 4.2
, db.collection.update()
puede aceptar una tubería de agregación, permitiendo finalmente la actualización/creación de un campo basado en otro campo:
// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
{},
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
{ multi: true }
)
// { a: "Hello", b: "World", active: true }
// { a: "Olleh", b: "Dlrow", active: false }
-
La primera parte
{}
es la consulta de coincidencia, filtrando qué documentos actualizar (en nuestro caso, todos los documentos). -
La segunda parte
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
es la canalización de agregación de actualizaciones (tenga en cuenta los corchetes que indican el uso de una canalización de agregación).$set
es un nuevo operador de agregación y un alias de$addFields
. Entonces cualquier operador de agregación puede usarse dentro del$set
escenario; en nuestro caso, una comprobación de igualdad condicional de la que depende el valor a utilizar para el nuevoactive
campo. -
No olvides
{ multi: true }
, de lo contrario, solo se actualizará el primer documento coincidente.