A partire da Mongo 4.2
, db.collection.update()
può accettare una pipeline di aggregazione, consentendo infine l'aggiornamento/creazione di un campo basato su un altro 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 prima parte
{}
è la query di corrispondenza, che filtra quali documenti aggiornare (nel nostro caso tutti i documenti). -
La seconda parte
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
è la pipeline di aggregazione degli aggiornamenti (notare le parentesi quadre che indicano l'uso di una pipeline di aggregazione).$set
è un nuovo operatore di aggregazione e un alias di$addFields
. Quindi qualsiasi operatore di aggregazione può essere utilizzato all'interno di$set
fase; nel nostro caso un controllo di uguaglianza condizionale da cui dipende il valore da utilizzare per il nuovoactive
campo. -
Non dimenticare
{ multi: true }
, altrimenti verrà aggiornato solo il primo documento corrispondente.