python - 是否可以使用 mongoengine (python) 延迟查询数据库?

标签 python mongodb lazy-evaluation mongoengine

我在使用 mongoengine(在 python 中)时遇到内存问题。

假设我有大量的 custom_documents(几千个)。 我想像这样处理它们:

for item in custom_documents.objects():
    process(item)

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

我该怎样做才能使内存更明智? 有没有办法让 mongoengine 延迟查询数据库(当我们在查询集上迭代时它请求对象)?

最佳答案

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

queryset = custom_documents.objects
print queryset.count()

由于 QuerySets 是惰性的,您也可以执行 custom_documents.limit(100).skip(500) 之类的操作,以便仅返回对象 500-600。

关于python - 是否可以使用 mongoengine (python) 延迟查询数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841359/

相关文章:

java - 为什么 CustomProjectAggregationOperation 在 SpringMongoTemplate 中不起作用

python - 输入几何体具有未知 (0) SRID

python - 在 pypy 翻译期间指定安装的 native 库路径

javascript - Python lxml 库无法解析 < 和 >

jquery - 就像按钮一样,在数据库上添加和减去。 Nodejs、mongodb、 Mongoose 、jquery

javascript - Node - Async for Loop 不等待导致 Mongo 过早断开连接

scala - 在Scala中返回一个懒惰的Val

Scala:如何定义输入为 (f, args) 且输出为 f(args) 的函数?

javascript - 在 lodash.js 中,它会缓存 `.value()` 方法的结果吗?

python - 创建一个设置后不可变的字段