这是否可以使用mongoengine(python)懒惰地查询数据库?

Oos*_*Oos 4 python lazy-evaluation mongodb mongoengine

我有mongoengine的内存问题(在python中).

假设我有大量的custom_documents(数千).我想要处理它们,如下所示:

for item in custom_documents.objects():
    process(item)
Run Code Online (Sandbox Code Playgroud)

问题是custom_documents.objects()加载内存中的每个对象,我的应用程序使用几GB ...

我怎样才能让它更具记忆性呢?有没有办法让mongoengine懒惰地查询数据库(它在迭代查询集时请求对象)?

jjm*_*jjm 6

根据文档(根据我的经验),collection.objects返回一个懒惰QuerySet.您的第一个问题可能是您正在调用该objects属性,而不是仅将其用作可迭代的.我觉得你的应用程序使用如此多的内存肯定还有其他原因,或许process(object)以某种方式存储对它的引用?尝试以下代码并检查应用程序的内存使用情况:

queryset = custom_documents.objects
print queryset.count()
Run Code Online (Sandbox Code Playgroud)

既然QuerySets是懒惰的,你也可以做类似的事情custom_documents.limit(100).skip(500),只返回500-600的对象.