问题描述
我在我的 Flask 应用中使用了 flask-mongoengine
模块。我有一个名为 Document
的 Task
,它继承自 Document
在我的一个 REST API 端点中,我尝试获取与特定过滤条件匹配的所有任务。
user_tasks = Q(owner=user_id,latest_version=True,is_deleted=False)
user_shared_tasks = Q(groups__in=user_groups_id,is_deleted=False,state="Done")
tasks = Task.objects(user_tasks | user_shared_tasks).no_dereference()
do_some_logic(tasks)
返回的任务数是200个任务,每个任务文档很大(包含很多字段)
但是,在尝试使用聚合进行相同操作时,我发现性能得到了增强
tasks = Task.objects.aggregate([
{
'$match': {
'$or': [
{
'owner': user_id,'latest_version': True,'is_deleted':False
},{
'groups': {'$in': user_groups_id},'is_deleted': False,'state': "Done"
}
]
},}
])
tasks = list(tasks)
tasks = list(map(lambda t: Task(**t),tasks))
with no_dereference(Task):
do_some_logic(tasks)
使用聚合检索数据所用的时间是使用 QuerySet
所用时间的一半
有什么理由吗?这是否意味着使用 QuerySet
会降低性能?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)