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

Comment incrémenter correctement de nombreuses dates dans mongoDB ?

À 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 la date 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.