Mongo 汇总 $sum 行为

Mongo aggregate $sum behavior

我在 Motor 中有这个查询(看起来几乎与 CLI 查询完全一样):

response = yield self.db.orders.aggregate([
        {'$match': {'reader.uid': reader.get('uid'), 'status': {'$in': statuses}}},
        {'$sort': {'create_datetime': -1}},
        {'$project': {'_id': 1, 'status': 1, 'create_datetime': 1, 'documents': 1}},
        {'$group': {
            '_id': 0,
            'info': {'$push': {'status': '$status', 'create_datetime': '$create_datetime', 'documents': '$documents'}},
            'total': {'$sum': 1}
        }},
        {'$skip': skip},
        {'$limit': int(limit)}
    ])

需要获取 $skip$limit 之前的文档总数。不确定 $sum 到底是如何工作的,但在此查询中,我得到了正确的结果,但是当我传递实际 _id 时,total 值为 1:

        {'$group': {
            '_id': '$_id',
            'info': {'$push': {'status': '$status', 'create_datetime': '$create_datetime', 'documents': '$documents'}},
            'total': {'$sum': 1}
        }},

我想在结果中获得真实的 _id 和正确的 total 值。

Mongo 中的新手,感谢所有答案。

$groupgroups/aggregate所有文档根据某_id组合在一起。

当您按 _id=0 对文档进行分组时,所有文档都将在同一组中,因为所有文档都具有相同的 _id,即 0$sum 将按指定值统计同一组中的所有文档:1.

当您按原始 _id 分组并且 _id 在您的集合中是唯一的时,您应该得到 sum=1 因为只有一个文档包含 _id = > 一组中的一个文档。