[英]MongoDB: Spring Aggregation operation throws NoSuchMethodError
我正在做一個簡單的聚合操作。 以下是我的代碼:
Aggregation aggregation = newAggregation(
match(Criteria.where("publisherId").is(Integer.parseInt(publisherId)))
, group("publisherId").count().as("total").sum("name").as("name").sum("zip").as("zip")
);
AggregationResults<DataContentResult> result = mongoTemplate.aggregate(aggregation , DataContent.class, DataContentResult.class);
List<DataContentResult> theResult = result.getMappedResults();
這是映射MongoDB集合的類:
@Document(collection = "DataContent")
public class DataContent{
@Id
private String _id;
private Integer publisherId;
private Integer name;
private Integer zip;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public Integer getPublisherId() {
return publisherId;
}
public void setPublisherId(Integer publisherId) {
this.publisherId = publisherId;
}
public Integer getName() {
return name;
}
public void setName(Integer name) {
this.name = name;
}
public Integer getZip() {
return zip;
}
public void setZip(Integer zip) {
this.zip = zip;
}
}
我有想要返回結果的類:
@Entity
public class DataContentResult implements Serializable{
private static final long serialVersionUID = 6215495047789780758L;
String publisherId;
long total;
private Integer name;
private Integer zip;
public String getPublisherId() {
return publisherId;
}
public void setPublisherId(String publisherId) {
this.publisherId = publisherId;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public Integer getName() {
return name;
}
public void setName(Integer name) {
this.name = name;
}
public Integer getZip() {
return zip;
}
public void setZip(Integer zip) {
this.zip = zip;
}
}
這是我得到的錯誤:
[INFO] Caused by: java.lang.NoSuchMethodError: org.springframework.data.mongodb.core.MongoTemplate.aggregate(Lorg/springframework/data/mongodb/core/aggregation/Aggregation;Ljava/lang/Class;Ljava/lang/Class;)Lorg/springframework/data/mongodb/core/aggregation/AggregationResults;
[INFO] at de.it2media.dps.statistics.server.dao.impl.MainMongoDAOImpl.getDataContentFilterStatisticData(MainMongoDAOImpl.java:124) ~[classes/:na]
[INFO] at de.it2media.dps.statistics.server.service.impl.MainServiceMongoImpl.getDataContentFilterStatisticData(MainServiceMongoImpl.java:57) ~[classes/:na]
[INFO] at de.it2media.dps.statistics.server.controller.HomeController.getDataContentFilterStatisticData(HomeController.java:66) ~[classes/:na]
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_25]
[INFO] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_25]
[INFO] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_25]
[INFO] at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_25]
[INFO] at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:587) ~[gwt-servlet-2.7.0.jar:na]
[INFO] ... 47 common frames omitted
如您所見,我的代碼非常基本。 我不知道我在做什么錯。
請注意,我嘗試使用和不使用@Entity
都運行DataContentResult
類,並且implements Serializable
並且沒有任何效果。 那么我怎么會得到NoSuchMethodError
? 這個錯誤到底意味着什么?
編輯:以下是我pom.xml中的依賴項。 我不確定庫版本是否與此有關。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.1</version>
</dependency>
我用你的代碼行,我能夠
10:49:39.342 [main] DEBUG o.s.data.mongodb.core.MongoTemplate - Executing aggregation: { "aggregate" : "DataContent" ,
"pipeline" : [ { "$match" : { "publisherId" : 10}} ,
{ "$group" : { "_id" : "$publisherId" , "total" : { "$sum" : 1} , "name" : { "$sum" : "$name"} , "zip" : { "$sum" : "$zip"}}}]}
我的pom.xml如下。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>${org.mongodb.version}</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>${org.mongodb.driver}</version>
</dependency>
<org.mongodb.version>1.5.5.RELEASE</org.mongodb.version>
<org.mongodb.driver>3.0.0-beta3</org.mongodb.driver>
還嘗試了<org.mongodb.driver>3.2.1</org.mongodb.driver>
並成功運行,是什么讓我認為您的導入之一不正確。
使用正確的導入檢查此github 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.