yesterday today than greater fechas comparar mongodb

mongodb - today - consulta de devolución basada en la fecha



mongodb greater than datetime (5)

Si desea obtener artículos en cualquier lugar en esa fecha, necesita comparar dos fechas

Puede crear dos fechas de la primera como esta, para comenzar el día y al final del día.

var startDate = new Date(); // this is the starting date that looks like ISODate("2014-10-03T04:00:00.188Z") startDate.setSeconds(0); startDate.setHours(0); startDate.setMinutes(0); var dateMidnight = new Date(startDate); dateMidnight.setHours(23); dateMidnight.setMinutes(59); dateMidnight.setSeconds(59); ### MONGO QUERY var query = { inserted_at: { $gt:morning, $lt:dateScrapedMidnight } }; //MORNING: Sun Oct 12 2014 00:00:00 GMT-0400 (EDT) //MIDNIGHT: Sun Oct 12 2014 23:59:59 GMT-0400 (EDT)

Tengo una información como esta en mongodb

{ "latitude" : "", "longitude" : "", "course" : "", "battery" : "0", "imei" : "0", "altitude" : "F:3.82V", "mcc" : "07", "mnc" : "007B", "lac" : "2A83", "_id" : ObjectId("4f0eb2c406ab6a9d4d000003"), "createdAt" : ISODate("2012-01-12T20:15:31Z") }

Cómo consultar db.gpsdatas.find({''createdAt'': ??what here??}) para que me devuelva el resultado anterior de db?


Acabo de implementar algo similar en Mongo v3.2.3 usando el nodo v0.12.7 y v4.4.4 y lo utilicé:

{ $gte: new Date(dateVar).toISOString() }

Estoy pasando un ISODate (por ejemplo, 2016-04-22T00: 00: 00Z) y esto funciona para una consulta .find () con o sin la función toISOString. Pero cuando se usa en una consulta .aggregate () $ match, ¡no le gusta la función toISOString!


Probablemente desee hacer una consulta de rango, por ejemplo, todos los elementos creados después de una fecha determinada:

db.gpsdatas.find({"createdAt" : { $gte : new ISODate("2012-01-12T20:15:31Z") }});

Estoy usando $gte (mayor que o igual), porque esto se usa a menudo para consultas de solo fecha, donde el componente de tiempo es 00:00:00.

Si realmente desea encontrar una fecha que sea igual a otra fecha, la sintaxis sería

db.gpsdatas.find({"createdAt" : new ISODate("2012-01-12T20:15:31Z") });


Si quieres obtener todo lo nuevo en los últimos 5 minutos, deberías hacer algunos cálculos, pero no es difícil ...

Primero crea un índice en la propiedad con la que quieres hacer coincidir (incluye la dirección de clasificación -1 para descender y 1 para ascender)

db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt

A continuación, busque documentos creados en los últimos 5 minutos (60 segundos * 5 minutos) .... porque javascript''s .getTime() devuelve milisegundos que necesita multiplicar por 1000 antes de usarlo como entrada al new Date() constructor de new Date() .

db.things.find({ createdAt: { $gte: new Date(new Date().getTime()-60*5*1000).toISOString() } }) .count()

Explicación para new Date(new Date().getTime()-60*5*1000).toISOString() es la siguiente:

Primero calculamos "hace 5 minutos":

  1. new Date().getTime() nos da la hora actual en milisegundos
  2. Queremos restar 5 minutos (en ms) de eso: 5*60*1000 - Simplemente multiplico por 60 segundos, así que es fácil de cambiar. Puedo cambiar de 5 a 120 si quiero 2 horas (120 minutos).
  3. new Date().getTime()-60*5*1000 nos da 1484383878676 (hace 5 minutos en ms)

Ahora necesitamos alimentarlo con un new Date() constructor de new Date() para obtener el formato de cadena ISO requerido por las marcas de tiempo de MongoDB.

  1. { $gte: new Date(resultFromAbove).toISOString() } (consulta mongodb .find ())
  2. Como no podemos tener variables, lo hacemos todo de una vez: new Date(new Date().getTime()-60*5*1000)
  3. ... luego convertir a cadena ISO: .toISOString()
  4. new Date(new Date().getTime()-60*5*1000).toISOString() nos da 2017-01-14T08:53:17.586Z

Por supuesto, esto es un poco más fácil con las variables si está utilizando el controlador node-mongodb-native, pero esto funciona en el shell de mongo, que es lo que suelo usar para verificar cosas.


También puedes probar:

{ "dateProp": { $gt: new Date(''06/15/2016'').getTime() } }