2013-01-05 38 views
0

我無法比較mongoose ObjectId或它們的字符串值。下劃線:比較貓鼬對象失敗

我有兩個陣列,第一個是:

a = [ 
"50dfb24123c43a501400000e", 
"50d1bda330eb531c1400000d", 
"50d1bdcf30eb531c1400000f", 
"50d1beac30eb531c14000012", 
"50dfb26223c43a501400000f" 
] 

,第二個是:

b = [ 
"50dfb26223c43a501400000f" 
] 

運行_.intersection(a,b)給我一個空數組[]而不是在b值。

a和b的值是_.pluck,由貓鼬模型返回的結果編輯。 我已經嘗試將每個數組值轉換爲字符串,並且仍然得到空數組的相同結果。

我搜索了類似的問題,但我找到的解決方案沒有幫助(即轉換爲字符串)。

有什麼我失蹤?我知道問題是Mongoose ObjectIds,因爲如果我將上面粘貼的原始數組相交,我會得到正確的結果。

感謝

回答

1

您不能在這種情況下,與ObjectId小號陣列使用_.intersection因爲intersection使用簡單的引用相等的元素比較,而不是比較它們的內容。要比較兩個ObjectId的平等性,您需要使用ObjectId.equals方法。

所以最簡單的解決方案將數組轉換爲字符串,以便intersection將工作。我知道你說過你嘗試過,但你可能在某個地方發現了一個bug,因爲它確實有效。

+0

我最終得到的字符串轉換權。我現在也使用ObjectId(var),它看起來更簡單並且正在工作。謝謝 –

1

您可以使用_.isEqual(object,other)來測試2個mongoose ObjectID是否具有相同的內容。

例如,

var ret=[]; 
_.each(b,function(x){ 
    ret.push(_.filter(a,function(y){ 
     return _.isEqual(x,y); 
    })) 
}) 

現在,你應該得到RET包含 「50dfb26223c43a501400000f」 貓鼬的ObjectID的數據類型。

3

在lodash4,你現在可以這樣做:

_.intersectionWith(a, b, _.isEqual)