Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$currentDate (operador de atualização)

$currentDate

O operador define o valor de um $currentDate campo como a data atual, seja como uma data ou um carimbo de data/hora. O tipo padrão é data.

Você pode utilizar o $currentDate para implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O operador tem o $currentDate formato:

{ $currentDate: { <field1>: <typeSpecification1>, ... } }

<typeSpecification> Pode ser um dos seguintes:

  • um true booleano para definir o valor do campo para a data atual como data ou

  • um documento { $type: "timestamp" } ou { $type: "date" } que especifica explicitamente o tipo. O operador é sensível a maiúsculas e minúsculas e aceita apenas "timestamp" em letras minúsculas ou "date" em letras minúsculas.

Para especificar um <field> em um documento incorporado ou em uma array, use a notação de ponto.

A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.

$currentDate define o campo especificado para a data em que foi $currentDate executado.

Se o campo não existir, adicionará o campo a um$currentDate documento.

A partir do MongoDB,5.0 mongod não gera mais um erro quando você usa um operador de atualização como $currentDate com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em nenhuma alteração e nenhuma entrada no oplog é criada (o que significa que a operação é um no-op).

Criar uma collection de amostra customers com o seguinte documento:

db.customers.insertOne(
{ _id: 1, status: "a", lastModified: ISODate("2013-10-02T01:11:18.965Z") }
)

A operação a seguir atualiza o campo lastModified para a data atual, o campo "cancellation.date" para o carimbo de data/hora atual, além de atualizar o campo status para "D" e "cancellation.reason" para "user request".

db.customers.updateOne(
{ _id: 1 },
{
$currentDate: {
lastModified: true,
"cancellation.date": { $type: "timestamp" }
},
$set: {
"cancellation.reason": "user request",
status: "D"
}
}
)

$currentDate define o campo especificado para a data em que foi $currentDate executado.

Para verificar a atualização:

db.customers.find()

O documento atualizado se parece com:

{
"_id" : 1,
"status" : "D",
"lastModified" : ISODate("2020-01-22T21:21:41.052Z"),
"cancellation" : {
"date" : Timestamp(1579728101, 1),
"reason" : "user request"
}
}

O lastModified campo é definido como a data $currentDate em que foi executado no exemplo de atualização mostrado anteriormente.

Os métodos de atualização podem aceitar um pipeline de agregação. Especificamente, o exemplo anterior pode ser reescrito como o seguinte, usando o estágio de agregação $set e as variáveis de agregação NOW (para a data/hora atual) e CLUSTER_TIME (para o carimbo de data e hora atual):

Dica

  • Para acessar variáveis de aggregation, prefixe a variável com cifrões duplos $$ e coloque entre aspas.

  • CLUSTER_TIME está disponível apenas em conjuntos de réplicas e clusters fragmentados.

  • Os valores NOW e CLUSTER_TIME permanecem os mesmos em todo o pipeline.

db.customers.updateOne(
{ _id: 1 },
[
{ $set: { lastModified: "$$NOW", cancellation: {date: "$$CLUSTER_TIME", reason: "user request"}, status: "D" } }
]
)

Após a operação, você pode fazer uma query da collection para verificar a atualização:

db.customers.find().pretty()

A query deve retornar o seguinte documento:

{
"_id" : 1,
"status" : "D",
"lastModified" : ISODate("2020-01-22T21:02:18.994Z"),
"cancellation" : {
"date" : Timestamp(1579726934, 2),
"reason" : "user request"
}
}