37 votes

Requête Java / MongoDB par date

J'ai stocké une valeur en tant que java.util.Date () dans ma collection, mais lorsque je demande des valeurs entre deux dates spécifiques, je finis par obtenir des valeurs en dehors de la plage. Voici mon code:

insérer

 BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);
 

interroger

 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));
 

lorsque je recherche entre Wed Jul 27 16:54:49 EST 2011 et Wed Jul 27 16:54:49 EST 2011 (essentiellement fromDate = toDate), j'obtiens des objets avec des dates comme Tue Jul 26 09:43:37 EST 2011 qui ne devraient certainement pas être possibles. Qu'est-ce que j'oublie ici?

50voto

pingw33n Points 6428

Ce que vous faites, c'est interroger uniquement avec l'opérateur {$lte: toDate} perdant $gte dans l'écrasement de la clé. Ce que vous voulez c'est:

 query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X