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

관련 문제