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, который мне нужен?
Ответы
Ответ 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);
}
Ответ 8
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