我在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的新手总数,所有答案都很受欢迎。