MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mise à jour de MongoDB avec condition

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 nouveau active champ.

  • N'oubliez pas { multi: true } , sinon seul le premier document correspondant sera mis à jour.