2

我在 mongo 集合中有一些像这样的文件。

 {
    "_id" : ObjectId("57e290087139be15d59408c1"),
    "groupName" : "Registration",
    "testCases" : [ 
        {
            "name" : "R1",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "R1.1",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "R2",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "R3",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "R4",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "R1",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "R2",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "R3",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "R4",
            "browser" : "Firefox",
            "status" : "failed"
        }
    ]
}

    {
    "_id" : ObjectId("57e2903b7139be15d59408c2"),
    "groupName" : "Checkout",
    "testCases" : [ 
        {
            "name" : "C1",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "C2",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "C3",
            "browser" : "Chrome",
            "status" : "failed"
        }, 
        {
            "name" : "C4",
            "browser" : "Chrome",
            "status" : "passed"
        }, 
        {
            "name" : "C1",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "C2",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "C3",
            "browser" : "Firefox",
            "status" : "passed"
        }, 
        {
            "name" : "C4",
            "browser" : "Firefox",
            "status" : "failed"
        }
    ]
}

如何使用 Mongo 的聚合功能计算嵌套组的总计和小计百分比?

我期待输出结果为

示例预期输出

results: [    
    {
        "groupName": "Registration",
        "totalTests": 17,
        "section": [
            { "name": "R1", "totalTests": 17, "sectionCount": 2 }
        ]
    }
]
4

1 回答 1

2

您可以尝试运行以下聚合操作:

db.collection.aggregate([
    { "$unwind": "$testCases" },
    {
        "$group": {
            "_id": null,
            "testsCount": { "$sum": 1 },
            "docs": { "$push": "$$ROOT" }
        }
    },
    { "$unwind": "$docs" },
    {
        "$group": {
            "_id": {
                "groupName": "$docs.groupName",
                "testName": "$docs.testCases.name"
            },
            "count": { "$sum": 1 },
            "testsCount": { "$first": "$testsCount" }
        }
    },    
    {
        "$group": {
            "_id": "$_id.groupName",
            "totalTests": { "$first": "$testsCount" },
            "section": {
                "$push": {
                    "name": "$_id.testName", 
                    "totalTests": "$testsCount", 
                    "sectionCount": "$count"
                }
            }
        }
    }
])
于 2016-09-21T15:27:15.917 回答