简体   繁体   English

我如何在春季编写查询聚合Mongo? 我究竟做错了什么?

[英]How do I write a query aggregation Mongo in the Spring? What am I doing wrong?

I've got an aggregation query in MongoDB that works when I run it directly in the shell. 我在MongoDB中有一个聚合查询,当我直接在外壳中运行它时,它就可以工作。 Here's the shell query: 这是shell查询:

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

I want to receive 我想收到

List<Map<String, Integer>>

Where String = ToId, Integer = pointCount 其中String = ToId,Integer = pointCount

That's what I'm doing 那就是我在做的

@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;
}

But it gives an error: Cannot resolve method 'newAggregation(org.springframework.data.mongodb.core.aggregation.UnwindOperation, org.springframework.data.mongodb.core.aggregation.GroupOperation.GroupOperationBuilder, org.springframework.data.mongodb.core.aggregation.ProjectionOperation)' 但是它给出了一个错误:无法解析方法'newAggregation(org.springframework.data.mongodb.core.aggregation.UnwindOperation,org.springframework.data.mongodb.core.aggregation.GroupOperation.GroupOperationBuilder,org.springframework.data.mongodb。 core.aggregation.ProjectionOperation)'

What am I doing wrong, please explain. 我做错了,请解释。 Thank you 谢谢

Spring aggregation code doesn't match mongo shell query. Spring聚合代码与mongo shell查询不匹配。 I've provided answer to fix the compilation error. 我提供了解决错误的答案。 You're missing alias for sum operation. 您缺少求和运算的别名。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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