Запрос даты с использованием драйвера jongo для mongo

Я использую драйвер jongo для подключения к моей mongoDB.

Синтаксис запроса - например, возраст младше 18 лет - такой

collection.find("{age: {$lt : 18}}");

но как запросить дату?

В mongoDB пара значений ключа даты хранится как

{"date" : ISODate("2012-11-23T00:12:23.123Z")}

поэтому я попробовал следующее:

collection.find("{date: {$lt : ISODate(\"2012-11-23T00:13:00.000Z\")}}");

но я получаю это исключение при запуске кода Java:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.IllegalArgumentException: {dateLastSeen: {$lt: ISODate("2012-11-23T00:13:00.000Z")}} cannot be parsed
        at org.jongo.query.Query.convertToDBObject(Query.java:33)
        at org.jongo.query.Query.<init>(Query.java:26)
        at org.jongo.query.QueryFactory.createQuery(QueryFactory.java:38)
        at org.jongo.Find.<init>(Find.java:42)
        ... 10 more
Caused by: com.mongodb.util.JSONParseException:
{dateLastSeen: {$lt: ISODate("2012-11-23T00:13:00.000Z")}}
                     ^
        at com.mongodb.util.JSONParser.parse(JSON.java:198)
        at com.mongodb.util.JSONParser.parseObject(JSON.java:231)
        at com.mongodb.util.JSONParser.parse(JSON.java:195)
        at com.mongodb.util.JSONParser.parseObject(JSON.java:231)
        at com.mongodb.util.JSONParser.parse(JSON.java:195)
        at com.mongodb.util.JSONParser.parse(JSON.java:145)
        at com.mongodb.util.JSON.parse(JSON.java:81)
        at com.mongodb.util.JSON.parse(JSON.java:66)
        at org.jongo.query.Query.convertToDBObject(Query.java:31)

Поэтому я думаю, что даты не должны быть просто преобразованы в соответствующую строку, но синтаксис поиска с использованием даты отличается.

Кто-нибудь со знанием джонго, кто может помочь?


person user1803112    schedule 29.11.2012    source источник


Ответы (2)


Использование java.util.Date — это стандартный способ запроса даты с Jongo:

collection.find("{date: {$lt : #}}", new Date(2012, 11, 30));
person yves amsellem    schedule 29.11.2012
comment
Итак, Джонго попытается найти переменную с именем future (при использовании первого подхода)? - person user1803112; 29.11.2012
comment
Упс, эти два подхода похожи. Вы должны использовать запрос с параметром; извините за путаницу (см. обновленный ответ). - person yves amsellem; 29.11.2012
comment
@yvesamsellem Я использую параметр new в запросе jongo. Я получаю то же исключение, что и в вопросе. Я использую его следующим образом: some_date_field : { $gte : new Date(date_in_milliseconds) Пожалуйста, дайте мне знать, что с ним не так. Он хорошо работает в оболочке монго. - person Vinay Kadalagi; 08.09.2017
comment
@yvesamsellem Хорошо, это сработало .. с вашим решением. Можете ли вы сказать, как я могу передать несколько параметров # для передачи 2 дат. Пожалуйста помоги - person Vinay Kadalagi; 08.09.2017
comment
Хорошо, это тоже разобралось - collection.find({date : { $gte : #, $lte : # }}, new Date(1234567890), new Date(1234567890)) может помочь кому-то - person Vinay Kadalagi; 08.09.2017

Для запроса с передачей нескольких параметров -

jongoCollection.find("{date : { $gte : #, $lte : # }}", new Date(1234567890), new Date(1234567890))
person Vinay Kadalagi    schedule 07.09.2017