如何快速获取MongoDB pymongo的所有文件

Rus*_*ord 7 python mongodb nosql pymongo

目前我通过在pymongo中迭代游标来获取文档,例如:

for d in db.docs.find():
    mylist.append(d)
Run Code Online (Sandbox Code Playgroud)

作为参考,对同一组数据(7m记录)执行fetchall大约需要20秒,而上述方法需要几分钟.

有没有更快的方式读取mongo中的批量数据?对不起,我是mongo的新手,如果需要更多信息,请告诉我.

bau*_*ace 13

使用$ natural sort将绕过索引并按照它们存储在磁盘上的顺序返回文档,这意味着mongo不必随意读取磁盘.

https://docs.mongodb.com/manual/reference/method/cursor.sort/#return-natural-order

如果要使用查询,性能会严重降低.你永远不应该依赖FIFO排序.Mongo允许自己在其存储层中移动文档.如果您不关心订单,那就这样吧.

此排序是内部实现功能,您不应该依赖i中的任何特定结构

for d in db.docs.find().sort( { $natural: 1 } ):
    mylist.append(d)
Run Code Online (Sandbox Code Playgroud)

在python中,你还想使用EXHAUST游标类型告诉mongo服务器流回结果而不等待pymongo驱动程序确认每个批处理

https://api.mongodb.com/python/current/api/pymongo/cursor.html#pymongo.cursor.CursorType.EXHAUST

请注意,它永远不会像贝壳一样快.在mongo/bson-> pymongo->之间移动数据的最慢方面是你在python中的UTF8字符串解码.