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

时间:2016-07-28 22:49:21

标签: python mongodb pymongo nosql

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

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

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

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

2 个答案:

答案 0 :(得分:10)

使用$ natural sort将绕过索引并按照它们存储在磁盘上的顺序返回文档,这意味着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

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

答案 1 :(得分:2)

您只需要使用list()功能

进行演员表
pymongo_cursor = db.collection.find()
all_data = list(pymongo_cursor)