目前我通过在pymongo中迭代游标来获取文档,例如:
for d in db.docs.find():
mylist.append(d)
作为参考,对同一组数据(7m记录)执行取件大约需要20秒,而上述方法需要几分钟。
在mongo中读取批量数据有更快的方法吗?对不起,我是mongo的新手,如果需要更多信息,请告诉我。
答案 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)