如何使用Pymongo从光标插入?

时间:2015-06-29 19:24:49

标签: python mongodb cursor pymongo

我感兴趣的是使用游标将数据库从一个mongod复制到另一个mongod。我想限制发送的插入请求的数量,而不是单独插入游标中的每个文档,我想对每个游标批处理执行insert_many。

有没有办法在pymongo / python中执行此操作?

我已经尝试将光标转换为列表,然后调用insert_many,这样可行,但是如果集合超过了我拥有的ram数量,那么它就无法工作。

有关如何从光标中获取批次并将其转换为列表的任何想法都将不胜感激

谢谢!

2 个答案:

答案 0 :(得分:0)

我还不能发表评论,但最近我遇到了同样的问题。我找到了很多解决方案,但没有一个解决方案对我的具体情况感到满

在你的情况下, 与python / pymongo一起使用光标吗?如果是这样,目前没有办法做到这一点,但我花了很多时间挖掘pymongo source code来确认,我想我可以使用他们的一些低级API来实现这一目标。我什么时候会通知你。

答案 1 :(得分:0)

到目前为止,这是我的“切片/批处理”解决方案,它比单独迭代光标中的每个文档更有效:

  • 记下您抓取的最后一个文档的id字段
  • 使用查询“大于上一个文档的_id”打开游标,限制为 无论你的batch_size是什么
  • 现在,您应该有一个光标,其中包含批量处理所需数量的文档
  • 通过列表(光标)
  • 将此光标变为python列表
  • 此列表中的Insert_many
  • 更新上次抓取,并删除列表以释放ram

您可以调整批量大小以适应RAM限制。这是一个非常好的解决方案,因为它减少了游标迭代的瓶颈,并且不会因为你不断删除批次而占用太多ram。