8

次のように、同一のオブジェクトを保存して取得するとします。

var obj1, obj2;

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

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

コンソールに出力すると、ObjectIds は同じです。両方の ObjectIds で toString を呼び出すと、それらは等しくなります。しかし、ストレートをやって

obj1._id == obj2._id

false を返します。ここで何が起きてるの?

4

1 に答える 1

19

ObjectIds はオブジェクトであるため、標準の == 等価テストは、含まれている ID 値ではなく、参照の等価性を比較しています。それらの値を比較する正しい方法は、ObjectId.equals を次のように使用することです。

obj1.equals(obj2)
于 2012-05-17T00:15:32.097 に答える