【问题标题】:How do I write a query aggregation Mongo in the Spring? What am I doing wrong?如何在 Spring 中编写查询聚合 Mongo?我究竟做错了什么?
【发布时间】:2016-12-08 20:57:18
【问题描述】:

我在 MongoDB 中有一个聚合查询,当我直接在 shell 中运行它时它就可以工作。这是 shell 查询:

db.game.aggregate([
 {$unwind: "$array"}, 
 {$group:{"_id" : "$array.ToId", "pointCount": {$sum:"$array.point"}}}, 
 {$project: {_id: 0, "ToId":"$_id", "pointCount": 1}}
 ])

我想收到

List<Map<String, Integer>>

其中 String = ToId,Integer = pointCount

这就是我正在做的事情

@Inject
private MongoTemplate mongoTemplate;

public List<Map<String, Integer>> getUsers(A array) {

    Aggregation aggregation = newAggregation(
        unwind("achievement"),
        group("_id", "array.ToId", "pointCount").sum("array.PointCount"),
        project("ToId", "pointCount")
    );

    AggregationResults groupResults = mongoTemplate.aggregate(
        aggregation, UserRepo.class, A.class);

    List<Map<String, Integer>> users = groupResults.getMappedResults();

    return users;
}

但它给出了一个错误: 无法解析方法'newAggregation(org.springframework.data.mongodb.core.aggregation.UnwindOperation,org.springframework.data.mongodb.core.aggregation.GroupOperation.GroupOperationBuilder,org.springframework.data.mongodb.core.aggregation.ProjectionOperation) '

我做错了什么,请解释一下。谢谢

【问题讨论】:

    标签: java spring mongodb spring-mvc


    【解决方案1】:

    Spring 聚合代码与 mongo shell 查询不匹配。我已经提供了修复编译错误的答案。您缺少 sum 运算的别名。

    Aggregation aggregation = newAggregation(
                unwind("achievement"),
                group("_id", "array.ToId", "pointCount").sum("array.PointCount").as("pointCount"),
                project("ToId", "pointCount"));
    

    【讨论】:

    • 谢谢,维拉姆。完美运行
    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 2016-07-18
    • 2015-05-08
    • 2019-12-23
    • 2014-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多