我的数据库条目看起来像这样
[
{
_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,但它们都没有工作。我在哪里错了?提前谢谢。
答案 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]}}
}
})