2012-02-01 15 views
10

Mam zapytanie Mongo być wykonywane:Mongo ISODate kwerendy w Javie

query = { "dateField" : { "$gte" : ISODate('2011-11-10T07:45:32.962Z') } } 

Kiedy robię db.Collection.find(query) na powłoki Mongo, jestem w stanie odzyskać wyniki.

Jak mogę zapytać o to za pomocą Java? Próbowałem skonstruować ciąg na podstawie parametru Date. Ale w trakcie budowania ciągu, ostatecznie zostaje przekazany jako "ISODate('2011-11-10T07:45:32.962Z')" zamiast ISODate('2011-11-10T07:45:32.962Z') (bez otaczających cytatów).

Jaki byłby najlepszy sposób skonstruowania tego zapytania za pomocą interfejsu API Java?

Dzięki!

+2

Nie używaj ciągów. Ciągi nie są datami. –

Odpowiedz

20

Użyj regularne Java Data - również polecam QueryBuilder:

Date d = new Date(); // or make a date out of a string... 
DBObject query = QueryBuilder.start().put("dateField").greaterThanEquals(d).get(); 
+0

To zadziałało. Dzięki ! – Skynet

+2

Tak, to odpowiednik języka Java ISODate(). Spróbuj uruchomić zapytanie, zamiast patrzeć na toString(). –

4

Mam wyszukiwarki dużo i spędzić więcej niż godzinę w znalezieniu sposobu, aby uzyskać dane, gdy o ISODate w modelu Mongo.

Jako domyślny konstruktor daty jest przestarzały, więc nie działał w moim przypadku.

BasicDBObject searchQuery = new BasicDBObject("_id" , 1); 
try { 
     searchQuery.append("timestamp",BasicDBObjectBuilder.start("$gte",new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS\'Z\'").parse("2015-12-07T10:38:17.498Z")).get()); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

Czy to jest odpowiedź czy komentarz? Jeśli jest to odpowiedź, proszę [edytuj] ją, aby wyjaśnić, w jaki sposób adresuje ona pytanie. – Mogsdad

+0

To jest odpowiedź, mówię, że proste 'Date' nie działa tak jak jest przestarzałe i to coś' SimpleDateFormat' pracował dobrze w moim przypadku. – Root