Подтвердить что ты не робот

Spring Данные MongoDB Date Between

Я использую spring данные 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, который мне нужен?

4b9b3361

Ответ 1

Не включайте в свои критерии параметр и ( "startDate" ).

Вместо:

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

Вы должны использовать:

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

Когда вы включаете часть "и (startDate)", Mongo видит в ней две разные записи в одном и том же свойстве.

Ответ 2

Ссылка здесь

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

Ответ 3

Мне нужно было найти даты между полями publishedDate и вот как я это сделал:

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

Ответ 4

Вы также можете добавить аннотацию запроса:

@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/

Ответ 5

Это работает в версии 2.7.2 драйвера Java

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

Кроме того, для записи у вас есть "startDate" для параметров gte и lte.

Ответ 6

Он работает, он является примером кода:

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

Ответ 7

Мне это понравилось

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