mattphillips / deep-object-diff

Deep diffs two objects, including nested structures of arrays and objects, and returns the difference. ❄️
https://www.npmjs.com/package/deep-object-diff
MIT License
1.05k stars 89 forks source link

BUG: no difference detected when comparting two mongoose documents (ObjectId). #103

Open soknifedev opened 3 months ago

soknifedev commented 3 months ago

When comparing two mongoose models whose _id or discriminated docs arent equal, the library returns no differences.

Steps to reproduce: (pseudo code)

1.Find a document

const original = await exampe.findOne(...);
// original.referencedDoc has value = new ObjectId("667c39c3ef67892912314323");
  1. Perform an update and find document again

    await original.update({ referencedDoc: new ObjectId("64c7cda1db76ef25cfc5f901"); })
    const latestDocument = await exampe.findOne(...);
  2. Compare differences between original and latestDocument.

const diffs = diff(original, latestDocument);

console.log('diff', diffs) 

Output: (prints no differences) {}

Expected output: (should print the difference)


{
 referencedDoc: new ObjectId("64c7cda1db76ef25cfc5f901");
}

This bug may be fixed by changing the isEmpty utility function:

const isEmpty = o => Object.keys(o).length === 0;

It is returning zero because "ObjectId" is a class without "keys", but it can be readed as a string perfectly.