2016-07-28 67 views
3

目前我获取文件通过光标在pymongo迭代,例如:如何快速获取所有文件的MongoDB pymongo

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

以供参考,在同一组数据(7M记录)的执行使用fetchall大约需要上面的方法需要几分钟时间20秒。

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

回答

3

使用$自然排序将绕过索引并按文件存储顺序返回文件,这意味着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中,你也想使用排气游标类型依赖于任何特定的结构告诉mongo服务器在不等待pymongo驱动程序确认每个批次的情况下回传结果

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

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

+0

由于使用天然标志肯定是有帮助。 –

0

你只需要做出一个投与list()功能

pymongo_cursor = db.collection.find() 
all_data = list(pymongo_cursor)