Almacenar fecha y hora en MongoDB
-
Utilice el método
Date()
para almacenar la fecha y la hora en MongoDB -
Utilice
ISODate()
para almacenar la fecha y la hora en MongoDB - Conclusión
Este artículo discutirá la mejor manera de almacenar la fecha y la hora. Esto explicará el método Date()
en detalle.
Además, se describirán diferentes enfoques para usar consultas de fecha. El problema de consulta de fecha con ISODate que no funciona en MongoDB también se discutirá con una explicación de los segmentos de código.
Utilice el método Date()
para almacenar la fecha y la hora en MongoDB
Date()
genera la fecha actual como una cadena o un objeto Date
.
new Date()
devuelve un objeto Date
con la fecha actual. El ayudante ISODate está envuelto alrededor de este objeto por mongosh; el ISODate está en UTC (hora universal).
Puede usar la función nueva Fecha()
Objeto() { [código nativo] }
o el método ISODate()
para definir una fecha particular dando una cadena de fecha ISO-8601 con un año entre 0 y 9999 Estas funciones aceptan los siguientes formatos:
- El ISODate con la fecha suministrada es devuelto por
nueva Fecha("")
. new Date("")
especifica un DateTime en la zona horaria local del cliente y devuelve ISODate con ese DateTime en UTC.new Date(<integer>)
devuelve la instancia de ISODate con el DateTime especificado en milisegundos desde la época de UNIX (1 de enero de 1970).
Comportamiento del Método Date()
en MongoDB
Los objetos Date
se mantienen internamente como un entero de 64 bits con signo que representa los milisegundos desde la época de Unix.
Todos los procedimientos y controladores de la base de datos no admiten el rango completo de 64 bits. Las fechas con años en el rango inclusivo de 0 a 9999 son seguras de manejar.
Ejemplos para el método Date()
Usar Fecha()
en una Consulta
El siguiente código agrega un documento con el campo dateAdded
establecido en la fecha actual si no existe ningún documento con el _id
igual a 1 en la colección de productos
:
db.products.updateOne(
{ _id: 1 },
{
$set: { item: "apple" },
$setOnInsert: { dateAdded: new Date() }
},
{ upsert: true }
)
Fecha de retorno como una cadena
Usa el método Date()
para devolver la fecha como una cadena, como se ve en el siguiente ejemplo:
var myDateString = Date();
Fecha de retorno como objeto Fecha
Mongosh envuelve objetos de tipo fecha con el ayudante ISODate; sin embargo, los objetos siguen siendo de tipo fecha.
El siguiente ejemplo usa new Date()
para devolver el objeto Date
con el UTC DateTime especificado.
var myDate = new Date("2016-05-18T16:00:00Z");
MongoDB Ordenar por fecha
Puede resolver este problema utilizando la función sort()
y el agregado $sort
en MongoDB. Puede ordenar los datos en orden ascendente o descendente con esta herramienta.
Ejemplo:
db.posts.find().pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
Algunos datos se agregan a la colección de publicaciones y el campo de fecha los organiza en orden ascendente, con las fechas anteriores apareciendo primero.
db.posts.find().sort({ date: 1 }).pretty()
{
"_id" : 1,
"title" : "MongoDB",
"body" : "Hi there",
"date" : "2021-01-01T00:00:00.000Z",
"Country" : "United Kingdom"
}
{
"_id" : 2,
"title" : "MySQL",
"body" : "Hello",
"date" : ISODate("2020-01-01T00:00:00Z"),
"Country" : "United States of America"
}
{
"_id" : 3,
"title" : "SQL",
"body" : "World",
"date" : ISODate("2021-01-01T00:00:00Z"),
"Country" : "New Zealand"
}
Debido a que el primer documento tiene una cadena de fecha en lugar de un objeto de fecha
, la cadena de fecha aparece primero, incluso si la fecha en el documento 2 es posterior.
MongoDB Ordenar por fecha no funciona
Puede haber varias razones por las que MongoDB no funciona, pero debe recordar algunos procedimientos para ordenar por fecha en MongoDB.
- Recuerde siempre que está almacenando los datos en una colección.
- Hay dos formas de almacenar el campo
fecha
dentro del documento:Fecha()
eFechaISO()
. - Cuando ordene el campo
fecha
usando el métodosort()
, verifique qué tipo de datos usó.
Ejemplo:
db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
"acknowledged" : true,
"insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}
La fecha se agrega utilizando la cadena Date()
en este ejemplo, y el nombre de la colección es el documento. Puede insertar una fecha en el documento usando ISODate()
de la misma manera.
Utilice ISODate()
para almacenar la fecha y la hora en MongoDB
Utilice el operador $gte
y ISODate()
para implementar la consulta de fecha con ISODate en MongoDB.
Hagamos una colección usando el documento para comprender mejor esto. La siguiente es la consulta para construir una colección con un documento:
> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}
La función buscar()
puede mostrar todos los documentos de una colección.
Consulta:
db.dateDemo.find().pretty();
Producción:
Consulta de fecha utilizando ISODate()
:
> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();
Producción:
Conclusión
Este artículo explica brevemente el método Date()
. Después de lo cual, se señala el problema de ordenar las colecciones con el método Date()
.
Un ejemplo explica cómo funciona la consulta de fecha con ISODate en MongoDB. Además, esto demostró que el mejor formato para almacenar la fecha y la hora en MongoDB es usar el formato nativo de JavaScript Date()
o ISODate()
, ya que lo convierte internamente en un objeto BSON Date
nativo.