No MongoDB, o
$toDate
operador de agregação converte um valor em uma data $toDate
recebe qualquer expressão válida. Se a expressão não puder ser convertida em uma data, ela retornará um erro. Se a expressão for null
ou ausente, ele retorna null
. Exemplo
Suponha que tenhamos uma coleção chamada
samples
com o seguinte documento:{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Podemos usar a seguinte consulta para retornar cada um desses valores como uma Data.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Resultado:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Como esperado, todos os campos são retornados com seus valores correspondentes convertidos em valores de data.
Você pode notar que o campo ObjectId retorna uma data diferente dos demais. Isso ocorre porque o
_id
o valor do campo reflete a data em que o documento foi criado, enquanto as outras datas foram apenas datas arbitrárias criadas por mim. Mais sobre o ObjectId abaixo. Tipos de entrada
O
$toDate
O operador aceita os seguintes tipos de entrada:- Duplo
- Decimal
- Longo
- String (deve ser uma string de data válida)
- ObjectID
Mais sobre estes abaixo.
Tipos Numéricos
Ao usar os tipos numéricos (Double, Decimal e Long),
$toDate
retorna uma data que corresponde ao número de milissegundos representado pelo valor. Para Double e Decimal, este é o valor truncado. O $toDate
O operador interpreta os valores numéricos da seguinte forma:- Um valor positivo corresponde ao número de milissegundos desde 1º de janeiro de 1970.
- Um valor negativo corresponde ao número de milissegundos antes de 1º de janeiro de 1970.
Tipos de string
Ao usar um tipo de string, a string deve ser uma string de data válida. Por exemplo:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Você não pode usar datas incompletas ou valores inválidos, como
"Monday"
, "March"
, "2020"
, etc ObjectId
Os valores ObjectId são valores hexadecimais de 12 bytes que consistem em:
- Um valor de carimbo de data/hora de 4 bytes, representando a criação do ObjectId, medido em segundos desde a época do Unix.
- Um valor de 5 bytes é aleatório
- Um contador de incremento de 3 bytes, inicializado com um valor aleatório.
O
$toDate
O operador retorna a parte do carimbo de data/hora como uma Data.