如何使用java进行MongoDB查询?

时间:2013-01-14 07:37:32

标签: java mongodb

我必须使用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());}

上述代码不会返回任何结果。但如果将updateValue更改为2100则会给出结果。我的问题是lessThan将对象作为输入参数。那么如何将文档字段作为输入参数传递?

2 个答案:

答案 0 :(得分:13)

理想情况下,您的mongoDB查询应如下所示: -

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

可以用Java编写,如下所示: -

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

您可以查看Official Tutorial


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

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get();
DBCursor cursor = coll.find(query);

答案 1 :(得分:4)

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)或(开始日期&lt; =结束日期)
  • document.putAll(qb.get())将构造的逻辑添加到DBObject。