2011-04-13 5 views

답변

10

_id 값과 BinData 인스턴스를 비교해야합니다 (문자열과 비교하지 않음). 불행히도 BinData 생성자는 16 진수 문자열 대신 Base64 문자열을 사용합니다.

GUID 값 끝에 16 진수 두 자리가 누락되어 있으므로이 예제에서는 "00"이라고 가정합니다. 다음 값은 동일합니다

hex: "E3E45566-AFE4-A564-7876-AEFF6745FF00" (ignoring dashes)

base64: "ZlXk4+SvZKV4dq7/Z0X/AA=="

그래서 쿼리가 있어야한다 :

>db.person.find({_id : new BinData(3, "ZlXk4+SvZKV4dq7/Z0X/AA==")})

, 어떤 드라이버가 데이터를 만드는 데 사용하지 않으면 내가 이진 하위 유형이 올바르게 3으로 설정되어 있다고 가정하고 ?

+2

오 사랑하는 파이썬 인코딩

  • PYUUID에 대한
  • CSUUID, 그게 아니라 그것은 사용자 친화적 인 매우입니다! MSSQL에서 MongoDB를 수화하고, 기존 guids를 키로 사용하고, 스팟 쿼리를 실행하고 있습니다. 난 그냥 수동으로 16 진수 guids base64로 변환하는 쉬운 방법을 알아낼 것 같아요. 당신의 도움을 주셔서 감사합니다! – Journeyman

  • +0

    알아요 ... 16 진수 문자열을 Base64 문자열로 변환하는 Javascript 함수를 찾으려고했지만 언어에 내장 된 문자열이없는 것 같습니다. 사용자가 작성한 기능을 검색 할 수 있습니다. 또는 자바 대신 C#으로 가져 오기 프로그램을 작성할 수 있습니까? –

    +3

    guid를 base64 문자열로 변환하려면 :'Convert.ToBase64String (Guid.NewGuid(). ToByteArray())' –

    15

    쉽게 사용할 수 있습니다

    .find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")}) 
    
    +2

    CSUUID는 mongo에서 "표준"이 아닙니다. 쉘을 시작할 때 csharpdriver에서 파일을 가져와 포함시켜야합니다. 자세한 내용은 http://stackoverflow.com/a/8252047/111625를 참조하십시오. –

    4

    당신과 같이 쿼리 앞에 다음 JS 기능을 사용할 수

    function LUUID(uuid) { 
        var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters 
        return new UUID(hex); //creates new UUID 
    } 
    
    db.person.find({"_id" : LUUID("E3E45566-AFE4-A564-7876-AEFF6745FF"}); 
    

    당신의 .js 파일에서 함수를 저장하고로드 할 수 또는 쿼리를 만들기 전에 열어 결과에서 값을 복사하는 경우 함수의 이름을 다음과 같이 바꿔야합니다.

    • L 자바 인코딩 .NET 인코딩
    • NUUID에 대한 기존 UUID
    • JUUID에 대한 UUID는 C#을 인코딩
    관련 문제