MongoDB的Spring数据 - gt,gte,lt,lte运算符的聚合错误

时间:2015-10-29 21:05:06

标签: java spring mongodb spring-data spring-data-mongodb

我有一个使用Spring Data连接到MongoDB数据库(版本1.8.0)的项目,目前我正在尝试创建聚合查询但是当我使用以下任何运算符时它失败:gt,gte,lt ,LTE

我的聚合查询如下所示:

TypedAggregation<Rawdata> aggregation = newAggregation(Rawdata.class,
    match(Criteria.where("value").gte(value)),
    group("genotypeName","genotypeId","value"),
    sort(Sort.Direction.ASC, "value"),
    limit(total)
);
AggregationResults<Rawdata> result = mongoTemplate.aggregate(aggregation, Rawdata.class);

当我运行它时,我得到以下异常:

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.IllegalAccessError: org/springframework/beans/PropertyMatches
org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1287)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我确定问题出在gte运算符中,因为如果我将其替换为is,我的查询就会运行而没有任何问题。

我调试到org.springframework.data.util.TypeDiscoverer,看起来Spring试图在我的Rawdata类中搜索一个名为$gte的字段来确定其类型。

非常感谢任何帮助。

编辑:正如我所提到的,Spring似乎在我的Rawdata类中寻找一个名为$gte的属性,在添加此属性后,我的聚合查询可以正常工作。

到目前为止,我的代码正在运行,但它看起来像是出了问题。

1 个答案:

答案 0 :(得分:0)

在跟踪错误后,我发现Spring正在我的DTO中查找名为$gte的属性(它还会查找$ge$lt$lte)。为这些属性添加字段并创建其getter和setter方法后,我的聚合查询操作正在运行。

我不知道我为MongoDB实现Spring Data是否有问题,或者1.8版本的API出现了问题,但到目前为止这是最好的解决方案。