使用python计算MongoDB中的多个字段

时间:2015-02-12 14:27:15

标签: python mongodb aggregation-framework

我有这个简单的mongodb查询:

db.checks_reports_data_df8.find({"report_id": str(report["_id"])})

集合checks_reports_data_df8有一些字段,如" success" (可以是0或1)和is_listed(可以是0或1)。

我需要的是能够获取success = 1count_success的所有字段以及is_listed = 1count_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个字段的总和)

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'}
                }
        }
])