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

for d in db.docs.find():
    mylist.append(d)

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

有没有更快的方法来读取mongo中的批量数据?抱歉,我是mongo的新手,如果需要更多信息,请告诉我。

最佳答案

使用$ natural排序将绕过索引并按文档在磁盘上存储的顺序返回文档,这意味着mongo不必随便对磁盘进行读取操作。

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

如果要使用查询,性能会严重下降。您永远不应依赖FIFO排序。 Mongo允许自己在其存储层内移动文档。如果您不在乎订单,那就顺其自然。


for d in db.docs.find().sort( { $natural: 1 } ):
    mylist.append(d)

在python中,您还想使用 EXHAUST 游标类型,该游标类型告诉mongo服务器无需等待pymongo驱动程序确认每个批次即可流回结果

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

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

关于python - 如何快速获取所有文档MongoDB pymongo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38647962/

10-13 07:00