簡體   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