2013-01-05 7 views
0

몽구스 ObjectId 또는 해당 String 값을 비교하는 데 문제가 있습니다.밑줄 : 몽구스 objectIds 비교 실패

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

두 번째는 다음과 같습니다 :

내가 두 배열을 가지고, 첫 번째는

b = [ 
"50dfb26223c43a501400000f" 
] 

_.intersection(a,b) 나에게 하늘의 배열 [] 대신 b의 값을 제공합니다 실행.

몽고즈 모델에 의해 반환 된 결과에서 a와 b의 값은 _.pluck입니다. 각 배열 값을 문자열로 변환하려고 시도했지만 여전히 빈 배열과 동일한 결과를 얻습니다.

비슷한 질문을 검색했지만 찾은 해결책이 도움이되지 않습니다 (문자열로 변환).

누락 된 것이 있습니까? 나는 문제가 몽구스 ObjectIds라는 것을 알고 있습니다. 왜냐하면 위에 붙여진대로 원시 배열을 교차 시키면 정확한 결과를 얻을 수 있기 때문입니다. intersection 간단한 참조 평등을 사용하기 때문에

감사

답변

1

당신은 오히려 그 내용을 비교보다, 요소를 비교하기 위해이 경우 ObjectId의 배열과 _.intersection을 사용할 수 없습니다. 2 개의 ObjectId을 비교하려면 ObjectId.equals 메서드를 사용해야합니다.

그래서 가장 간단한 해결책은 intersection이 작동하도록 배열을 문자열로 변환하는 것입니다. 나는 당신이 그것을 시도했다는 것을 압니다 만, 어딘가에 버그가 있었을 것입니다.

+0

나는 문자열 변환 권리를 점점 끝났다. 나는 또한 ObjectId (var)를 사용하는데, 이것은 더 단순 해 보이고 작동 중이다. 감사 –

1

2 개의 몽구스 ObjectID에 동일한 내용이 있는지 테스트하려면 _.isEqual (object, other)를 사용할 수 있습니다. 예를 들어

,

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

지금, 당신은 RET는 몽구스의 ObjectId가 데이터 유형으로 "50dfb26223c43a501400000f"를 포함 얻어야한다.

3

lodash4, 당신은 지금이 작업을 수행 할 수 있습니다

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