这是我的代码
sorted(Db.objects.distinct('CompanyId'), key=lambda s: Db.objects(CompanyId=s).count())[-10:]
1,我计算了一个不同的字段(CompanyId);
2,我在上面做了一点;
3,然后我取10个排序的计数列表。
这段代码需要太多次我无法接受,我应该知道什么? 我需要mongodb中的索引吗?
需要帮助!
答案 0 :(得分:1)
正如评论中所建议的那样,您应该使用聚合。
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文档都不会受到伤害。)