Ordenar una colección por fecha en MongoDB

Tahseen Tauseef 20 junio 2023
  1. Use la función ordenar () en MongoDB
  2. Ordenar por Fecha (Ascendente o Descendente) en MongoDB
  3. Ordenar por una cadena de fecha en MongoDB
  4. Ordenar por fecha usando Array en MongoDB
Ordenar una colección por fecha en MongoDB

En este tutorial de MongoDB, se analiza el problema de ordenar una colección en MongoDB. Se explican brevemente los diferentes métodos para clasificar la colección en la base de datos.

Use la función ordenar () en MongoDB

El problema se resuelve usando 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" : "MongoDB is an open-source database",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "MySQL is a popular open-source relational database management system",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "SQL is a database computer language",
    "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 se usa para organizarlos en orden ascendente, con las fechas anteriores apareciendo primero.

db.posts.find().sort({ date: 1 }).pretty()
{
    "_id" : 1,
    "title" : "MongoDB",
    "body" : "MongoDB is an open-source database",
    "date" : "2021-01-01T00:00:00.000Z",
        "Country" : "United Kingdom"
}
{
    "_id" : 2,
    "title" : "MySQL",
    "body" : "MySQL is a popular open-source relational database management system",
    "date" : ISODate("2020-01-01T00:00:00Z"),
        "Country" : "United States of America"
}
{
    "_id" : 3,
    "title" : "SQL",
    "body" : "SQL is a database computer language",
    "date" : ISODate("2021-01-01T00:00:00Z"),
        "Country" : "New Zealand"
}

Después de ordenarlo, 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.

Ordenar por Fecha (Ascendente o Descendente) en MongoDB

Para ordenar las fechas en orden descendente en MongoDB, use la función ordenar () y proporcione parámetros como el nombre del campo de fecha y la dirección (orden ascendente o descendente).

Sintaxis:

sort(date : 1) #For ascending order
sort(date : -1) #For descending order

Ejemplo:

 db.product.find().pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "HighLander",
                "type" : "toyota"
        },
        "price" : 2.8
        "date" : "2021-01-01T00:00:00.000Z"
}
{
        "_id" : 2,
        "item" : {
                "name" : "Swift",
                "type" : "suzuki"
        },
        "price" : 3.9
        "date" : ISODate("2020-01-01T00:00:00Z")
}
{
        "_id" : 3,
        "item" : {
                "name" : "Mirage G4",
                "type" : "mitsubishi"
        },
        "price" : 3.2
        "date" : ISODate("2021-01-01T00:00:00Z")
}

Estos son los documentos que se han insertado en la base de datos del producto. Ahora, se ordenará en orden descendente.

Consulta:

db.product.find().sort(date:-1).pretty()
{
        "_id" : 3,
        "item" : {
                "name" : "Mirage G4",
                "type" : "mitsubishi"
        },
        "price" : 3.2
        "date" : ISODate("2021-01-01T00:00:00Z")
}
{
        "_id" : 2,
        "item" : {
                "name" : "Swift",
                "type" : "suzuki"
        },
        "price" : 3.9
        "date" : ISODate("2020-01-01T00:00:00Z")
}
{
        "_id" : 1,
        "item" : {
                "name" : "HighLander",
                "type" : "toyota"
        },
        "price" : 2.8
        "date" : "2021-01-01T00:00:00.000Z"
}

Ordenar por una cadena de fecha en MongoDB

Hay dos técnicas alternativas en MongoDB para almacenar fecha/hora. El objeto de fecha se utiliza en el primer método para almacenar la fecha en los documentos.

Sintaxis:

new Date();

Consulta:

db.product.insertOne({ "productId" : 101, "productDeliveryDateTime": new Date() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238757")
}

El producto es el nombre de la colección, y el objeto Date() se usó para insertar un campo de fecha.

Para almacenar la columna de fecha en la base de datos, debe usar ISODate() en el segundo método. La Organización Internacional para la Estandarización (ISO) es una organización sin fines de lucro dedicada al desarrollo de estándares internacionales.

Sintaxis:

new ISODate();

Consulta:

db.product.insertOne({ "productId" : 102, "productDeliveryDateTime": new ISODate() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238758")
}

Aquí, el campo de fecha se inserta en la colección de productos usando ISODate().. Puede mostrar todos los documentos usando el método find():

db.product.find().pretty()
{
        "_id" : ObjectId("611c9e39e1fdc428cf238757"),
        "productId" : 101,
        "productDeliveryDateTime" : ISODate("2021-08-18T05:44:25.081Z")
}
{
        "_id" : ObjectId("611ca108e1fdc428cf238758"),
        "productId" : 102,
        "productDeliveryDateTime" : ISODate("2021-08-18T05:56:24.144Z")
}

El enfoque más accesible para guardar la fecha/hora es usar el objeto Fecha.

Si un documento tiene tanto el método de cadena Date() como el método ISODate(), MongoDB lo ordenará en la dirección del método de cadena Date() (orden ascendente o descendente). Vale la pena señalar que después de ordenar, el primer documento que se muestra es una cadena de fecha en lugar de un objeto Fecha.

Este aparece primero aunque su fecha sea posterior a la fecha del documento 2.

Consulta:

 db.language.find().pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "Python",
                "type" : "Very high level dynamic data types"
        },
        "price" : 2.8,
        "date" : "2021-01-10T00:00:00.000Z"
}
{
        "_id" : 2,
        "item" : {
                "name" : "C++",
                "type" : "High-level computer programming language"
        },
        "price" : 3.9,
        "date" : ISODate("2020-12-01T00:00:00Z")
}
{
        "_id" : 3,
        "item" : {
                "name" : "Java",
                "type" : "Java is a high-level, class-based, object-oriented programming language"
        },
        "price" : 3.2,
        "date" : ISODate("2021-08-01T00:00:00Z")
}

Estos son algunos de los documentos agregados a la colección de idiomas. También puede usar la función sort() para ordenarlos.

Consulta:

 db.language.find().sort(date:1).pretty()
{
        "_id" : 1,
        "item" : {
                "name" : "Python",
                "type" : "Very high level dynamic data types"
        },
        "price" : 2.8,
        "date" : "2021-01-10T00:00:00.000Z"
}
{
        "_id" : 3,
        "item" : {
                "name" : "Java",
                "type" : "Java is a high-level, class-based, object-oriented programming language"
        },
        "price" : 3.2,
        "date" : ISODate("2021-08-01T00:00:00Z")
}
{
        "_id" : 2,
        "item" : {
                "name" : "C++",
                "type" : "High-level computer programming language"
        },
        "price" : 3.9,
        "date" : ISODate("2020-12-01T00:00:00Z")
}

Después de ordenar todos los datos en orden creciente, puede observar usando el campo de fecha. El primer campo es el campo de cadena de fecha. El enfoque más sencillo para guardar la fecha/hora es utilizar el objeto Fecha.

Puede haber varias razones por las que MongoDB no funciona, pero debe recordar algunos procedimientos para operar con 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 de fecha dentro del documento.
  3. La cadena Date() y el tipo de datos ISODate() se utilizan para almacenar la fecha en los documentos.
  4. Cuando ordene el campo de fecha usando el método sort(), verifique qué tipo de datos usó.

Consulta:

db.document.insertOne({ "productId" : 1001, "productDeliveryDateTime": new Date() });
{
        "acknowledged" : true,
        "insertedId" : ObjectId("611c9e39e1fdc428cf238802")
}

La fecha se agrega usando la cadena Date() en este ejemplo, y el nombre de la colección es document. Puede insertar una fecha en el documento usando ISODate() de la misma manera.

Ordenar por fecha usando Array en MongoDB

Use la función ordenar () para ordenar por fecha usando una matriz en MongoDB. Debe proporcionar el campo de fecha y la dirección de clasificación en la función (orden ascendente o descendente).

En el siguiente ejemplo, agregue algunos datos en formato de matriz a la colección.

 db.student.insertMany([
      {
        "name"      : "Tom",
        "age"       : 21,
        "timestamp" : new ISODate("2021-04-01" )
      },
      {
        "name"      : "Emma",
        "age"       : 25,
        "timestamp" : new ISODate("2021-10-31" )
      },
      {
        "name"      : "John",
        "age"       : 29,
        "timestamp" : new ISODate("2021-05-02")
      }
]) 
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("611df0e76cc7e05e5e7fe74b"),
                ObjectId("611df0e76cc7e05e5e7fe74c"),
                ObjectId("611df0e76cc7e05e5e7fe74d")
        ]
}

El estudiante es el nombre de la colección, y el método ISODate() se usa para ingresar la fecha. El método de cadena Date() también está disponible.

Consulta:

 db.student.find().sort({timestamp:1}).pretty()

{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74b"),
        "name" : "Tom",
        "age" : 21,
        "timestamp" : ISODate("2021-04-01T00:00:00Z")
}
{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74d"),
        "name" : "John",
        "age" : 29,
        "timestamp" : ISODate("2021-05-02T00:00:00Z")
}
{
        "_id" : ObjectId("611df0e76cc7e05e5e7fe74c"),
        "name" : "Emma",
        "age" : 25,
        "timestamp" : ISODate("2021-10-31T00:00:00Z")
}

Todos los documentos se ordenan en orden ascendente y también se utiliza la función bonita(). Esto le permite proporcionar el resultado de una manera legible.

Este artículo explica detalladamente la clasificación de colecciones en MongoDB usando diferentes métodos en orden ascendente y descendente.

Artículo relacionado - MongoDB Sort