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

Come si incrementano correttamente molte date in mongoDB?

A partire da Mongo 4.2 , db.collection.update() può accettare una pipeline di aggregazione, consentendo infine l'aggiornamento di un campo in base al proprio valore; evitando così schemi di ricerca/foreach inefficienti.

Inoltre, stavi guardando il $inc operatore per aggiungere un giorno, ma ora che possiamo utilizzare una pipeline di aggregazione come aggiornamento, il $add operatore può essere utilizzato:

// { "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 prima parte { date : { $exists : true } } è la query di corrispondenza, che filtra quali documenti aggiornare (nel nostro caso tutti i documenti che hanno la date campo).

  • La seconda parte [{ $set: { date: { $add: ["$date", 24*60*60000] } } }] è 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 semplice $add izione tra la data esistente e la rappresentazione di un giorno in millisecondi.