12

我必须使用但无法编写一个简单的MongoDB查询。java

mongo 查询如下所示:

db.yourCollection.find({"$where" : "this.startDate < this.endDate"})

我必须使用QueryBuilder该类编写上述查询。但我无法在MongoDB java驱动程序中做到这一点。

BasicDBObject document = new BasicDBObject();
document.put("id", 1001);
document.put("intValue", 1200);
document.put("updateValue", 2100);

DBObject query = QueryBuilder.start("intValue").lessThan("updateValue").get();
DBCursor cursor = collection.find(query);
while (cursor.hasNext()) {
System.out.println("Result : -"+cursor.next());}

上面的代码不返回任何结果。但是如果改成updateValue2100就是给出结果。我的问题是lessThan将对象作为输入参数。那么如何将文档字段作为输入参数传递呢?

4

2 回答 2

14

理想情况下,您的 mongoDB 查询应该是这样的: -

db.yourCollection.find({"startDate": {$lt: endDate}})

可以像这样用Java编写:-

BasicDBObject query = new BasicDBObject("startDate", new BasicDBObject("$lt", endDate);
DBCursor cursor = coll.find(query);

你可以看看官方教程


如果你想使用QueryBuilder,你可以这样做: -

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get();
DBCursor cursor = coll.find(query);
于 2013-01-14T07:43:17.443 回答
5

QueryBuilder 帮助构建复杂的查询以从 mongo db 的集合中检索数据。您可以像这样使用 QueryBuilder。

BasicDBObject document = new BasicDBObject();
QueryBuilder qb = new QueryBuilder();
qb.or(new QueryBuilder().put("starting_date").is(null).put("ending_date").is(null).get(),
                new QueryBuilder().put("starting_date").lessThanEquals("ending_date").get());
document.putAll(qb.get());
DBCursor cursor = getDbCollection().find(document)
  • QueryBuilder qb = new QueryBuilder(),实例化一个新的QueryBuilder。
  • 上面示例中 QueryBuilder 构建的逻辑是;(开始日期 = null 和结束日期 = null)或(开始日期 <= 结束日期)
  • document.putAll(qb.get()) 将构造的逻辑添加到 DBObject。
于 2013-01-14T07:44:18.393 回答