我正在进行简单的聚合操作。以下是我的代码:
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
如您所见,我的代码非常基本。我不知道我在这里做错了什么。
请注意,我尝试使用DataContentResult
和@Entity
运行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>
答案 0 :(得分:0)
我用你的代码行,我能够得到
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。