Spring Data MongoDB关于聚合结果的聚合

时间:2018-06-23 04:20:01

标签: java mongodb mongodb-query spring-data-jpa spring-data-mongodb

我收集了以下类型的文件:

{"status": "Minor", "appId": "123", "otherFiled": "abc"}
{"status": "Minor", "appId": "123", "otherFiled": "xyz"}
{"status": "Major", "appId": "123", "otherFiled": "pqr"}
{"status": "Critical", "appId": "444", "otherFiled": "dgja"}
{"status": "Minor", "appId": "444", "otherFiled": " cknqpqr"}
{"status": "Major", "appId": "555", "otherFiled": " qdqcd"}

我正在使用spring数据mongodb,这是我的代码-

MatchOperation match = new MatchOperation(applicationIdCriteria);
GroupOperation group = Aggregation.group("status", "appId").count().as("count");    
AggregationResults<TestClass> orderAggregate = 
mongoOperations.aggregate(aggregate,
            "appStatus", TestClass.class);

提供以下原始结果

"result": [{
    "_id": {
        "status": "Minor",
        "appId": 123
    },
    "count": 2
}, {
    "_id": {
        "status": "Major",
        "appId": 123
    },
    "count": 1
}, {
    "_id": {
        "status": "Critical",
        "appId": 444
    },
    "count": 1
}, {
    "_id": {
        "status": "Minor",
        "appId": 444
    },
    "count": 1
}, {
    "_id": {
        "status": "Major",
        "appId": 555
    },
    "count": 1
}]

但是我希望得到如下结果-

"result": [{
    "_id": {
        "status": "Minor",
        "applications": [
            {
                "appId": 123,
                "count": 2
            },
            {
                "appId": 444,
                "count": 1
            }
        ]
    }
}, {
    "status": "Major",
    "applications": [
            {
                "appId": 123,
                "count": 1
            },
            {
                "appId": 555,
                "count": 1
            }
        ]
}, {
    "status": "Critical",
    "applications": [
            {
                "appId": 444,
                "count": 1
            }
        ]
}]

我该如何实现? 我想按状态映射结果。对于每种状态,我想查找该状态下的应用程序列表以及该状态下的应用程序次数(计数)。

0 个答案:

没有答案