pymongo文件批量导入困难

时间:2016-09-26 22:27:44

标签: python mongodb python-3.x pymongo

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

基于this postthis 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()

然而,这对我不起作用。尽管我有一个填充了> 200K BSON对象的Mongo集合,但它一次一个地读取它们作为单个字典,例如{_id : ID1, ...}而不是我正在寻找的内容,这是代表我的馆藏中多个文档的字典错误,例如: [{_id : ID1, ...}, {_id : ID2, ...}, ..., {_id: ID1000, ...}]

我不认为这很重要,但我使用的是python 3.5而不是2.7。

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

1 个答案:

答案 0 :(得分:1)

  • Python版本与此无关,与您的输出无关。
  • Batch_size仅定义mongoDB在单个文档中返回的文档数 DB之旅(在某些限制下:see here here
  • collection.find始终返回迭代器/游标或None。批处理可以透明地完成工作) (后来如果没有找到文件)
  • 检查退回的文件 必须迭代光标,即

    For document in cursor: print (document)

    或者如果您需要文档列表:list(cursor)

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