如何在Java中构建嵌套的MongoDB查询?

时间:2019-05-24 09:07:29

标签: java mongodb mongodb-query

我正在尝试将正常运行的Mongo Shell查询转换为Java,但似乎遇到了麻烦。我正在使用mongo-java-driver:3.9.1。 shell查询如下所示:

db.getCollection('xyz').find({source_id: ObjectId("abc"), timestamp: {
    $gte : ISODate("2019-04-05 18:24:00.000Z"),
    $lt: ISODate("2019-04-05 18:30:00.000Z")
    }
  })

查询包含两个条件:匹配的source_id和两个给定日期之间的时间戳。

我的Java查询如下(startDate和endDate是格式化的日期):

FindIterable<Document> cursor = collection.find(and(eq("source_id", new ObjectId("abc"))), and(gte("timestamp", startDate), lt("timestamp", endDate)));

Intellij给我消息:“无法解析方法'find(org.bson.conversions.Bson,org.bson.conversions.Bson)”。这是逻辑错误,还是无法建立类似的过滤器?

1 个答案:

答案 0 :(得分:1)

您缺少一个and

FindIterable<Document> cursor = collection.find(and(and(eq("source_id", new ObjectId("abc"))), and(gte("timestamp", startDate), lt("timestamp", endDate))));

总体思路是:将每个{视为一个包含and的语句。