Java Don';Spring数据存储库是否支持在查询中包含?
在Spring数据版本2.3.4中,名为Java Don';Spring数据存储库是否支持在查询中包含?,java,spring,mongodb,spring-data,Java,Spring,Mongodb,Spring Data,在Spring数据版本2.3.4中,名为findallByRadiandDateBetween的自定义存储库方法生成如下MongoDB查询: { "roadId" : "road_1", "date" : { "$gt" : { "$date" : "2020-01-10T00:00:00Z"}, "$lt" : { "$date" :
findallByRadiandDateBetween
的自定义存储库方法生成如下MongoDB查询:
{ "roadId" : "road_1", "date" : { "$gt" : { "$date" : "2020-01-10T00:00:00Z"}, "$lt" : { "$date" : "2020-01-13T00:00:00Z"}}}
但是,我需要将此“中间”条件包含在内,即它必须使用$gte
而不是$gt
和$lte
而不是$lt
。Spring数据版本2.3.4不支持“包含”一词
同样,使用方法名如findallByRadiandDateGreaterThanEqualandDataTelesThanEqual
也不能与MongoDB一起使用:
org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Due to limitations of the com.mongodb.BasicDocument, you can't add a second 'date' expression specified as 'date : Document{{$lte=Mon Jan 13 02:00:00 IST 2020}}'. Criteria already contains 'date : Document{{$gte=Fri Jan 10 02:00:00 IST 2020}}'.
at org.springframework.data.mongodb.core.query.Criteria.setValue(Criteria.java:805) ~[spring-data-mongodb-3.0.4.RELEASE.jar:3.0.4.RELEASE]
at org.springframework.data.mongodb.core.query.Criteria.getCriteriaObject(Criteria.java:738) ~[spring-data-mongodb-3.0.4.RELEASE.jar:3.0.4.RELEASE]
at org.springframework.data.mongodb.core.query.Query.getQueryObject(Query.java:251) ~[spring-data-mongodb-3.0.4.RELEASE.jar:3.0.4.RELEASE]
因此,唯一的工作代码如下所示,使用带有@query
注释的手动定义的MongoDB查询:
public interface EventRepository extends CrudRepository<Event, String> {
// Spring Data doesn't support between INCLUSIVE
// That's why I need to define the query by myself
@Query("{'roadId': ?0, 'date': {'$gte': {'$date': ?1}, '$lte': {'$date': ?2}}}")
List<Event> findAllByRoadIdAndDatesBetweenInclusive(String roadId, Date fromDate, Date toDate);
}
public interface EventRepository扩展了crudepository{
//Spring数据不支持包含之间的数据
//这就是为什么我需要自己定义查询
@查询({'roadId':?0,'date':{'gte':{'date':?1},$lte':{'date':?2})
列出两者之间的FindAllByRoadAndDates(字符串roadId、Date fromDate、Date toDate);
}
如何在不手动定义真正的MongoDB查询的情况下做到这一点?您可以使用
MongoTemplate
的find方法。或者,您可以为存储库创建/实现自定义方法(将使用mongo模板的代码)。。