Java/MongoDB 按日期查询

2022-09-01 03:06:55

我在集合中存储了一个值作为java.util.Date(),但是当我查询获取两个特定日期之间的值时,我最终得到的值超出了范围。这是我的代码:

插入

BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);

进行查询

BasicDBObject query = new BasicDBObject();
query.put("dateAdded", new BasicDBObject("$gte", fromDate));
query.put("dateAdded", new BasicDBObject("$lte", toDate));
collection.find(query).sort(new BasicDBObject("dateAdded", -1));

当我在 和 之间查询时(基本上是 fromDate = toDate),我得到的对象具有这样的日期,这绝对是不可能的。我在这里错过了什么?Wed Jul 27 16:54:49 EST 2011Wed Jul 27 16:54:49 EST 2011Tue Jul 26 09:43:37 EST 2011


答案 1

您正在执行的操作是仅使用密钥覆盖中的丢失运算符进行查询。你想要的是:{$lte: toDate}$gte

query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());

答案 2

如果您使用的是Spring-Data Mongodb的MongoTemplate,您可以通过以下方式执行相同的操作:-

public List<Link> getLinksBetweenDate(Date startDate, Date endDate) {
            Query query = new Query().addCriteria(Criteria.where("updatedOn").gt(startDate).lte(endDate));
            return mongoTemplate.find(query, Link.class);
        }