MongoDB聚合多个集合,项目和组结果

时间:2018-04-27 11:10:32

标签: python python-3.x mongodb aggregation-framework pymongo

我想要汇总3个集合,并根据某些条件对结果数据进行分组,这是我当前的代码:

       d1 = self.db.client['command_config'].aggregate([
            {
                '$project': {
                    'module': 1,
                    'count_enabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 1]}, 'then': 1, 'else': 0}
                    },
                    'count_disabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 0]}, 'then': 1, 'else': 0}
                    }
                }
            }, {
                '$group': {
                    '_id': '$module', 'count_enabled': {'$sum': '$count_enabled'},
                    'count_disabled': {'$sum': '$count_disabled'}
                }
            }])
        d2 = self.db.client['event_config'].aggregate([
            {
                '$project': {
                    'module': 1,
                    'count_enabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 1]}, 'then': 1, 'else': 0}
                    },
                    'count_disabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 0]}, 'then': 1, 'else': 0}
                    }
                }
            }, {
                '$group': {
                    '_id': '$module', 'count_enabled': {'$sum': '$count_enabled'},
                    'count_disabled': {'$sum': '$count_disabled'}
                }
            }
        ])
        d3 = self.db.client['settings'].aggregate([
            {
                '$project': {
                    'module': 1,
                    'count_enabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 1]}, 'then': 1, 'else': 0}
                    },
                    'count_disabled': {
                        '$cond': {'if': {'$eq': ['$enabled', 0]}, 'then': 1, 'else': 0}
                    }
                }
            }, {
                '$group': {
                    '_id': '$module', 'count_enabled': {'$sum': '$count_enabled'},
                    'count_disabled': {'$sum': '$count_disabled'}
                }
            }
        ])

目前我对每个集合都有3个查询,但它们工作正常但是你可以看到它们的每个代码都重复相同的代码,有没有办法把它们放在一起?请记住,3个中的每一个可能具有相同的模块名称,应该将其组合成一个。

0 个答案:

没有答案