MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggiornamento MongoDB con condizione

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 nuovo active campo.

  • Non dimenticare { multi: true } , altrimenti verrà aggiornato solo il primo documento corrispondente.