2016-08-18 24 views
1

我正在使用帶有NodeJS的Mongoose驅動程序。我有一個非常簡單的更新調用其目的是會議的外部源同步到我的數據庫:如何確定在MongoDB更新期間是否實際更改了文檔

collection.update({ meeting_id: doc.meeting_id}, newDoc, {upsert:true}) 

返回的對象,判斷是否發生了更新或插入。這工作完美。我的問題是,我必須確定是否發生了實際變化。當你用自己更新文檔時,MongoDB的處理方式與所有字段更改完全相同。

所以我的問題是:有沒有什麼好的方法來判斷實際上是否有變化?我可以搜索每個文檔,然後手動比較每個字段,但是這看起來像一個糟糕的(和緩慢的)解決方案。

回答

0

您可以使用findAndModify,它將返回更新結果,與更新相比,它將返回更新記錄的數量。

collection.findAndModify(
    { meeting_id: doc.meeting_id}, 
    newDoc, 
    { new: true }, 
    function (err, documents) { 
     res.send({ error: err, affected: documents }); 

    } 
); 
+0

你如何告訴我們,如果newDoc不等於舊的文件?這不能解決我的問題。 – awimley

+0

你可以使用JSON.stringify(oldDoc)=== JSON.stringify(newDoc) – owaishanif786

+0

我正在尋找一個解決方案,比找到舊的文檔和比較字段更好(更快)。正如我的問題所述,我正在同步兩個獨立的數據源,所以oldDoc不可用。 – awimley

相關問題