向 MongoDB 集合中的所有文档添加许多字段的首选方法是什么?
What is the preferred way to add many fields to all documents in a MongoDB collection?
我有一个 Python 应用程序,它迭代地遍历 MongoDB (3.0.2) 集合中的每个文档(通常在 10K 到 1M 文档之间),并添加新字段(可能doubling/tripling文档中的字段数)。
我最初的想法是我会使用 upsert 整个修改后的文档(使用 pyMongo)- 现在我质疑:
- 鉴于修改后的文档明显更大,我应该只插入新字段,还是只替换文档?
- 此外,是逐个文档写入集合还是批量写入集合更好?
这实际上是一个很好的问题,可以根据您管理数据的方式以几种不同的方式解决。
如果您要更新附加字段,这是否意味着您的数据会在稍后的时间点附加附加字段,唯一的变化是添加了附加字段?如果是这样,你可以 set the ttl on your documents so that the old ones drop off over time。请记住,如果您这样做,您将需要设置一个索引,通过降序对结果进行排序 _id 以便在较旧的之前选择最新添加的内容。
这样做的好处是您不断地写入数据,而不是寻找和更新数据,因此速度更快。
关于更新插入与批量插入。批量插入总是比更新插入快,因为批量更新 requires you to find the original document first。
- 考虑到修改后的文档明显变大了,我应该只插入新字段,还是只替换文档?
- 您确实需要充分了解您的数据以确定什么是最好的,但如果仅对数据的更改是其他字段或仅需要从那时起考虑的更改,那么批量插入并在您的旧版本上设置 ttl从写操作的角度来看,data 是比查找、查找和更新更好的方法。使用此方法时,您需要
db.document.find_one()
而不是 db.document.find()
,以便仅返回您的当前记录。
- 此外,逐个文档或批量写入集合更好吗?
- 批量插入比按顺序插入一个更快。
我有一个 Python 应用程序,它迭代地遍历 MongoDB (3.0.2) 集合中的每个文档(通常在 10K 到 1M 文档之间),并添加新字段(可能doubling/tripling文档中的字段数)。
我最初的想法是我会使用 upsert 整个修改后的文档(使用 pyMongo)- 现在我质疑:
- 鉴于修改后的文档明显更大,我应该只插入新字段,还是只替换文档?
- 此外,是逐个文档写入集合还是批量写入集合更好?
这实际上是一个很好的问题,可以根据您管理数据的方式以几种不同的方式解决。
如果您要更新附加字段,这是否意味着您的数据会在稍后的时间点附加附加字段,唯一的变化是添加了附加字段?如果是这样,你可以 set the ttl on your documents so that the old ones drop off over time。请记住,如果您这样做,您将需要设置一个索引,通过降序对结果进行排序 _id 以便在较旧的之前选择最新添加的内容。
这样做的好处是您不断地写入数据,而不是寻找和更新数据,因此速度更快。
关于更新插入与批量插入。批量插入总是比更新插入快,因为批量更新 requires you to find the original document first。
- 考虑到修改后的文档明显变大了,我应该只插入新字段,还是只替换文档?
- 您确实需要充分了解您的数据以确定什么是最好的,但如果仅对数据的更改是其他字段或仅需要从那时起考虑的更改,那么批量插入并在您的旧版本上设置 ttl从写操作的角度来看,data 是比查找、查找和更新更好的方法。使用此方法时,您需要
db.document.find_one()
而不是db.document.find()
,以便仅返回您的当前记录。
- 您确实需要充分了解您的数据以确定什么是最好的,但如果仅对数据的更改是其他字段或仅需要从那时起考虑的更改,那么批量插入并在您的旧版本上设置 ttl从写操作的角度来看,data 是比查找、查找和更新更好的方法。使用此方法时,您需要
- 此外,逐个文档或批量写入集合更好吗?
- 批量插入比按顺序插入一个更快。