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

标签 javascript mongodb

假设我想更新整个文档并覆盖除 _id 之外的所有字段。从资源消耗的 Angular 来看,这三种方法中哪种方法最好:

<强>1。将完整的文档设置为更新参数,所以所有字段都被传递

例子:

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

<强>2。计算原始文档和更新文档之间的增量文档

例子:

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

<强>3。使用 Mongo 3.2. replaceOne function

例子:

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

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

背景:

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

更新:

在我的设置中,文档结构中没有嵌入子文档。我的(开发)设置中也没有分片和复制。

此外,我还找到了一些方法 ( collection.explain ),我也将使用它来研究该主题。尽管如此,非常感谢任何帮助或提示。

最佳答案

这真的取决于您是否需要更新前的旧信息。如果您要覆盖信息,甚至覆盖一个键 -> 值对,那么我会使用 updatereplaceOne。时间上的差异可能取决于您的集合(数据集)的大小。如果这是值得关注的基准差异。我个人倾向于 replaceOne,但这只是基于经验和我处理的集合。

对于您所解释的内容,我认为您的第二个选择既不高效也不精通内存。听起来您不需要这样的计算来简单地更新数据,而不必担心覆盖以前的信息。

关于javascript - 在 MongoDB 中更新整个文档(所有字段)的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43652525/

相关文章:

javascript - Bootstrap 切换选项卡无法正常工作

javascript - 每次加载页面后运行 JavaScript

javascript - React-native Facebook sdk 登录按钮不工作

python - 如何将数据从 mongodb 导入到 pandas?

mongodb - MongoCollection.find() 是否搜索两次?

node.js - MongoDB全文搜索和按相关性排序的多个单词

javascript - 比较工作表名称的 Google 脚本在应该返回 True 时返回 False

javascript - 使用 RegEx 清除 HTML 中的空格

node.js - Mongoose:在嵌套子文档中更新/插入

c# - Azure:无法执行套接字上的操作,因为系统缺乏足够的缓冲区空间或队列已满