【问题标题】:Querying for date using jongo driver for mongo使用 mongo 的 jongo 驱动程序查询日期
【发布时间】:2012-11-17 09:24:23
【问题描述】:

我使用 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)

所以我认为,日期不是要直接转换为相应的字符串,而是使用日期搜索的语法不同。

任何有jongo知识的人可以提供帮助吗?

【问题讨论】:

    标签: java mongodb date jongo


    【解决方案1】:

    使用java.util.Date 是使用 Jongo 查询日期的标准方法:

    collection.find("{date: {$lt : #}}", new Date(2012, 11, 30));
    

    【讨论】:

    • 所以 jongo 会尝试找到一个名为 future 的变量(使用第一种方法时)?
    • 哎呀,这两种方法是相似的。您必须使用带参数的查询;很抱歉造成混淆(请参阅更新的答案)。
    • @yvesamsellem 我在 jongo 查询中使用 new 参数。我得到了与问题中提到的相同的异常。我以这种方式使用它 some_date_field : { $gte : new Date(date_in_milliseconds) } 请让我知道它有什么问题。它在 mongo shell 中运行良好。
    • @yvesamsellem 好的,它工作了.. 与您的解决方案。你能告诉我如何传递多个 # 参数来传递 2 个日期。请帮忙
    • 好吧,我也想通了 - collection.find("{date : { $gte : #, $lte : # }}", new Date(1234567890), new Date(1234567890)) 可能会帮助某人
    【解决方案2】:

    通过传递多个参数进行查询 -

    jongoCollection.find("{date : { $gte : #, $lte : # }}", new Date(1234567890), new Date(1234567890))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多