Mongodb 从数据库中查找成功和失败计数
我的数据库条目如下所示Mongodb 从数据库中查找成功和失败计数,mongodb,mongodb-query,aggregation-framework,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 我的代码
[
{
_id : ObjectId("5839d639c7475e3gr32fcf86")
email : abcd@gmail.com
status : failed
}
{
_id : ObjectId("5839d639df7475e3gr32fcf86")
email : efgh@gmail.com
status : success
}
]
我想按电子邮件id分组,并创建一个包含三列的输出表:email、SuccessCount和failCount
我的代码当前看起来是这样的(不工作)
我正在尝试将
“status”:success
添加到successCount中,同时添加$sum,但它们都不起作用。我哪里出了问题?提前感谢。您可以尝试以下查询
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' }
}
})
您可以尝试以下查询
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' }
}
})
你们也可以在小组赛阶段做同样的事情
db.mycol.aggregate({
$group: {
_id: '$email',
sucessCount:{$sum:{$cond:[{$eq:["$status","success"]},1,0]}},
failCount:{$sum:{$cond:[{$eq:["$status","failed"]},1,0]}}
}
})
你们也可以在小组赛阶段做同样的事情
db.mycol.aggregate({
$group: {
_id: '$email',
sucessCount:{$sum:{$cond:[{$eq:["$status","success"]},1,0]}},
failCount:{$sum:{$cond:[{$eq:["$status","failed"]},1,0]}}
}
})
共享适当的文档结构。您共享的内容无效。它是一个单文档、多文档、数组吗?共享适当的文档结构。您共享的内容无效。是单个文档、多个文档、数组吗?所有电子邮件地址的成功和失败计数均显示为0。您确定状态字段仅包含“成功”和“失败”值吗?是的,我检查了两次。无法找出我在这里缺少了什么。db.mycol.aggregate({$group:{{u id:{email:'$email',status:$status},count:{$sum:1}}},{$group:{{u id::$u id.email],counts:{$push:{status:${u id.status',count:$count}})你能检查一下吗?它在搜索了很长时间后超时。所有电子邮件地址的成功和失败计数都显示为0。你确定状态字段只包含“成功”和“失败”值吗?是的,我检查了两次。无法找出我在这里缺少了什么。db.mycol.aggregate({$group:{{u id:{email:'$email',status:$status},count:{$sum:1}}},{$group:{{u id::$u id.email],counts:{$push:{status:${u id.status',count:$count}})你能检查一下吗?它在搜索了很长时间后超时了。