Tengo datos como este 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 hago una consulta db.gpsdatas.find({'createdAt': ??what here??})
para que me devuelva el resultado de datos anterior de la base de datos?
Respuestas:
Probablemente desee realizar una consulta de rango, por ejemplo, todos los elementos creados después de una fecha determinada:
Estoy usando
$gte
(mayor que o igual), porque esto a menudo se usa para consultas solo de 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
fuente
ISODate
un contenedor para el objeto js Date. Intenta algo como"createdAt" : new Date("2010-01-01")
. Sin embargo, por alguna razón, ese código no funciona (para la versión 2.0.2) en la consola Mongo.new Date("2010/01/01");
si desea obtener artículos en cualquier lugar en esa fecha, debe comparar dos fechas
Puede crear dos fechas a partir de la primera como esta, para obtener el comienzo del día y el final del día.
fuente
Acabo de implementar algo similar en Mongo v3.2.3 usando Node v0.12.7 y v4.4.4 y utilicé:
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 de coincidencia $ .gregregate () no le gusta la función toISOString!
fuente
Si desea obtener todas las cosas nuevas en los últimos 5 minutos, tendría que hacer algunos cálculos, pero no es difícil ...
Primero cree un índice en la propiedad con la que desea hacer coincidir (incluya la dirección de clasificación -1 para descender y 1 para ascender)
Luego, consulte 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 para elnew Date()
constructor.Explicación para
new Date(new Date().getTime()-60*5*1000).toISOString()
es la siguiente:Primero calculamos "hace 5 minutos":
new Date().getTime()
nos da la hora actual en milisegundos5*60*1000
- Simplemente multiplico por60
segundos para que sea fácil de cambiar. Solo puedo cambiar5
a120
si quiero 2 horas (120 minutos).new Date().getTime()-60*5*1000
nos da1484383878676
(hace 5 minutos en ms)Ahora necesitamos alimentar eso en un
new Date()
constructor para obtener el formato de cadena ISO requerido por las marcas de tiempo MongoDB.{ $gte: new Date(resultFromAbove).toISOString() }
(consulta mongodb .find ())new Date(new Date().getTime()-60*5*1000)
.toISOString()
new Date(new Date().getTime()-60*5*1000).toISOString()
Nos da2017-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 mongo, que es lo que generalmente uso para verificar las cosas.
fuente
Date.now()
lugar denew Date().getTime()
También puedes probar:
fuente
Si estás usando Mangosta,
fuente
Encuentra con una fecha específica:
Encuentra con mayor
gte
o menorlt
:Buscar por rango:
fuente