繁体   English   中英

MongoDB:Spring Aggregation操作抛出NoSuchMethodError

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM