0

我在 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工作的,但在这个查询中,我得到了正确的结果,但是当我通过实际时_idtotal值为 1:

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

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

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

4

1 回答 1

1

$group将所有文档基于某个_id.

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

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

于 2016-07-06T08:41:42.323 回答