我有一个mongo数据库,其中包含以下结构的文档
{
_id:5e4f078e688bb974ed1dbc21
timestamp:"Mon Mar 06 23:54:55 EST 2017"
formatted_date:"2017-03-06 23:54:55"
steps:13
step_delta:13
}
我发现要获取介于所需的特定日期之间的所有文档(我相信对此有一个简单的查询,我只是误解了)很棘手。
这是我的mongo数据库查询
DBObject query = QueryBuilder.start().put("formatted_date").greaterThanEquals(startDate).and().put("formatted_date").lessThanEquals(endingDate).get();
原始,我想这就像下面的sql查询
String query = new StringBuilder("SELECT * FROM ").append(ACTIVITY_TABLE)
.append(" WHERE formatted_date BETWEEN ").append(startDate)
.append(" AND ").append(endDate).toString();
我如何在Java的mongodb中进行这样的查询
答案 0 :(得分:1)
您可以这样在字段formatted_date
上创建范围:
query = new BasicDBObject(
"formatted_date",
new BasicDBObject("$gte", startDate).append("$lte", endingDate)
);
cursor = collection.find(query);
try {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
} finally {
cursor.close();
}
答案 1 :(得分:1)
使用MongoDB Java Driver以下代码查询并打印fromDate
字段的输入toDate
和formatted_date
之间的文档。
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("testDB");
MongoCollection<Document> collection = database.getCollection("testColl");
String fromDate = "2020-02-06";
String toDate = "2020-02-09";
MongoCursor<Document> cursor = collection
.find(and(
gte("formatted_date", fromDate),
lte("formatted_date", toDate)))
.iterator();
cursor.forEachRemaining(System.out::println);
带有三个输入文档
{ "_id" : 1, "formatted_date" : "2020-02-06 23:54:55", "steps" : 13 }
{ "_id" : 2, "formatted_date" : "2020-02-08 10:00:00", "steps" : 10 }
{ "_id" : 3, "formatted_date" : "2020-02-10 00:30:40", "steps" : 2 }
输出为:
Document{{_id=1.0, formatted_date=2020-02-06 23:54:55, steps=13.0}}
Document{{_id=2.0, formatted_date=2020-02-08 10:00:00, steps=10.0}}
请注意,collection.find(Bson filter)
方法使用com.mongodb.client.model.Filters
工厂类的gte
和lte
方法来构建查询的过滤器。