Rma*_*att 8 sorting mongodb pymongo aggregation-framework
我正在对mongo 2.4.9集合进行一些聚合,但是我无法通过两个字段对结果进行排序.这是我使用PyMongo进行的查询:
result = mongo_coll.aggregate([{"$match": {"_cls": "class1"},
{"$group": {"_id": {"currency": "$total.currency",
"v_id": "$v_id"},
"total": {"$sum": "$total.amount"},
"count": {"$sum": 1}}},
{"$sort": {"_id.currency": 1, "total": -1}}])
Run Code Online (Sandbox Code Playgroud)
我的结果按"总计"排序: - 1
如果我用以下内容替换最后一行:
{"$sort": {"total": -1, "_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)
它仍按"总计"排序: - 1
如果我用以下内容替换它:
{"$sort": {"_id.currency": 1}}])
Run Code Online (Sandbox Code Playgroud)
它按货币排序.
但我无法按照我想要的方式对其进行排序,这意味着首先是货币,然后是总数......(其他结果看起来很好,正如预期的那样).有人有线索吗?
最好的,并提前感谢!
更新:这是一个示例文档:
{
"_id": { "$oid" : "533d0a3b830f783478a75aa1" },
"_cls": "class1",
"v_id": 6813,
"total": {
"amount": 680,
"currency": "EUR",
"exp": -2
}
}
Run Code Online (Sandbox Code Playgroud)
Rma*_*att 10
感谢MongoDB用户Google Group中Bernie的回答,我实际上可以找到Python发生这种情况的原因:
Python dict是无序的,这对于进行排序非常合理:-p
这就是为什么参数可以作为一个BSON.SON dict或一个给出,OrderedDict以保持它更pythonic!
这是我使用的解决方案:
from collections import OrderedDict
sort_dict = OrderedDict()
sort_dict['_id.currency'] = 1
sort_dict['total'] = -1
Run Code Online (Sandbox Code Playgroud)
然后
{"$sort": sort_dict}
Run Code Online (Sandbox Code Playgroud)
编辑 来自谷歌用户组响应的链接...
| 归档时间: |
|
| 查看次数: |
3492 次 |
| 最近记录: |