programing

스프링 데이터 MongoDB 날짜 간격

powerit 2023. 8. 26. 12:25
반응형

스프링 데이터 MongoDB 날짜 간격

저는 스프링 데이터 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 쿼리를 빌드하기 위한 올바른 메서드 호출 순서는 무엇입니까?

기준에 '및("시작일")' 부분을 포함하지 마십시오.

다음 대신:

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

다음을 사용해야 합니다.

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

및 ("시작일")" 부분을 포함하면 Mongose는 동일한 속성에 있는 두 개의 다른 항목으로 표시됩니다.

쿼리 주석을 추가할 수도 있습니다.

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

또는 적절한 스프링 데이터 방법 서명:

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/ 에서 더 많은 정보를 읽을 수 있습니다.

여기서 참조

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

필드에서 날짜를 찾아야 했습니다.publishedDate그리고 내가 어떻게 했는지는 다음과 같습니다.

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

이렇게 했어요.

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

이것은 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"가 기록되어 있습니다.

작동합니다. 그는 샘플 코드입니다.

Criteria criteria = Criteria.where("pt").gte(startDate)
       .andOperator(Criteria.where("pt").lt(endDate));
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.deparitory.sys

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

MongoRepository Query 메서드를 다음과 같이 사용합니다.

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

상세 범위 설정에는 범위를 사용합니다.

유사한 질문

아래 쿼리를 사용해 볼 수 있습니까?이것은 당신의 경우에 효과가 있을 것입니다.

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

기준(복합 쿼리)을 사용하여 스프링 부트몽고의 날짜별 열 검색[기준을 이용한 spring boot mongodb의 date 열로 검색][1]

언급URL : https://stackoverflow.com/questions/10311061/spring-data-mongodb-date-between

반응형