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:Requête Java/MongoDB par date
pour insérer
BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);
pour 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));
quand je fais une recherche entre Wed Jul 27 16:54:49 EST 2011
et Wed Jul 27 16:54:49 EST 2011
(essentiellement fromDate = toDate), je reçois des objets avec des dates comme Tue Jul 26 09:43:37 EST 2011
qui devrait certainement pas possible. Qu'est-ce que j'oublie ici?
Excellent conseil! Donc, fondamentalement, chaque fois que je veux interroger sur le même champ avec des critères différents, je dois utiliser le constructeur non? bon à savoir! Où as tu trouvé ça? Y a-t-il de la documentation dont je ne suis pas au courant? (puisque le tutoriel Java officiel mongodb est assez pauvre!) – Guillaume
@Guillaume Pas exactement. Vous pouvez aussi créer et peupler 'BasicDBObject', le constructeur est juste un assistant qui permet de le faire à l'intérieur d'un seul état. Le problème est que 'DBObject' (comme tous' Map's en Java) ne peut contenir que des clés uniques. Et vous perdez la valeur précédente en mettant un nouveau avec la même clé. Aussi tutoriel officiel a un exemple sur la façon d'utiliser plusieurs opérateurs sur le même champ: http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-GettingASetofDocumentsWithaQuery – pingw33n
Étonnamment difficile de trouver la réponse à cette question. –