我必须使用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
将对象作为输入参数。那么如何将文档字段作为输入参数传递?
答案 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)