almacené un valor como java.util.Date() en mi colección, pero cuando consulto para obtener valores entre dos fechas específicas, termino obteniendo valores fuera del rango. Aquí está mi código:consulta de Java/MongoDB por fecha
para insertar
BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);
para consultar
BasicDBObject query = new BasicDBObject();
query.put("dateAdded", new BasicDBObject("$gte", fromDate));
query.put("dateAdded", new BasicDBObject("$lte", toDate));
collection.find(query).sort(new BasicDBObject("dateAdded", -1));
cuando consulto entre Wed Jul 27 16:54:49 EST 2011
y Wed Jul 27 16:54:49 EST 2011
(básicamente fromDate = TODATE), consigo objetos con fechas como Tue Jul 26 09:43:37 EST 2011
, que sin duda debe no ser posible ¿Que me estoy perdiendo aqui?
Excelente consejo! Entonces, básicamente, cada vez que quiero consultar en el mismo campo con diferentes criterios, tengo que usar el constructor, ¿verdad? ¡bueno saber! ¿Dónde encontraste esto? ¿Hay alguna documentación de la que no tenga conocimiento? (¡Ya que el tutorial oficial de Java de mongodb es bastante pobre!) – Guillaume
@Guillaume No exactamente. También puedes crear y poblar 'BasicDBObject', el constructor es solo un ayudante que permite hacerlo dentro de un solo satement. El problema es que 'DBObject' (como todos los' Map's en Java) puede contener solo claves únicas. Y pierde el valor anterior al poner uno nuevo con la misma clave. También el tutorial oficial tiene un ejemplo sobre cómo usar múltiples operadores en el mismo campo: http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery – pingw33n
Sorprendentemente difícil encontrar la respuesta a esa pregunta. –