Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do my MongooseJS ObjectIds fail the equality test?

Suppose I save and retrieve identical objects as follows

var obj1, obj2;

instance.save(function(err, saved) {
    obj1 = saved;
});

Model.find(obj1._id).run(function(err, retrieved) {
    obj2 = retrieved;
});

When I print to the console, ObjectIds are the same. If I call toString on both ObjectIds they are equal. However doing a straight

obj1._id == obj2._id

Returns false. What is happening here?

like image 492
deltanovember Avatar asked May 16 '12 22:05

deltanovember


1 Answers

ObjectIds are objects so a standard == equality test is comparing the references for equality, not the contained id values. The right way to compare their values is to use ObjectId.equals as:

obj1.equals(obj2)
like image 54
JohnnyHK Avatar answered Oct 23 '22 17:10

JohnnyHK