【问题标题】:MongoDB aggregation framework sort by length of arrayMongoDB聚合框架按数组长度排序
【发布时间】:2013-01-12 11:11:50
【问题描述】:

给定以下数据集:

{ "_id" : ObjectId("510458b188ce1d16e616129b"), "codes" : [ "oxtbyr", "xstute" ], "name" : "Ciao Mambo", "permalink" : "ciaomambo", "visits" : 1 }
{ "_id" : ObjectId("510458b188ce1d16e6161296"), "codes" : [ "zpngwh", "odszfy", "vbvlgr" ], "name" : "Anthony's at Spokane Falls", "permalink" : "anthonysatspokanefalls", "visits" : 0 }

如何将此 python/pymongo 排序转换为可与 MongoDB 聚合框架一起使用的东西?我正在根据codes 数组中的代码数量对结果进行排序。

z = [(x['name'], len(x['codes'])) for x in restaurants]
sorted_by_second = sorted(z, key=lambda tup: tup[1], reverse=True)
for x in sorted_by_second:
    print x[0], x[1]

作品在python中,我只是想知道如何在MongoDB查询端实现相同的目标。

【问题讨论】:

    标签: mongodb pymongo aggregation-framework


    【解决方案1】:
    > db.z.aggregate({ $unwind:'$codes'}, 
                     { $group : {_id:'$_id', count:{$sum:1}}}, 
                     { $sort :{ count: 1}})
    

    【讨论】:

    • 这至少给了我一个开始。我希望显示完整的结果,但至少我的方向是正确的。关于此与应用程序方面的性能的任何线索?
    • 这可能会更接近:db.z.aggregate({ $unwind:'$codes'}, { $group : {_id:{name:'$name', permalink:'$permalink' }, count:{$sum:1}}}, {$sort:{count:-1}}) 性能?您必须进行测试,但很可能您的 MongoDB 服务器受 IO 限制而不是 CPU 限制,因此花费一些 CPU 在那里进行聚合,而不是用 Python 处理文档来填充线路,这可能是一个胜利。
    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多