2016-08-18 16 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

古い文書を見つけてフィールドを比較するよりも優れた(より速い)ソリューションを探しています。私の質問で述べたように、私は2つの独立したデータソースを同期しているので、oldDocは利用できません。 – awimley

関連する問題