$currentDate
Definição
$currentDate
O operador
$currentDate
define o valor de um campo para a data atual, como data ou carimbo de data/hora. O tipo padrão é data.
Compatibilidade
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
Sintaxe
O operador $currentDate
tem o 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 ouum 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.
Comportamento
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 $currentDate
foi executado.
Se o campo não existir, $currentDate
adicionará o campo a um documento.
A partir do MongoDB 5.0, mongod
não gera mais um erro ao usar um operador de atualização como $currentDate
com uma expressão de operando vazia ( { }
). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).
Exemplo
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 $currentDate
foi 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 campo lastModified
é definido como a data em que $currentDate
foi executado no exemplo de atualização mostrado anteriormente.
Alternativa de aggregation para $currentDate
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
eCLUSTER_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" } }