在MongoDB中更新整个文档(所有字段)的最快方法是什么?

Jankapunkt

假设我要更新整个文档并覆盖_id以外的所有字段。就资源消耗而言,三种方法中哪一种是最好的:

1.将完整的文档设置为更新参数,以便传递所有字段

例:

collection.update({_id: docId}, {$set:updateDoc});

2.计算原始文档和updateDoc之间的增量文档

例:

const originalDoc = collection.findOne(docId);
const deltaDoc = calculateDeltaFct(originalDoc, updateDoc); //get changed fields
collection.update({_id: docId}, {$set:deltaDoc});

3.使用Mongo 3.2。replaceOne函数

例:

collection.replaceOne({_id: docId}, {$set:updateDoc});

我对每种方法的优缺点都有一个假设,但我想确定选择什么以及为什么选择。我不确定如何精确测量它,因此也许有人可以提供帮助。

背景:

我有一个度量标准集合,其中许多文档经常更新,但是要更新的字段变化很大,因此很难为每个字段编写更新方法。相反,我打算只放入所有数据并更新所有字段,因此我仅使用一种用于所有更新的更新方法来保持代码干净。

更新:

在我的设置中,文档结构中没有嵌入任何子文档。我的(dev)设置中也没有分片和复制功能。

此外,我还找到了一些方法(collection.explain),也将用于研究该主题。不过,非常感谢您的帮助或提示。

哪一个

这实际上取决于您在更新之前是否需要旧信息。如果您要覆盖信息,甚至覆盖一个键->值对,那么我将使用updatereplaceOne差异可能在时间上有所不同,具体取决于集合(数据集)的大小。如果这是值得关注的基准差异。就个人而言,我倾向于replaceOne,但这只是基于经验和我所处理的收藏。

对于您所解释的内容,我认为您的第二选择不是高效的,要么是精明的内存。听起来好像不需要这样的计算就可以简单地更新数据,而无需担心覆盖先前的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

对于整个MongoDB集合,将嵌入式文档的字段放在其父级中的最有效方法是什么?

更新 MongoDB 文档数组字段中的所有对象

要在MongoDB上更新文档中的单个字段,最佳方法是什么?在feathersjs中更新或修补钩子

在MongoDB 4.2中更新或替换插入文档的最快方法

计算所有置位最快的方法是什么?

在for循环中获取所有组合的最快方法是什么

在 Javascript 对象中重命名所有属性名称的最快方法是什么?

在Ubuntu中安装所有必需的系统驱动程序的免费,最快的方法是什么?

有条件地更新数据表中数据的最快方法是什么?

检查MongoDB中是否存在具有字段值的文档的最佳实践是什么?

Spring-Data MongoDB更新所有文档字段

如果文档存在PHP,则MongoDB更新所有字段

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

在Firestore中更新文档的createdAt和UpdatedAt日期字段的正确方法是什么?

查询所有文档集合的最快方法

用新字段和新值缓慢(500 /秒)更新MongoDB数据库中的许多文档的最佳方法是什么?

为MongoDB中的所有文档修改字段的时间格式的有效方法

在现有集合(mongodb)的所有文档中添加字段?

MongoDB中的文档是什么?

在集合的所有文档中添加字段-MongoDB

Mongodb从数组对象的所有文档中删除字段?

在Mongodb子文档数组中,有什么方法可以在每个子注释中添加新字段

在python中查找大字符串中所有出现的子字符串的最快方法是什么

查找字符串中包含的所有子字符串的最快方法是什么?

在Base R中为给定名字创建所有唯一姓氏的新列的最快方法是什么

宏以更新Word文档中的所有字段

更新所有记录的子文档数组中的字段

更新 Firestore 中所有文档中的地图字段