遍历pymongo光标需要无限时间

时间:2019-04-01 11:38:07

标签: mongodb python-2.7 pymongo

我正在使用pymongo从mongo服务器访问数据。服务器上有数十亿个文档,所以我一次使用查找和跳过来访问n个文档。我只需要访问那些具有“ sample_key_XYZ”作为_tag的文档。

print('start',datetime.datetime.now())
a=db.collection.find({"_tag":re.compile('latest')}).skip(2000000).limit(2000)
print('end',datetime.datetime.now())

它可以正常工作,光标在一秒钟内移动。但是,当我尝试访问数据时,它卡住了(执行需要花费数小时) 即

print('start',datetime.datetime.now())

    a=db.collection.find({"_tag":re.compile('sampe_key')}).skip(2000000).limit(2000)
    for doc in a:
        print(doc["_tag"])
        break
    print('end',datetime.datetime.now())

但是如果我更改为一个较小的数字(2500),它的执行速度将非常快(1s)

('开始',datetime.datetime(2019,4,1,1,16,59,3,685992)) ('end',datetime.datetime(2019,4,1,1,16,59,3,686293)) 在没有文档遍历的情况下使用。

1 个答案:

答案 0 :(得分:1)

根据您的描述,尤其是随着跳数的增加,它的速度大大降低,我怀疑您是在点击this issue。查看票证中的描述,并检查是否看到大量扫描的对象/文档。根据我的经验,这可能是您遇到的问题-基本上,MongoDB会先获取文档,然后再跳过它们。

如果确实如此,则修复程序将升级到3.6的更高版本,因为此问题已在3.6.9中修复。