2016-09-26 72 views
0

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

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

这不是为我工作,但是。尽管我有一个Mongo集合,其中包含大于200K个BSON对象,但它们一次只读一个作为单个词典,例如单个词典。 {_id : ID1, ...}而不是我正在查找的内容,这是我的收藏中代表多个文档的字典的错误,例如, [{_id : ID1, ...}, {_id : ID2, ...}, ..., {_id: ID1000, ...}]

我不希望这个问题,但我在python 3.5而不是2.7。

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

回答

1
  • Python版本在这里是不相关的,与您的输出无关。
  • BATCH_SIZE定义的MongoDB只有多少文件,返回一个 一趟DB(下一些限制:see here here
  • collection.find总是返回一个迭代器/光标或无。配料,它的工作透明) (如果没有找到文件后)
  • 要检查返回的文档您 必须通过游标循环即

    For document in cursor: print (document)

    ,或者如果你想要的清单文件:list(cursor)

    • 记得做一个cursor.rewind(),如果你需要重新审视文件
+0

好吧,所以如果我想创建一个迭代器,从我的本地RAM中的数据库一次返回1000个文档,我该怎么做? – Aaron

+0

collection.find({...},limit = 1000) – nickmilon

+0

看起来不错,谢谢! – Aaron