Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mongoengine中的慢速查询_Python_Mongodb_Mongoengine - Fatal编程技术网

Python mongoengine中的慢速查询

Python mongoengine中的慢速查询,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我使用Mongoengine对MongoDB数据库执行查询,然后将结果保存为json文件。我的文档定义如下所示: class Foo(Document): # fields definitions goes here @queryset_manager def some_fields(self, queryset): return queryset.exclude('field1', 'field2', 'field3') 如您所见,我创建了自定义方法

我使用Mongoengine对MongoDB数据库执行查询,然后将结果保存为json文件。我的文档定义如下所示:

class Foo(Document):
    # fields definitions goes here

    @queryset_manager
    def some_fields(self, queryset):
        return queryset.exclude('field1', 'field2', 'field3')
如您所见,我创建了自定义方法,以从查询结果中排除一些不必要的字段。但是整个过程
query->countresults->转换为json
非常缓慢。我创建了一些虚拟日志来更好地解释我的问题

    query_start = datetime.datetime.now()
    foos = Foo.some_fields.filter(**filter_dict)
    query_end = datetime.datetime.now()
    logger.debug(
        "%s || Query time: %s" % (str(datetime.datetime.now()), str((query_end - query_start).total_seconds())))
    counting_start = datetime.datetime.now()
    foos_count = foos.count()
    counting_end = datetime.datetime.now()
    logger.debug("%s || Foos count: %d in %f" % (
        str(datetime.datetime.now()), foos_count,(counting_end - counting_start).total_seconds(),
    ))
    serialization_start = datetime.datetime.now()
    json_response = foos.to_json()
    serialization_end = datetime.datetime.now()
    logger.debug("%s || Serialization time: %s" % (
        str(datetime.datetime.now()), str((serialization_end - serialization_start).total_seconds())))
下面是示例输出

Query time: 0.098477
Foos count: 0 in 27.771622
Serialization time: 34.59575

我猜上一步的结果不会被下一部分使用。我说得对吗?因为我找不到任何其他解释,将空结果转换为json需要半分钟。或者我错过了什么?如何更改代码以更快地执行这些操作

也许真正的查询处于第二阶段?您可以在mongo控制台中运行查询。如果它将运行30秒左右,您应该考虑索引