2016-08-22 3 views
0

나는 무엇이 누락 되었습니까? 내가 3 개체를 비교하고있다 :몽구스의 이상한 비교 동작

req.user._id 전에

userID는 모델 검색에서 당겨졌다 것은 동일한 ID에 사용자 ID를

docs[i].toWho 점을 들고 세션 변수입니다.

나는 그것들을 비교할 때 위음성을 낸다. 왜?

처음에 나는 docs[i].toWho이 몽구스 objectID이고 다른 것들은 문자열이기 때문에 비교가 실패했다고 생각 했으므로 몽구스 objectID로 캐스팅했습니다.

그래도 결과가 실패합니다. 참조 출력 :

57a8d7f189d00bfc1917187e 57a8d7f189d00bfc1917187e 57a8d7f189d00bfc1917187e 
false false true 
false false true 

코드 :

console.log(docs[i].toWho,req.user._id,userID) 
console.log(docs[i].toWho==req.user._id,docs[i].toWho==userID,req.user._id==userID) 
console.log(docs[i].toWho==mongoose.Types.ObjectId(req.user._id),docs[i].toWho==mongoose.Types.ObjectId(userID),mongoose.Types.ObjectId(req.user._id)==mongoose.Types.ObjectId(userID)) 

편집 : 업데이트 쿼리를 디버깅하려고 할 때이 모든 것은 유래

.

Notification.update({ 
         toWho: req.user_id 
        }, { 
         $set: { seen: true } 
        }, { 
         multi: true 
        }, function (err,count) {}); 

그리고 어떤 기록도 업데이트되지 않았습니다. 모든 기록은 여전히 ​​seen=false

편집을 보이고있다 2

내가 내 코드에 오타했다 밝혀졌습니다. 대신

req.user._id

의 req.user_id I 사용자는 실수 때문에 그것은 진짜 대답이 아니다 당신에게 토마스

+1

'ObjectID'를 문자열에 캐스팅해야합니다. 다른 방법은 사용할 수 없습니다. 개체는 동일한 참조를 가리킬 때만 동일합니다. – str

+0

그것은 일했다! 그러나 슬프게도 그것은 내 원인을 돕지 않습니다. 내 편집을 참조하십시오. –

+0

몽구스 (mongo)는 쿼리에서 ObjectId 또는 문자열을 허용합니다. 'multi : true'는 쿼리에 고유 한 id를 넣으면 쓸모가 없습니다 ('{}'는 비워 둡니다). 모든 레코드를 업데이트하려면 쿼리를'{}'로 비우십시오. –

답변

0

감사드립니다.

문자열을 쿼리에 사용할 수 없으며 mongoDB (@str에 쓰임)에서 문자열을 캐스팅해야합니다.

실수는 타이핑 실수 (req.user_id =>req.user._id)

그러나 ObjectId가를 비교, 그것은 문자열로 변환하고 ==과 비교하기 쉽게했다.

+0

아직 가치가 있습니다! –

+0

원본 프로젝트의 대량 구식 포크에 연결했습니다. 실제 문서는 다음에서 찾을 수 있습니다. http://mongodb.github.io/node-mongodb-native/ – str

+0

Ok ok, Thx @str;) –