$toDate (agregação)
Nesta página
Definição
$toDate
Converte um valor para uma data. Se o valor não puder ser convertido em uma data,
$toDate
apresentará erro. Se o valor for nulo ou estiver ausente,$toDate
retornará nulo.$toDate
tem a seguinte sintaxe:{ $toDate: <expression> } O
$toDate
usa qualquer expressãoválida.O
$toDate
é uma abreviatura para a seguinte expressão$convert
:{ $convert: { input: <expression>, to: "date" } }
Comportamento
A tabela a seguir lista os tipos de entrada que podem ser convertidos em uma data:
Tipo de entrada | Comportamento |
---|---|
Double | Retorna uma data que corresponde ao número de milissegundos representado pelo valor double truncado. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
Decimal | Retorna uma data que corresponde ao número de milissegundos representados pelo valor decimal truncado. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
Long | Retorna uma data que corresponde ao número de milissegundos representados pelo valor longo. O número positivo corresponde ao número de milissegundos desde 1° de janeiro de 1970. O número negativo corresponde ao número de milissegundos antes de 1° de janeiro de 1970. |
String | Retorna uma data que corresponde à string de data. A string deve ser uma string de data válida, como:
|
ObjectId | Retorna uma data que corresponde ao carimbo de data/hora do ObjectId. |
A tabela a seguir lista alguns exemplos de conversão em data:
Exemplo | Resultados |
---|---|
{$toDate: 120000000000.5} | ISODate("1973-10-20T21:20:00Z") |
{$toDate: NumberDecimal("1253372036000.50")} | ISODate("2009-09-19T14:53:56Z") |
{$toDate: NumberLong("1100000000000")} | ISODate("2004-11-19T11:33:20Z") |
{$toDate: NumberLong("-1100000000000")} | ISODate("1935-02-22T12:26:40Z") |
{$toDate: ObjectId("5ab9c3da31c2ab715d421285")} | ISODate("2018-03-27T04:08:58Z") |
{$toDate: "2018-03-20"} | ISODate("2018-03-20T00:00:00Z") |
{$toDate: "2018-03-20 11:00:06 +0500"} | ISODate("2018-03-20T06:00:06Z") |
{$toDate: "Friday"} | Erro |
Exemplo
Crie uma collection orders
com os seguintes documentos:
db.orders.insertMany( [ { _id: 1, item: "apple", qty: 5, price: 2, order_date: new Date( "2018-03-20" ) }, { _id: 2, item: "pie", qty: 10, price: 3, order_date: new Date( "2018-03-22" ) }, { _id: 3, item: "ice cream", qty: 2, price: 4, order_date: "2018-03-15" }, { _id: 4, item: "almonds" , qty: 5, price: 7, order_date: "2018-03-15 +10:00" } ] )
A seguinte operação de aggregation na collection orders
converte o order_date
na data anterior à ordenação pelo valor da data:
// Define stage to add convertedDate field with the converted order_date value dateConversionStage = { $addFields: { convertedDate: { $toDate: "$order_date" } } }; // Define stage to sort documents by the converted date sortStage = { $sort: { "convertedDate": 1 } }; db.orders.aggregate( [ dateConversionStage, sortStage ] )
A operação retorna os seguintes documentos:
{ _id: 4, item: 'almonds', qty: 5, price: 7, order_date: '2018-03-15 +10:00', convertedDate: ISODate("2018-03-14T14:00:00.000Z") }, { _id: 3, item: 'ice cream', qty: 2, price: 4, order_date: '2018-03-15', convertedDate: ISODate("2018-03-15T00:00:00.000Z") }, { _id: 1, item: 'apple', qty: 5, price: 2, order_date: ISODate("2018-03-20T00:00:00.000Z"), convertedDate: ISODate("2018-03-20T00:00:00.000Z") }, { _id: 2, item: 'pie', qty: 10, price: 3, order_date: ISODate("2018-03-22T00:00:00.000Z"), convertedDate: ISODate("2018-03-22T00:00:00.000Z") }
Observação
Se a operação de conversão encontrar um erro, a operação de aggregation interromperá e exibirá um erro. Para substituir esse comportamento, use $convert
em vez disso.