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 adate
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.