向MongoDB集合中的所有文档添加许多字段的首选方法是什么?

时间:2015-05-13 20:37:52

标签: mongodb python-3.4

我有一个Python应用程序迭代地遍历MongoDB(3.0.2)集合中的每个文档(通常介于10K和1M文档之间),并添加新字段(可能使文档中的字段数量增加一倍/三倍) )。

我最初的想法是,我会使用整个修订后的文档(使用pyMongo) - 现在我在质疑:

  • 鉴于修订后的文件要大得多,我应该只插入新字段,还是只更换文件?
  • 此外,最好是逐个文档还是批量对集合进行写入?

1 个答案:

答案 0 :(得分:0)

这实际上是一个很好的问题,可以通过几种不同的方式解决,具体取决于您管理数据的方式。

如果您要插入其他字段,这是否意味着您的数据会在以后添加其他字段,唯一的更改是添加其他字段?如果是这样,你可以 set the ttl on your documents so that the old ones drop off over time 。请记住,如果这样做,您将需要设置一个索引,通过降低_id对结果进行排序,以便在较旧的添加之前选择最新的添加。

这样做的好处是,您不断地编写数据而不是寻找和更新数据,因此速度更快。

关于upserts与批量插入。自批量转发requires you to find the original document first以来,批量插入始终比upsert更快。

  • 鉴于修订后的文件要大得多,我应该只插入新字段,还是只更换文件?
    • 你真的需要完全理解你的数据,以确定最好的数据,但如果只更改数据是额外的字段或更改,只需要从那一点开始考虑,然后批量插入和设置旧数据的ttl是从写操作的角度来看,更好的方法是寻找,查找和更新。使用此方法时,您需要db.document.find_one()而不是db.document.find(),以便只返回当前记录。
  • 另外,最好是逐个文档还是批量对集合进行写入?
    • 批量插入将比顺序插入每个插件更快。