Si desea obtener todas las cosas nuevas en los últimos 5 minutos que tendría que hacer algunos cálculos, pero no es difícil ...
En primer lugar crear un índice en la propiedad que desea hacer coincidir el (incluya el tipo de dirección descendente -1 y 1 para ascendente)
db.things.createIndex({ createdAt: -1 }) // descending order on .createdAt
luego volver a consultar los documentos creados en los últimos 5 minutos (60 segundos * 5 minutos) .... porque javascript .getTime()
devuelve milisegundos que necesita multiplicar por 1000 antes de usarlo como entrada al constructor new Date()
.
db.things.find({
createdAt: {
$gte: new Date(new Date().getTime()-60*5*1000).toISOString()
}
})
.count()
Explicación de new Date(new Date().getTime()-60*5*1000).toISOString()
es el siguiente:
En primer lugar, calcular "Hace 5 minutos":
new Date().getTime()
nos da la hora actual en milisegundos
- Queremos restar 5 minutos (en ms) de eso:
5*60*1000
- Simplemente multiplico por 60
segundos por lo que es fácil de cambiar. Puedo simplemente cambiar 5
a 120
si quiero 2 horas (120 minutos).
new Date().getTime()-60*5*1000
nos da (hace 5 minutos en ms) 1484383878676
Ahora tenemos que alimentar a un constructor que new Date()
para obtener el formato de cadena ISO requerida por las marcas de tiempo MongoDB.
{ $gte: new Date(resultFromAbove).toISOString() }
(mongodb .find() consulta)
- Puesto que no podemos tener variables lo hacemos todo de una sola vez:
new Date(new Date().getTime()-60*5*1000)
- ... luego convertir a cadena ISO:
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
nos 2017-01-14T08:53:17.586Z
por supuesto da esto es un poco más fácil con variables si está utilizando el controlador de nodo-mongodb-natal, pero esto funciona en el mon ir a la cáscara, que es lo que suelo usar para controlar las cosas.
obteniendo el error: ISODate no está definido. – coure2011
¿qué versión estás usando? – mnemosyn
node.js es v0.4.8 – coure2011