我用mongoengine统计后排序,但是效率很低,这个过程怎么办?
I made a sort after a count with mongoengine but it has very low efficiency,what can i do in this process?
下面是我的代码
sorted(Db.objects.distinct('CompanyId'), key=lambda s: Db.objects(CompanyId=s).count())[-10:]
1,我统计了一个不同的字段(CompanyId);
2,上面我做了一个整理;
3,然后我取10个排序后的计数列表。
这个代码用了太多次我不能接受,我应该知道什么?
我需要 mongodb 中的索引吗?
需要帮助!
正如评论中所建议的,您应该为此使用聚合。
Mongoengine 提供 aggregation methods.
你可以试试这个:
from operator import itemgetter
companies = Db.objects.item_frequencies('CompanyId', normalize=True)
top_companies = sorted(companies.items(), key=itemgetter(1), reverse=True)[:10]
(这是未经测试的,灵感来自您的问题和文档中的 item_frequencies 示例。无论如何,正如评论中所说,阅读 MongoDB 和 MongoEngine 文档不会有什么坏处。)
下面是我的代码
sorted(Db.objects.distinct('CompanyId'), key=lambda s: Db.objects(CompanyId=s).count())[-10:]
1,我统计了一个不同的字段(CompanyId);
2,上面我做了一个整理;
3,然后我取10个排序后的计数列表。
这个代码用了太多次我不能接受,我应该知道什么? 我需要 mongodb 中的索引吗?
需要帮助!
正如评论中所建议的,您应该为此使用聚合。
Mongoengine 提供 aggregation methods.
你可以试试这个:
from operator import itemgetter
companies = Db.objects.item_frequencies('CompanyId', normalize=True)
top_companies = sorted(companies.items(), key=itemgetter(1), reverse=True)[:10]
(这是未经测试的,灵感来自您的问题和文档中的 item_frequencies 示例。无论如何,正如评论中所说,阅读 MongoDB 和 MongoEngine 文档不会有什么坏处。)