編輯清晰度:
mongodb本機驅動程序使用自定義ObjectID類型。即使ObjectIDs相同,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
您可以通過將ObjectIDs轉換爲字符串來比較它們。
each member in team.members
if member.toString() == user._id.toString()
- flag=true;
另一種可能的解決辦法是使用的ObjectId .equal()
方法:如果我存儲對象ID在另一個對象例如x
each member in team.members
if member.equals(user._id)
- flag=true;
來源
2014-09-26 14:11:39
JME
謝謝你解決了這個問題。 – 2014-10-03 07:38:25
爲什麼早期的方案無法正常工作,請理解一個原因。 – 2014-10-03 07:39:12
我假設你使用Mongoose,它使用mongodb本地驅動程序。 mongodb本地驅動程序使用自定義的ObjectID類型。即使ObjectIDs是相同的,「成員」和用戶。_id'指的是兩個不同的對象,因此比較失敗。 (1)'.equals()'方法(例如'member.equals(user._id)'),或者(2)使用'.toString()',我演示了這些自定義ObjectID在我上面的答案中。 – JME 2014-10-03 10:56:01