복붙노트

[MONGODB] 몽구스 _id 문자열 비교

MONGODB

몽구스 _id 문자열 비교

나는이 같은 객체로 일부 데이터 및 스틱을 끌어 Node.js를 응용 프로그램이 있습니다 :

var results = new Object();

User.findOne(query, function(err, u) {
    results.userId = u._id;
}

내가 할 때 그 저장된 ID를 기반으로하는 경우 / AN, 비교 사실이 결코 :

if (results.userId == AnotherMongoDocument._id) {
    console.log('This is never true');
}

나는이 두 아이디의의 CONSOLE.LOG을 수행 할 때, 그들은 정확히 일치 :

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

나는이 데이터 유형 문제의 일종 같은데,하지만 난하지 않도록 진실되고과 (구글 일명) 내 아웃소싱 뇌에 도움을 수 없었다 위의 비교가 발생합니다 데이터 형식에 results.userId 변환하는 방법입니다.

해결법

  1. ==============================

    1.몽구스는 사용자 정의 OBJECTID 유형을 사용하는 MongoDB의 네이티브 드라이버를 사용합니다. 당신은 .equals () 메소드하며 Object를 비교할 수 있습니다. 귀하의 예제와 함께, results.userId.equals (AnotherMongoDocument._id). 당신이 OBJECTID JSON의 형식의 캐릭터 라인 버전 또는 쿠키를 저장하고자하는 경우 OBJECTID 유형은 또한 toString () 메소드가 있습니다.

    몽구스는 사용자 정의 OBJECTID 유형을 사용하는 MongoDB의 네이티브 드라이버를 사용합니다. 당신은 .equals () 메소드하며 Object를 비교할 수 있습니다. 귀하의 예제와 함께, results.userId.equals (AnotherMongoDocument._id). 당신이 OBJECTID JSON의 형식의 캐릭터 라인 버전 또는 쿠키를 저장하고자하는 경우 OBJECTID 유형은 또한 toString () 메소드가 있습니다.

    당신이 OBJECTID = 사용하는 경우 ( "MongoDB를")를 필요로한다. OBJECTID합니다 (MongoDB의 네이티브 라이브러리가 필요합니다) results.userId이 results.userId instanceof를 OBJECTID있는 유효한 식별자인지 확인할 수 있습니다.

    기타.

  2. ==============================

    2.당신은 당신이 자신의 참조를 비교하는 ==과 비교 그렇다면하며 Object는 개체입니다. 당신이 그들의 값을 비교하려면 당신은 ObjectID.equals 방법을 사용합니다 :

    당신은 당신이 자신의 참조를 비교하는 ==과 비교 그렇다면하며 Object는 개체입니다. 당신이 그들의 값을 비교하려면 당신은 ObjectID.equals 방법을 사용합니다 :

    if (results.userId.equals(AnotherMongoDocument._id)) {
        ...
    }
    
  3. ==============================

    3.문자열 오브젝트 ID를 변환하는 일을 할 것입니다 (toString () 메소드를 사용).

    문자열 오브젝트 ID를 변환하는 일을 할 것입니다 (toString () 메소드를 사용).

  4. ==============================

    4.허용 대답은 정말 당신이 당신의 코드를 수행 할 수있는 작업을 제한 할 수 있습니다. 예를 들어, equals 메소드를 사용하여 객체 ID의 배열을 검색 할 수 없습니다. 항상 문자열로 캐스팅하고 키를 비교하는 대신 더 의미가있다.

    허용 대답은 정말 당신이 당신의 코드를 수행 할 수있는 작업을 제한 할 수 있습니다. 예를 들어, equals 메소드를 사용하여 객체 ID의 배열을 검색 할 수 없습니다. 항상 문자열로 캐스팅하고 키를 비교하는 대신 더 의미가있다.

    특정 ID에 대한 참조의 배열 내에서 확인할 같이 IndexOf ()를 사용해야 할 경우 다음 경우의 예 대답입니다. 쿼리는 실행중인 쿼리 가정, someModel 당신이 찾고있는 ID에 대한 몽고 모델 가정, 그리고 마지막으로 results.idList은 당신이 당신의 개체 ID 찾고있는 분야입니다 가정합니다.

    query.exec(function(err,results){
       var array = results.idList.map(function(v){ return v.toString(); });
       var exists = array.indexOf(someModel._id.toString()) >= 0;
       console.log(exists);
    });
    
  5. ==============================

    5.위의에 따르면, 내가 문제를 해결하기 위해 세 가지 방법을 발견했다.

    위의에 따르면, 내가 문제를 해결하기 위해 세 가지 방법을 발견했다.

  6. ==============================

    6.나는 정확히 같은 문제에 직면하고 난 단순히 다음과 같은 JSON.stringify ()의 도움으로 문제를 해결 -

    나는 정확히 같은 문제에 직면하고 난 단순히 다음과 같은 JSON.stringify ()의 도움으로 문제를 해결 -

    if (JSON.stringify(results.userId) === JSON.stringify(AnotherMongoDocument._id)) {
            console.log('This is never true');
    }
    
  7. from https://stackoverflow.com/questions/11637353/comparing-mongoose-id-and-strings by cc-by-sa and MIT license