Spring MongoDB 的数据 - gt、gte、lt、lte 运算符的聚合错误
Spring Data For MongoDB - Error in Aggregation for gt, gte, lt, lte operators
我有一个项目使用 Spring 数据连接到 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
,我的查询 运行s 没有问题。
我调试到 org.springframework.data.util.TypeDiscoverer
,似乎 Spring 正在尝试在我的 Rawdata class 中搜索一个名为 $gte
的字段以确定其类型。
任何帮助将不胜感激。
编辑: 正如我提到的,Spring 似乎在我的 Rawdata class 中寻找名为 $gte
的 属性 ], 添加此 属性 后,我的聚合查询有效。
到目前为止,我的代码可以正常工作,但在我看来好像出了点问题。
跟踪错误后,我发现 Spring 在我的 DTO 中查找名为 $gte
的 属性(它还会查找 $ge
、$lt
, $lte
).在为这些属性添加字段并创建其 getter 和 setter 方法后,我的聚合查询操作正在运行。
我不知道我对 MongoDB 的 Spring 数据的实现是否有问题,或者 API 的 1.8.0 版本有问题,但是到目前为止,这是最好的解决方案。
我有一个项目使用 Spring 数据连接到 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
,我的查询 运行s 没有问题。
我调试到 org.springframework.data.util.TypeDiscoverer
,似乎 Spring 正在尝试在我的 Rawdata class 中搜索一个名为 $gte
的字段以确定其类型。
任何帮助将不胜感激。
编辑: 正如我提到的,Spring 似乎在我的 Rawdata class 中寻找名为 $gte
的 属性 ], 添加此 属性 后,我的聚合查询有效。
到目前为止,我的代码可以正常工作,但在我看来好像出了点问题。
跟踪错误后,我发现 Spring 在我的 DTO 中查找名为 $gte
的 属性(它还会查找 $ge
、$lt
, $lte
).在为这些属性添加字段并创建其 getter 和 setter 方法后,我的聚合查询操作正在运行。
我不知道我对 MongoDB 的 Spring 数据的实现是否有问题,或者 API 的 1.8.0 版本有问题,但是到目前为止,这是最好的解决方案。