2012-06-14 20 views
5

Próbuję wysłać do mongodb zapytanie o dokumenty, w których "data" jest zgodna z dwiema datami. Dane Próbka jest:Zapytanie MongoDB według daty w języku Java

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

mojego kodu Java jest:

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

ale obiekt kursor nie ma wyników.

przedmiotem zapytania wygląda następująco:

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

Podejrzewam, że problem jest reprezentacja data w DB. Wszelkie sugestie na ten temat?

+1

To powinno zadziałało. Czy możesz dwukrotnie sprawdzić dane? – Thilo

+0

Tak, masz rację, wydaje się działać! Problem polegał na tym, że podałem dane, ponieważ nie ma dokumentów do pobrania. Głupi ja! Dzięki za pomoc! – andjelko

+0

Wystarczy spojrzeć na http://stackoverflow.com/questions/6840540/java-mongodb-query-by-date To już rozwiązany tam. – josete

Odpowiedz

-1

Czy w swoim zapytaniu nie powinieneś używać and operator?

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

Nie, myślę, że zapytanie było w porządku. Używam też bardzo podobnego i działa. – Thilo

+0

$ i jest impccit na właściwość, jeśli dodać wartości? – jocelyn

+0

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D "Można również łączyć te operatory, aby określić zakresy" Nie wiem, czy to działa w ogólnym przypadku (z innymi operatorami). Jeśli masz czas, możesz spróbować połączyć $ gt z $ nin lub coś podobnego? – Thilo

1

Ta reprezentacja $ jest tylko reprezentacją toString w sterowniku Java, Data. Używa ścisłej reprezentacji JSON/BSON, a nie rozszerzonego BSN 10gen gdzie wartości mogą być obiektami reprezentowanymi tak, jak są w powłoce. Nie powinieneś próbować tworzyć zapytań w powłoce przy użyciu wyjścia toString, ponieważ nie będzie działało w wielu przypadkach.