Spring Data MongoDB之间的日期

uja*_*ava 32 java spring mongodb-java spring-data

我使用spring数据mongodb.

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

db.posts.find({startDate: {$gte: start, $lt: end}});
Run Code Online (Sandbox Code Playgroud)

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

Query query = new Query();
query.addCriteria(Criteria.where("startDate").gte(startDate)
                            .and("startDate").lt(endDate));
Run Code Online (Sandbox Code Playgroud)

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

Yoh*_*age 59

不要在标准中包含' 和("startDate") '部分.

代替 :

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate));
Run Code Online (Sandbox Code Playgroud)

你应该使用:

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate));
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一个完全正确的答案,应该标记为正确. (4认同)
  • 只是在这里注意"startDate"和"endDate"是java.util.Date对象,并将产生一个mongodb查询,如"startDate":{"$ gte":{"$ date":"2014-09-01T07: 00:00.000Z"},"$ lt":{"$ date":"2014-10-01T07:00:00.000Z"}}} (3认同)

S.D*_*eko 9

您还可以添加查询注释:

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

或适当的弹簧数据方法签名:

public List<AnyYourObj> findByDateBetween(Date from, Date to);
Run Code Online (Sandbox Code Playgroud)

这两种方法都给出了相同的结果。您可以在此处阅读更多信息https://www.baeldung.com/queries-in-spring-data-mongodb 和此处https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/

  • @Query ("{'date' : { $gte: ?0, $lte: ?1 }, 'company': ?2 }" 和方法 public List&lt;AnyYourObj&gt; findByDateBetweenAndCompany(Date from, Date to, String company); (2认同)

Jam*_*hin 7

我必须在现场之间找到日期publishedDate,这是我的做法:

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


小智 5

这里参考

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


Pra*_*ram 5

我确实喜欢这个

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


小智 4

这适用于 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);
Run Code Online (Sandbox Code Playgroud)

另外,为了记录,您有 gte 和 lte 参数的“startDate”。