Encuentra objetos entre dos fechas en MongoDB

Tahseen Tauseef 20 junio 2023
  1. Consulta con rango de fechas en MongoDB
  2. $gt en MongoDB
  3. $gte en MongoDB
  4. $lt en MongoDB
  5. $lte en MongoDB
  6. Encuentra documentos entre dos fechas en MongoDB
  7. Buscar documentos después de una fecha específica en MongoDB
  8. Buscar documentos antes de una fecha específica en MongoDB
  9. Comparación basada en fecha en MongoDB
Encuentra objetos entre dos fechas en MongoDB

En este artículo, se discute brevemente el problema de encontrar un objeto entre dos fechas. Además, se explican brevemente los operadores $gte, $lte, $gt y $lt utilizados para este fin.

Consulta con rango de fechas en MongoDB

Esta sección lo guiará a través de la escritura de una consulta de rango de fechas de MongoDB para recuperar datos basados en una marca de tiempo o un rango de fechas. Las consultas de fecha en MongoDB, por ejemplo, son fechas mayores o menores que la hora o la fecha.

Para realizar una consulta en MongoDB usando un rango de fechas, use la sintaxis básica que se describe a continuación.

db.collection.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

Esta consulta devolverá todos los elementos de la colección cuyo campo día sea mayor o igual que 2020-01-21 pero menor o igual que 2020-01-24. Los pasos descritos anteriormente son sencillos.

Sin embargo, hay algunas inconsistencias menores en estas direcciones.

$gt en MongoDB

Sintaxis:

{ field: { $gt: value } }

Debido a que el valor del campo es mayor que (es decir, >) el valor especificado, $gt selecciona esos documentos.

Para la mayoría de los tipos de datos, los operadores de comparación solo realizan comparaciones en los campos cuando el tipo BSON coincide con el tipo del valor de la consulta. Sin embargo, el tipo de horquillado de MongoDB permite una comparación limitada entre BSON.

Los ejemplos siguientes utilizan la colección inventario. Esta es la base de datos de muestra que se usará a continuación en todos los ejemplos.

db.inventory.insertMany( [
   {
      "item": "nuts", "quantity": 31,
      "carrier": { "name": "import", "fee": 3 }
   },
   {
      "item": "screws", "quantity": 50,
      "carrier": { "name": "import", "fee": 4 }
   },
   {
      "item": "washers", "quantity": 11,
      "carrier": { "name": "import", "fee": 1 }
   }
] )

Hacer coincidir campos de documento

Seleccione todos los documentos de la colección inventario donde cantidad sea mayor que 20.

db.inventory.find( { quantity: { $gt: 20 } } )

Producción:

usar el operador gt

Realice la actualización basada en campos de documentos incrustados

El siguiente ejemplo establece el campo precio en función de una comparación $gt con un campo en un documento incrustado.

db.inventory.updateOne(
   { "carrier.fee": { $gt: 2 } }, { $set: { "price": 9.99 } }
)

Producción:

usar el operador gt 2

Esta función updateOne() busca un subcampo de tarifa en un documento incrustado llamado transportista. El primer documento encuentra un valor para una tarifa superior a 2 y establece el precio: 9,99.

Para ajustar el valor del campo price en todos los documentos cuando carrier.fee es superior a 2, utilice updateMany().

$gte en MongoDB

Sintaxis:

{ field: { $gte: value } }

$gte selecciona documentos que tienen un valor de campo que es mayor o igual a (es decir, >=) un valor dado (por ejemplo, valor).

Para la mayoría de los tipos de datos, los operadores de comparación solo realizan comparaciones en los campos cuando el tipo BSON coincide con el tipo del valor de la consulta. Sin embargo, el tipo de horquillado de MongoDB permite una comparación limitada entre BSON.

Hacer coincidir campos de documento

Selecciona todos los documentos de la colección inventario con una cantidad mayor o igual a 20.

db.inventory.find( { quantity: { $gte: 20 } } )

Producción:

utilizar el operador gte

Realice la actualización basada en campos de documentos incrustados

El campo price se establece mediante una comparación $gte con un campo en un documento incrustado en el siguiente ejemplo.

db.inventory.updateMany(
   { "carrier.fee": { $gte: 2 } }, { $set: { "price": 9.99 } }
)

Producción:

usar el operador gte 2

Esta función updateOne() busca un subcampo de tarifa en un documento incrustado llamado transportista. Se añade precio: 9,99 a cada documento cuando tasa tiene un valor superior o igual a 2.

Use updateOne() para establecer el valor del campo price solo en la primera página cuando carrier.fee es más de 2.

$lt en MongoDB

Sintaxis:

{ field: { $lt: value } }

$lt selecciona documentos donde el valor del campo es menor (o igual) que el valor especificado.

Para la mayoría de los tipos de datos, los operadores de comparación solo realizan comparaciones en los campos cuando el tipo BSON coincide con el tipo del valor de la consulta. Sin embargo, el tipo de horquillado de MongoDB permite una comparación limitada entre BSON.

Hacer coincidir campos de documento

Seleccione todos los documentos de la colección inventario con una cantidad inferior a 20.

db.inventory.find( { quantity: { $lt: 20 } } )

Producción:

usar el operador lt

Realice la actualización basada en campos de documentos incrustados

El campo precio se establecerá en función de una comparación $lt con un campo en un documento incrustado en el siguiente ejemplo.

db.inventory.updateMany( { "carrier.fee": { $lt: 20 } }, { $set: { price: 9.99 } } )

Producción:

usar el operador lt 2

Esta función updateOne() busca un subcampo de tarifa en un documento incrustado llamado transportista. Cuando el valor de cargo es inferior a 2, añade precio: 9,99 a cada registro.

Utilice updateOne() para establecer el valor del campo price solo en la primera página cuando carrier.fee es inferior a 2.

$lte en MongoDB

Sintaxis:

{ field: { $lte: value } }

$lte selecciona documentos con un valor de campo menor o igual que (es decir, =) el valor especificado.

Para la mayoría de los tipos de datos, los operadores de comparación solo realizan comparaciones en los campos cuando el tipo BSON coincide con el tipo del valor de la consulta. Sin embargo, el tipo de horquillado de MongoDB permite una comparación limitada entre BSON.

Hacer coincidir campos de documento

Considere el siguiente ejemplo:

db.inventory.find( { quantity: { $lte: 20 } } )

Esta consulta selecciona todas las entradas de la colección inventario con un valor de campo de cantidad menor o igual a 20.

Producción:

usar el operador lte

Realice la actualización basada en campos de documentos incrustados

El campo price se establece mediante una comparación $lte con un campo en un documento incrustado en el siguiente ejemplo.

db.inventory.updateMany(
   { "carrier.fee": { $lte: 5 } }, { $set: { price: 9.99 } }
)

Producción:

usar el operador lte 2

Esta función updateMany() busca un subcampo de tarifa en un documento incrustado llamado transportista. Se añade precio: 9,99 a cada documento si tasa tiene un valor inferior o igual a 5.

Cuando carrier.fee es menor o igual a 5, use updateOne() para modificar el valor del campo price solo en la primera página.

La siguiente información explica cómo aplicar esta sintaxis a una recopilación de datos utilizando los documentos adjuntos.

db.data.insertOne({day: new Date("2022-01-20"), amount: 40})
db.data.insertOne({day: new Date("2022-01-21"), amount: 32})
db.data.insertOne({day: new Date("2022-01-22"), amount: 19})
db.data.insertOne({day: new Date("2022-01-23"), amount: 29})
db.data.insertOne({day: new Date("2022-01-24"), amount: 35})

Encuentra documentos entre dos fechas en MongoDB

Utilice la consulta a continuación para encontrar todos los documentos que tengan el campo día entre dos fechas.

db.data.find({
    day: {
        $gt: ISODate("2020-01-21"),
        $lt: ISODate("2020-01-24")
    }
})

La consulta anterior devuelve los siguientes documentos como se muestra a continuación.

{ _id: ObjectId("618548bc7529c93ea0b41490"),
  day: 2020-01-22T00:00:00.000Z,
  amount: 19 }

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

Buscar documentos después de una fecha específica en MongoDB

Utilice la consulta a continuación para encontrar todos los documentos con el campo día establecido en una fecha posterior a una fecha específica.

db.data.find({
    day: {
        $gt: ISODate("2020-01-22")
    }
})

La consulta anterior devuelve los siguientes documentos.

{ _id: ObjectId("618548bc7529c93ea0b41491"),
  day: 2020-01-23T00:00:00.000Z,
  amount: 29 }

{ _id: ObjectId("618548bc7529c93ea0b41492"),
  day: 2020-01-24T00:00:00.000Z,
  amount: 35 }

Buscar documentos antes de una fecha específica en MongoDB

Utilice la consulta a continuación para encontrar todos los documentos que tengan el campo día establecido antes de una fecha específica.

db.data.find({
    day: {
        $lt: ISODate("2020-01-22")
    }
})

La consulta anterior devuelve los siguientes documentos.

{ _id: ObjectId("618548bc7529c93ea0b4148e"),
  day: 2020-01-20T00:00:00.000Z,
  amount: 40 }

{ _id: ObjectId("618548bc7529c93ea0b4148f"),
  day: 2020-01-21T00:00:00.000Z,
  amount: 32 }

Comparación basada en fecha en MongoDB

Veamos cómo devolver una consulta según la fecha usando MongoDB.

Cree una colección llamada datos utilizando el documento para comprender mejor la idea. La siguiente es la consulta para construir una colección que contenga un registro.

db.data.insertOne({"PassengerName":"John","PassengerAge":23,"PassengerArrivalTime":new ISODate("2018-03-10 14:45:56")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57be9064dcd4a68b70e4")
}
db.data.insertOne({"PassengerName":"Larry","PassengerAge":21,"PassengerArrivalTime":new ISODate("2018-05-19 11:10:23")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e5")
}
db.data.insertOne({"PassengerName":"Mike","PassengerAge":24,"PassengerArrivalTime":new ISODate("2018-08-25 16:40:12")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e6")
}
db.data.insertOne({"PassengerName":"Carol","PassengerAge":26,"PassengerArrivalTime":new ISODate("2019-01-29 09:45:10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a57bf9064dcd4a68b70e7")
}

Utilizando la función buscar(), se seleccionarán todos los documentos de una colección. La siguiente es la consulta para esto.

db.data queryFromDate.find().pretty();

La consulta anterior devolverá los siguientes documentos, como se muestra en la siguiente captura de pantalla.

Consulta de devolución

La siguiente es la consulta de devolución basada en la fecha. Los registros con una fecha de creación posterior a 2018-05-19T11:10:23Z se denominarán:

> db.data queryFromDate.find({"PassengerArrivalTime" : { $gte : new ISODate("2018-05-19T11:10:23Z") }}).pretty();

Esta consulta devuelve los siguientes documentos, como se muestra en la siguiente captura de pantalla.

Devolver consulta 1

Entonces, con la ayuda de este artículo, el usuario encontró información sobre el uso del método Date(). Los ejemplos explican brevemente los comandos $gte y $lte.

Además, la consulta de devolución basada en datos también se ilustra con fragmentos de código.

Artículo relacionado - MongoDB Date