Démarrage de Mongo 4.2
, db.collection.update()
peut accepter un pipeline d'agrégation, permettant enfin la mise à jour/création d'un champ basé sur un autre champ :
// { 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 première partie
{}
est la requête de correspondance, filtrant les documents à mettre à jour (dans notre cas, tous les documents). -
La deuxième partie
[ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ]
est le pipeline d'agrégation de mise à jour (notez les crochets signifiant l'utilisation d'un pipeline d'agrégation).$set
est un nouvel opérateur d'agrégation et un alias de$addFields
. Ensuite, n'importe quel opérateur d'agrégation peut être utilisé dans le$set
organiser; dans notre cas une vérification d'égalité conditionnelle dont dépend la valeur à utiliser pour le nouveauactive
champ. -
N'oubliez pas
{ multi: true }
, sinon seul le premier document correspondant sera mis à jour.