2017-04-27 43 views
2

比方说,我想更新整个文档并覆盖除_id之外的所有字段。三种方法什么是最好的资源消耗方面:在MongoDB中更新整个文档(所有字段)的最快方法是什么?

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 function

例子:

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

我的优点和每个方法的利弊的假设,但我想,以确保该选什么,以及为什么。我不确定如何精确测量,所以也许有人可以提供帮助。

背景:

我有一个指标集合,其中许多文件经常更新,但要更新的领域有很大的差异,所以很难写出对每个场更新方法。相反,我打算只是抛出所有数据并更新所有字段,因此我只保留一个更新方法以清除所有更新的代码。

更新:

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

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

回答

1

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

对于你已经解释的我不认为你的第二选择是有效的或是精通记忆。听起来你并不需要这样的计算来简单地更新数据,而不用担心覆盖以前的信息。

相关问题