Saltar al contenido

Encuentra objetos entre dos fechas MongoDB

Solución:

Consulta de un intervalo de fechas (mes o día específico) en el Libro de cocina de MongoDB tiene una muy buena explicación al respecto, pero a continuación hay algo que probé yo mismo y parece funcionar.

items.save({
    name: "example",
    created_at: ISODate("2010-04-30T00:00:00.000Z")
})
items.find({
    created_at: {
        $gte: ISODate("2010-04-29T00:00:00.000Z"),
        $lt: ISODate("2010-05-01T00:00:00.000Z")
    }
})
=> { "_id" : ObjectId("4c0791e2b9ec877893f3363b"), "name" : "example", "created_at" : "Sun May 30 2010 00:00:00 GMT+0300 (EEST)" }

Según mis experimentos, deberá serializar sus fechas en un formato compatible con MongoDB, porque lo siguiente arrojó resultados de búsqueda no deseados.

items.save({
    name: "example",
    created_at: "Sun May 30 18.49:00 +0000 2010"
})
items.find({
    created_at: {
        $gte:"Mon May 30 18:47:00 +0000 2015",
        $lt: "Sun May 30 20:40:36 +0000 2010"
    }
})
=> { "_id" : ObjectId("4c079123b9ec877893f33638"), "name" : "example", "created_at" : "Sun May 30 18.49:00 +0000 2010" }

En el segundo ejemplo no se esperaban resultados, pero todavía se obtuvo uno. Esto se debe a que se realiza una comparación básica de cadenas.

Para aclarar. Lo que es importante saber es que:

  • Sí, debe pasar un objeto de fecha de Javascript.
  • Sí, tiene que ser compatible con ISODate
  • Sí, según mi experiencia para que esto funcione, debes manipular la fecha a ISO
  • Sí, trabajar con fechas suele ser siempre un proceso tedioso y mongo no es una excepción.

Aquí hay un fragmento de código de trabajo, donde hacemos un poco de manipulación de la fecha para garantizar que Mongo (aquí estoy usando el módulo mongoose y quiero resultados para las filas cuyo atributo de fecha es menor (antes) que la fecha dada como myDate param) pueda manejar lo correctamente:

var inputDate = new Date(myDate.toISOString());
MyModel.find({
    'date': { $lte: inputDate }
})

Python y pymongo

Encontrar objetos entre dos fechas en Python con pymongo en colección posts (basado en el tutorial):

from_date = datetime.datetime(2010, 12, 31, 12, 30, 30, 125000)
to_date = datetime.datetime(2011, 12, 31, 12, 30, 30, 125000)

for post in posts.find({"date": {"$gte": from_date, "$lt": to_date}}):
    print(post)

Dónde {"$gte": from_date, "$lt": to_date} especifica el rango en términos de datetime.datetime tipos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *