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

标签 mongodb mongodb-query aggregation-framework mongodb-aggregation

我在 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 }
        ]
    }
]

最佳答案

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

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"
                }
            }
        }
    }
])

关于mongodb - 如何使用 Mongo 聚合功能来计算嵌套组的总计和小计百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39619747/

相关文章:

javascript - 使用 Mongoose 在 Handlebars 中渲染额外数据

mongodb - 查找字段与另一个字段匹配且无需聚合的文档

mongodb - 在 ObjectId 字段上的两个集合之间进行 $lookup 查询

python - pymongo 按日期时间分组

mongodb - 如何将 Mongoose 聚合结果转换为特定的文档模式类型?

node.js - 使用一个 Mongoose 查询的结果进行另一查询

java - 在 mongodb spring-data 中使用 dbref 保存文档

javascript - MongoDB 写命令 Node.js

node.js - 仅以值数组形式返回结果

mongodb - 将数据集投影到新对象中