MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como se incrementa corretamente muitas datas no mongoDB?


A partir do Mongo 4.2 , db.collection.update() pode aceitar um pipeline de agregação, permitindo finalmente a atualização de um campo com base em seu próprio valor; evitando assim padrões ineficientes de busca/foreach.

Além disso, você estava olhando para o $inc operador para adicionar um dia, mas agora que podemos usar um pipeline de agregação como uma atualização, o $add operador pode ser usado:
// { "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" }

  • A primeira parte { date : { $exists : true } } é a consulta de correspondência, filtrando quais documentos atualizar (no nosso caso todos os documentos com a date campo).

  • A segunda parte [{ $set: { date: { $add: ["$date", 24*60*60000] } } }] é o pipeline de agregação de atualização (observe os colchetes que significam o uso de um pipeline de agregação). $set é um novo operador de agregação e um alias de $addFields . Então, qualquer operador de agregação pode ser usado dentro do $set etapa; no nosso caso, um simples $add ção entre a data existente e a representação de um dia em milissegundos.