从数据库中查找成功和失败计数

时间:2017-11-30 06:23:48

标签: mongodb mongodb-query aggregation-framework

我的数据库条目看起来像这样

[
{
_id : ObjectId("5839d639c7475e3gr32fcf86")
email : abcd@gmail.com
status : failed
}
{
_id : ObjectId("5839d639df7475e3gr32fcf86")
email : efgh@gmail.com
status : success
}
]

我希望按电子邮件ID分组,并创建一个包含三列,即Email,SuccessCount和failCount的输出表。

我的代码目前看起来像这样(不工作

db.getCollection.aggregate([
{$group: 
    {_id: "$email", successCount : {$sum : 1, $status : success }, failCount : {$sum : 1, $status : failed} }
}
],
{
allowDiskUse: true
})

我正在尝试在successCount中添加"status": success并使用$ sum,但它们都没有工作。我在哪里错了?提前谢谢。

2 个答案:

答案 0 :(得分:3)

您可以尝试以下查询

db.mycol.aggregate({
    $project: {
        email: '$email',
        success: {
            $cond: { if: { $eq: ['$status', 'success'] }, then: 1, else : 0 }
        },
        failed: {
            $cond: { if: { $eq: ['$status', 'failed'] }, then: 1, else : 0 }
        }
    }
}, {
    $group: { _id: '$email', success: { $sum: '$success' }, failed: { $sum: '$failed' }
    }
})

答案 1 :(得分:3)

你也可以在单一小组阶段做同样的事情

 db.mycol.aggregate({
        $group: {
            _id: '$email',
            sucessCount:{$sum:{$cond:[{$eq:["$status","success"]},1,0]}},
            failCount:{$sum:{$cond:[{$eq:["$status","failed"]},1,0]}}
        }
    })