Mongo find() 到 return 某些文档的所有文档都很慢

Mongo find() to return all documents is slow for certain documents

我在使用 PyMongo 遍历特定集合中的所有文档时遇到问题。该循环需要扫描大约 450k 个文档,几乎所有文档都几乎是即时的,除了少数几个,其中一次迭代需要 10-90 秒。

for testscriptexec in testscriptexecs.find({}, {"tsExecId": 1,"involvedOrgs": 1, "qualifiedName": 1, "endTime": 1, "status": 1}):

我想弄清楚是什么导致某些文档上的 Cursor 变慢。我确定长时间延迟总是发生在相同的文档上。

我比较了慢速文档的 JSON 导出和快速文档的导出,我没有看到任何应该减慢 _id 索引搜索的东西。文件不是特别大,我实际拉的字段大小完全一样。

该集合在 _id 上有一个索引,以及一些与此代码无关的其他索引。

哪些因素可能导致此查询在按 ID 查找的某些迭代中挂起?

这些问题总是有点主观,但一个想法是 MongoDB returns 批量数据,这样可以解释您所看到的。

您可以通过调整 find() https://pymongo.readthedocs.io/en/stable/api/pymongo/cursor.html#pymongo.cursor.Cursor.batch_size

上的 batch_size 参数来排除或排除此问题