Almacenar fecha y hora en MongoDB

Tahseen Tauseef 20 junio 2023
  1. Utilice el método Date() para almacenar la fecha y la hora en MongoDB
  2. Utilice ISODate() para almacenar la fecha y la hora en MongoDB
  3. Conclusión
Almacenar fecha y hora en MongoDB

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:

  1. El ISODate con la fecha suministrada es devuelto por nueva Fecha("").
  2. new Date("") especifica un DateTime en la zona horaria local del cliente y devuelve ISODate con ese DateTime en UTC.
  3. 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.

  1. Recuerde siempre que está almacenando los datos en una colección.
  2. Hay dos formas de almacenar el campo fecha dentro del documento: Fecha() e FechaISO().
  3. Cuando ordene el campo fecha usando el método sort(), 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

Consulta de fecha utilizando ISODate():

> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();

Producción:

Consulta de fecha 1

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.