Definición
$toDateConvierte un valor en una fecha. Si el valor no se puede convertir a una fecha, se
$toDategenera$toDateun error. Si el valor es nulo o falta, devuelve un valor nulo.$toDatetiene la siguiente sintaxis:{ $toDate: <expression> } El toma cualquier valor
$toDateválido expresión.$toDatees una abreviatura de la siguiente$convertexpresión:{ $convert: { input: <expression>, to: "date" } }
Comportamiento
La siguiente tabla enumera los tipos de entrada que se pueden convertir a una fecha:
Tipo de entrada | Comportamiento |
|---|---|
Double | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor doble truncado. El número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes de enero 1, 1970. |
Decimal | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor decimal truncado. El número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes de enero 1, 1970. |
Long | Devuelve una fecha que corresponde a la cantidad de milisegundos representados por el valor largo. El número positivo corresponde al número de milisegundos desde el 1 de enero de 1970. El número negativo corresponde al número de milisegundos antes de enero 1, 1970. |
String | Devuelve una fecha que corresponde a la string de fecha. La cadena debe ser una cadena de fecha válida, como por ejemplo:
|
ObjectId | Devuelve una fecha que corresponde a la marca de tiempo del ObjectId. |
Marca de tiempo | Devuelve una fecha que corresponde a la marca de tiempo. |
La siguiente tabla enumera algunos ejemplos de conversión a fecha:
Ejemplo | Resultados |
|---|---|
| FechaISO("1973-10-20T21:20:00Z") |
| FechaISO("2009-09-19T14:53:56Z") |
| FechaISO("2004-11-19T11:33:20Z") |
| FechaISO("1935-02-22T12:26:40Z") |
| FechaISO("2018-03-27T04:08:58Z") |
| FechaISO("2018-03-20T00:00:00Z") |
| FechaISO("2018-03-20T06:00:06Z") |
| Error |
| FechaISO("2021-11-23T17:21:58.00Z") |
Ejemplo
Cree una colección orders con los siguientes 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" } ] )
La siguiente operación de agregación en la colección orders convierte order_date en fecha antes de ordenar por el valor de fecha:
// 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 ] )
La operación devuelve los siguientes 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") }
Nota
Si la operación de conversión detecta un error, la operación de agregación se detiene y genera un error. Para anular este comportamiento,$convert utilice.