Java Don';Spring数据存储库是否支持在查询中包含?

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" :

在Spring数据版本2.3.4中,名为
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模板的代码)。。