如何使用java进行MongoDB查询?

zul*_*ulu 12 java mongodb

我必须编写一个简单的MongoDB查询,java但我无法做到.

mongo查询如下所示:

db.yourCollection.find({"$where" : "this.startDate < this.endDate"})
Run Code Online (Sandbox Code Playgroud)

我必须使用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());}
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*ain 13

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

db.yourCollection.find({"startDate": {$lt: endDate}})
Run Code Online (Sandbox Code Playgroud)

可以像这样用Java编写: -

BasicDBObject query = new BasicDBObject("startDate", new BasicDBObject("$lt", endDate);
DBCursor cursor = coll.find(query);
Run Code Online (Sandbox Code Playgroud)

你可以看看官方教程


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

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get();
DBCursor cursor = coll.find(query);
Run Code Online (Sandbox Code Playgroud)


Rah*_*hul 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)
Run Code Online (Sandbox Code Playgroud)
  • QueryBuilder qb = new QueryBuilder(),实例化一个新的QueryBuilder。
  • 上例中 QueryBuilder 构建的逻辑是;(开始日期 = null 和结束日期 = null)或(开始日期 <= 结束日期)
  • document.putAll(qb.get()) 将构造的逻辑添加到 DBObject。