mongodb获取两个日期范围内的所有文档

时间:2020-02-21 17:29:31

标签: java mongodb

我有一个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中进行这样的查询

2 个答案:

答案 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字段的输入toDateformatted_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工厂类的gtelte方法来构建查询的过滤器。