我有这个简单的mongodb查询:
db.checks_reports_data_df8.find({"report_id": str(report["_id"])})
集合checks_reports_data_df8
有一些字段,如" success
" (可以是0或1)和is_listed
(可以是0或1)。
我需要的是能够获取success = 1
为count_success
的所有字段以及is_listed = 1
为count_listed
的所有字段的计数。
最终结果将类似于上述查询的所有结果+ count_success和count_listed
我认为可以使用聚合框架来完成。
修改 为了澄清,这是从上面的查询返回:
{'is_listed': 0, 'success': 1, '_id': ObjectId('54dca9920e13a771a44433d4'), 'report_id': u'54dca97758a5d3a37c8b4567'}
{'is_listed': 0, 'success': 1, '_id': ObjectId('54dca9920e13a771a44433a3'), 'report_id': u'54dca97758a5d3a37c8b4567'}
{'is_listed': 1, 'success': 1, '_id': ObjectId('54dca9920e13a771a44433c2'), 'report_id': u'54dca97758a5d3a37c8b4567'}
我需要的是count_success = 3
(成功的总和= 1个字段)和count_listed = 1
(is_listed = 1个字段的总和)
答案 0 :(得分:1)
这样的事情应该有效。
db.checks_reports_data_df8.aggregate([
{
'$match' :
{
"report_id": str(report["_id"])
}
},
{
'$group' :
{
'_id': '$report_id',
count_success :{'$sum': '$success'},
count_is_listed:{'$sum':'$is_listed'}
}
}
])