为清晰而编辑:
mongodb-native 驱动使用自定义的 ObjectID 类型。即使 ObjectID 相同,member
仍然user._id
会引用两个不同的对象,因此比较失败。
这是我正在谈论的一个简化示例。在下面的示例中,我有一个TestObject
(模拟 mongo ObjectID
)的构造函数。我用相同的参数实例化两个对象(即x1
和)。x2
虽然x1
和x2
是同一个对象的实例,并且两者都是使用相同的参数创建的,但它们实际上只是具有相同数据/有效负载的两个不同对象。因此,第一次直接比较失败,因为它们实际上并不相同。为了进一步模拟,我添加了一个原型方法.equals()
,它确保两个对象都是 TestObject 的实例并且有效负载是相同的。
function TestObject(data) {
this.payload = data;
}
TestObject.prototype.equals = function(anotherObject) {
return (anotherObject instanceof TestObject) && (this.payload === anotherObject.payload);
};
var x1 = new TestObject(1), x2 = new TestObject(1);
console.log(x1 == x2); // <-- false
console.log(x1.equals(x2)); // <-- true
您可以通过将 ObjectID 转换为字符串来比较它们。
each member in team.members
if member.toString() == user._id.toString()
- flag=true;
另一种可能的解决方案是使用 ObjectId.equal()
方法:
each member in team.members
if member.equals(user._id)
- flag=true;