À partir de Mongo 4.2
, db.collection.update()
peut accepter un pipeline d'agrégation, permettant enfin la mise à jour d'un champ en fonction de sa propre valeur ; évitant ainsi les modèles de recherche/foreach inefficaces.
De plus, vous regardiez le $inc
opérateur pour ajouter un jour, mais maintenant que nous pouvons utiliser un pipeline d'agrégation comme mise à jour, le $add
l'opérateur peut être utilisé :
// { "date" : ISODate("2020-04-05T07:14:17.802Z"), "x" : "y" }
db.collection.updateMany(
{ date : { $exists : true } },
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
)
// { "date" : ISODate("2020-04-06T07:14:17.802Z"), "x" : "y" }
-
La première partie
{ date : { $exists : true } }
est la requête de correspondance, filtrant les documents à mettre à jour (dans notre cas, tous les documents ayant ladate
champ). -
La deuxième partie
[{ $set: { date: { $add: ["$date", 24*60*60000] } } }]
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 un simple$add
ition entre la date existante et la représentation d'un jour en millisecondes.