deep-object-diff icon indicating copy to clipboard operation
deep-object-diff copied to clipboard

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

Open soknifedev opened this issue 1 year ago • 1 comments

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(...);
  1. 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.

soknifedev avatar Jun 26 '24 16:06 soknifedev

MongoDB Object ids have to be compared with .equals method. I'd say this library probably doesn't handle this

hugs7 avatar May 11 '25 04:05 hugs7