【问题标题】:MongoDB: Get count of different data in sub-documentsMongoDB:获取子文档中不同数据的计数
【发布时间】:2015-11-14 07:13:05
【问题描述】:

我的run 集合中有这样的文档:

{
    "_id" : ObjectId("55d4410544c96d6f6578f893"), 
    "runName" : "1439973637614",
    "suiteList": [
        {
            "suiteStatus": "PASS"
        },
        {
            "suiteStatus": "PASS"
        }
    ]
}

{
    "_id" : ObjectId("55d44eb4c0422e7b8bffe76b"), 
    "runName" : "1439977140396",
    "suiteList": [
        {
            "suiteStatus": "FAIL"
        },
        {
            "suiteStatus": "PASS"
        }
    ]

}

{
    "_id" : ObjectId("55d44f0bc0422e7b8bffe76f"), 
    "runName" : "1439977227370",
    "suiteList": [
        {
            "suiteStatus": "FAIL"
        },
        {
            "suiteStatus": "FAIL"
        }
    ]

}

现在我想得到如下输出:

{
    "runName" : "1439973637614",
    {
        "pass": 2,
        "fail": 0
    }
}

{
    "runName" : "1439977140396",
    {
        "pass": 1,
        "fail": 1
    }
}

{
    "runName" : "1439977227370",
    {
        "pass": 0,
        "fail": 2
    }
}

我知道如何使用以下方法获取所有级别的套件列表中的通过和失败计数列表:

db.testruns.aggregate([
    { $unwind: "$suiteList" },
    { $group: { _id: "$suiteList.suiteStatus", count: { $sum: 1 } } }
]);

但我不确定如何实现我想要的预期输出。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您的聚合查询需要进行一些修改,您应该在组中使用$cond,因此聚合如下:

    db.testruns.aggregate({
        "$unwind": "$suiteList"
    }, {
        "$group": {
            "_id": "$runName",
            "pass": {
                "$sum": {
                    "$cond": {
                        "if": {
                            "$eq": ["$suiteList.suiteStatus", "PASS"]
                        },
                        "then": 1,
                        "else": 0
                    }
                }
            },
            "fail": {
                "$sum": {
                    "$cond": {
                        "if": {
                            "$eq": ["$suiteList.suiteStatus", "FAIL"]
                        },
                        "then": 1,
                        "else": 0
                    }
                }
            }
        }
    }).pretty()
    

    【讨论】:

    • 你太棒了。这确实表明我必须深入阅读 Mongo 的文档。
    猜你喜欢
    • 2021-03-19
    • 2020-06-26
    • 1970-01-01
    • 2013-07-12
    • 2012-12-11
    • 2014-04-01
    • 1970-01-01
    • 2014-02-02
    • 2014-10-17
    相关资源
    最近更新 更多