2017-04-27 21 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,但這只是基於經驗和我處理的集合。

對於你已經解釋的我不認爲你的第二選擇是有效的或是精通記憶。聽起來你並不需要這樣的計算來簡單地更新數據,而不用擔心覆蓋以前的信息。

相關問題