Spring Data MongoDB 日期之间

问题描述 投票:0回答:13

我使用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 查询的方法调用的正确顺序是什么?

java spring spring-data mongodb-java
13个回答
113
投票

请勿在您的条件中包含 'and("startDate")' 部分。

而不是:

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

您应该使用:

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

当您包含 'and("startDate")' 部分时,Mongo 将其视为同一属性上的两个不同条目。


16
投票

您还可以添加查询注释:

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

或者正确的 Spring Data 方法签名:

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/


12
投票

参考这里

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

7
投票

我必须找到现场

publishedDate
之间的日期,这就是我的做法:

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

5
投票

我确实喜欢这个

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

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);

此外,根据记录,您的 gte 和 lte 参数都有“startDate”。


4
投票

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

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

3
投票
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


2
投票
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()));
}

1
投票

使用 MongoRepository 查询方法如下:

List<T> findByStartDateBetween(Range<Integer> dataRange);

使用 Range 进行详细范围设置。

类似问题


0
投票

您可以尝试下面的查询吗?这应该适合您的情况。

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

0
投票
Another approach to this could be:

Create a DateUtility class to get LocalDateTime from input LocalDate 



  public class DateUtility {
        public static LocalDateTime toStartOfDay(LocalDate date) {
            return Optional.ofNullable(date).map(LocalDate::atStartOfDay).orElse(null);
        }
    
        public static LocalDateTime toEndOfDay(LocalDate date) {
            return Optional.ofNullable(date).map((localDate) ->
                    localDate.atTime(LocalTime.MAX)).orElse(null);
        }
    }

Then use it in the query criteria:

Query query = new Query();  query.addCriteria(Criteria.where("startDate").gt(CommonUtils.toStartOfDay(startDate)).lt(CommonUtils.toEndOfDay(startDate)));


This query will give result from whole day for a given date. 

-1
投票

Search By Date Column in spring boot mongo db using criteria(Complex Query)[使用条件在 Spring Boot mongodb 中按日期列搜索][1]

© www.soinside.com 2019 - 2024. All rights reserved.