En MongoDB, el $toDate
el operador de agregación convierte un valor en una fecha
$toDate
toma cualquier expresión válida. Si la expresión no se puede convertir en una fecha, devuelve un error. Si la expresión es null
o falta, devuelve null
.
Ejemplo
Supongamos que tenemos una colección llamada samples
con el siguiente documento:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Podemos usar la siguiente consulta para devolver cada uno de esos valores como una fecha.
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 era de esperar, todos los campos se devuelven con sus valores correspondientes convertidos a valores de Fecha.
Puede notar que el campo ObjectId devuelve una fecha diferente a las demás. Esto se debe a que el _id
El valor del campo refleja la fecha en que se creó el documento, mientras que las otras fechas fueron solo fechas arbitrarias creadas por mí. Más información sobre el ObjectId a continuación.
Tipos de entrada
El $toDate
el operador acepta los siguientes tipos de entrada:
- Doble
- decimales
- Largo
- Cadena (debe ser una cadena de fecha válida)
- Id. de objeto
Más sobre estos a continuación.
Tipos numéricos
Al usar los tipos numéricos (Doble, Decimal y Largo), $toDate
devuelve una fecha que corresponde al número de milisegundos representado por el valor. Para Double y Decimal, este es el valor truncado. El $toDate
El operador interpreta los valores numéricos de la siguiente manera:
- Un valor positivo corresponde al número de milisegundos desde el 1 de enero de 1970.
- Un valor negativo corresponde al número de milisegundos antes del 1 de enero de 1970.
Tipos de cadenas
Cuando se usa un tipo de cadena, la cadena debe ser una cadena de fecha válida. Por ejemplo:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
No puede usar fechas incompletas o valores no válidos como "Monday"
, "March"
, "2020"
, etc.
Id. de objeto
Los valores de ObjectId son valores hexadecimales de 12 bytes que constan de:
- Un valor de marca de tiempo de 4 bytes, que representa la creación del ObjectId, medido en segundos desde la época de Unix.
- Un byte de 5 es un valor aleatorio
- Un contador incremental de 3 bytes, inicializado a un valor aleatorio.
El $toDate
el operador devuelve la parte de la marca de tiempo como una fecha.