【发布时间】:2016-11-08 04:54:04
【问题描述】:
我在 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 新手,感谢所有答案。
【问题讨论】:
-
不知道为什么当你按_id分组时得到sum=0,你确定没有错误?你的 _id 是什么类型的?
-
是的,我得到 1,我的错!
标签: python mongodb aggregation-framework tornado-motor