文件批量导入困难,pymongo

Difficulty with document batch import, pymongo

我遇到的困难比我想象的要将多个文档从 Mongo 批量导入 RAM 困难得多。我正在编写一个应用程序,通过 pymongo 与 MongoDB 通信,该数据库目前有 2GB,但在不久的将来可能会增长到超过 1TB。因此,一次将有限数量的记录批量读取到 RAM 中对于可伸缩性很重要。

基于 this post and this documentation 我认为这会像以下一样简单:

HOST = MongoClient(MONGO_CONN)
DB_CONN = HOST.database_name
collection = DB_CONN.collection_name
cursor = collection.find()
cursor.batch_size(1000) 
next_1K_records_in_RAM = cursor.next()

但是,这对我不起作用。即使我有一个 Mongo 集合,其中填充了 >200K BSON 对象,这会将它们作为单个字典一次读取一个,例如{_id : ID1, ...} 而不是我要查找的内容,这是表示我的集合中的多个文档的字典错误,例如[{_id : ID1, ...}, {_id : ID2, ...}, ..., {_id: ID1000, ...}]

我不认为这有什么关系,但我使用的是 python 3.5 而不是 2.7。

由于此示例引用了一个安全的远程数据源,所以这不是一个可重现的示例。对此表示歉意。如果您对如何改进问题有建议,请告诉我。

  • Python版本在这里无关紧要,与你的输出无关。
  • Batch_size 只定义单个文档中有多少个文档 mongoDB returns 前往 DB(在某些限制下:请参阅此处 这里 )
  • collection.find 总是 returns 一个 iterator/cursor 或 None。批处理透明地完成它的工作) (如果没有找到文件则为后者)
  • 要检查返回的文件,您 必须遍历游标,即

    For document in cursor: print (document)

    或者如果您想要文件列表:list(cursor)

    • 如果您需要重新访问文档,请记得执行 cursor.rewind()