2012-06-14 27 views
5

Estoy tratando de consultar mongodb para documentos donde "fecha" está entre dos fechas. los datos de la muestra es:MongoDB Consulta por fecha en Java

{ 
     "_id" : ObjectId("4fad0af6709fbc1d481c3e05"), 
     "ID" : NumberLong("200930746205085696"), 
     "text" : "Forgot my charger...:(", 
     "date" : ISODate("2012-06-14T10:49:57Z"), 
     "sentiment" : "NEG" 
} 

Mi código Java es:

DBCursor cursor = null; 
DB db = connect(); 

    Date startDate = new Date(System.currentTimeMillis() - (long)(numOfTimePeriods+1)*time); 
    Date endDate = new Date(System.currentTimeMillis() - (long)numOfTimePeriods*time); 
    DBObject query = new BasicDBObject(); 
    query.put("date", new BasicDBObject("$gt", startDate).append("$lte", endDate)); 

    cursor = db.getCollection("status").find(query); 

pero el objeto de cursor no tiene resultados.

objeto de consulta es el siguiente:

{ "date" : { "$gt" : { "$date" : "2012-05-15T00:16:15.184Z"} , "$lte" : { "$date" : "2012-06-14T10:16:15.184Z"}}} 

Sospecho que el problema es la representación de la fecha en el PP. ¿Alguna sugerencia sobre esto?

+1

Eso debería haber funcionado. ¿Puedes verificar los datos? – Thilo

+0

Sí, tienes razón, ¡parece funcionar! El problema fueron los datos, consulté el período porque no hay documentos que recuperar. ¡Tonto de mí! Gracias por tu ayuda! – andjelko

+0

Basta con echar un vistazo a http://stackoverflow.com/questions/6840540/java-mongodb-query-by-date Ya está resuelto allí. – josete

Respuesta

-1

¿No se supone que debe usar el and operator en su consulta?

db.foo.find({ $and: [ { date: { $gt: startDate } }, {date : { $lt: endDate} } ] }) 
+0

No, creo que la consulta estuvo bien. Yo uso uno muy similar, también, y funciona. – Thilo

+0

$ y está implcit en una propiedad si agrega valores? – jocelyn

+0

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D "También puede combinar estos operadores para especificar rangos" No estoy seguro de si esto funciona en el caso general (con otros operadores). Si tiene tiempo, ¿puede intentar combinar $ gt con $ nin o algo así? – Thilo

1

Esa representación de fecha $ es simplemente la representación toString en el controlador de Java, de una Fecha. Utiliza la representación JSON/BSON estricta, en lugar del 10gen BSON extendido donde los valores pueden ser objetos representados como si estuvieran en el shell. No debe intentar consultar en el shell utilizando el resultado toString de esa manera, ya que no funcionará en muchos casos.