Spring Data MongoDB之间的日期

时间:2012-04-25 07:18:24

标签: java spring spring-data mongodb-java

我使用spring data mongodb。

我想要两个日期之间的记录。以下MongoDB查询有效:

db.posts.find({startDate: {$gte: start, $lt: end}});

我尝试过的Spring数据查询对象代码转换不起作用:

Query query = new Query();
query.addCriteria(Criteria.where("startDate").gte(startDate)
                            .and("startDate").lt(endDate));

构建我需要的Mongo查询的方法调用的正确顺序是什么?

9 个答案:

答案 0 :(得分:56)

请勿在条件中加入“和(”startDate“)部分。

而不是:

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate));

您应该使用:

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate));

当你包含'和(“startDate”)'部分时,Mongo会将它视为同一属性上的两个不同条目。

答案 1 :(得分:4)

Reference here

Query query = new Query(
  Criteria.where("ip").is(ip)
  .andOperator(
    Criteria.where("createdDate").lt(endDate),
    Criteria.where("createdDate").gte(startDate)
  )
);

答案 2 :(得分:2)

这适用于Java驱动程序的2.7.2版

DBCollection coll = db.getCollection("posts");  

BasicDBObject date = new BasicDBObject();
date.append("$gte", new Date(startDate));
date.append("$lte", new Date(endDate));

DBObject query = new BasicDBObject();
query.put("date", date);

DBCursor cursor = coll.find(query);

另外,对于记录,你有gte和lte参数的“startDate”。

答案 3 :(得分:2)

我必须在字段publishedDate之间找到日期,以下是我的工作方式:

    Criteria publishedDateCriteria = Criteria
                        .where("publishedDateObject").gte(psDate)
                        .lte(peDate);
    Query query = new Query(publishedDateCriteria);
    mongoTemplate.find(query,
                        MyDocumentObject.class));

答案 4 :(得分:1)

您还可以添加查询注释:

@Query("{'date' : { $gte: ?0, $lte: ?1 } }")                 
public List<AnyYourObj> getObjectByDate(Date from, Date to); 

或适当的spring数据方法签名:

public List<AnyYourObj> findByDateBetween(Date from, Date to);

这两种方法都得出相同的结果。 您可以在这里https://www.baeldung.com/queries-in-spring-data-mongodb中阅读更多内容 还有https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/

答案 5 :(得分:1)

if (metaData.getToValue() == null){
dynamicCriteria = Criteria.where("metaData.key").is(metaData.getKey()).andOperator(Criteria.where("metaData.value").is(metaData.getFromValue()));
}else {
dynamicCriteria = Criteria.where("metaData.key").is(metaData.getKey()).orOperator(Criteria.where("metaData.value").gte(metaData.getFromValue()).lt(metaData.getToValue()));
}

答案 6 :(得分:0)

它有效,他是一些示例代码:

Criteria criteria = Criteria.where("pt").gte(startDate)
       .andOperator(Criteria.where("pt").lt(endDate));

答案 7 :(得分:0)

我确实喜欢这样

public interface PolicyRepository extends MongoRepository<Policy, String> {
    @Query("{ 'lastDate' : { $gt: ?1, $lt: ?2 } }")
        public List<Policy> findAllPolicies(Date today,Date somedate);
}

答案 8 :(得分:-1)

public interface MyRepository extends MongoRepository<MyObject, MyObjectId> {

    List<MyObject> findByMydatefieldBetween(DateTime startDate, DateTime endDate);

}

https://docs.spring.io/spring-data/mongodb/docs/2.2.x-SNAPSHOT/reference/html/#mongodb.repositories.queries