복붙노트

[MONGODB] 쉽게에 가이드를 저장하는 실제 GUID를 검색하는 효율적인 방법이 무엇인지 문서의 아이디에 대한 MongoDB를하고 가이드와 함께?

MONGODB

쉽게에 가이드를 저장하는 실제 GUID를 검색하는 효율적인 방법이 무엇인지 문서의 아이디에 대한 MongoDB를하고 가이드와 함께?

나는 MongoDB를 버전 2.06 및 10Gen에서 제공하는 C #을 드라이버의 버전 (1.5)을 실행하고 있습니다.

내 각 엔티티는 같은 Id 속성 설정을 가지고 ...

 [BsonId(IdGenerator = typeof(GuidGenerator))]
 public Guid Id { get; set; }

ID 필드는 바이너리로 저장 - 3 : UuidLegacy. 그것이 내가이 ID에 대한 다음과 같은 자바 스크립트 객체를 반환하는 개체에 ToJson ()를 호출 할 때 저장되는 방법 때문에.

_id : Object
 $binary: "some values here"
 $type: "03"

데이터가 바이너리 = 3로 저장되고 있기 때문에 이것은 분명히 : UuidLegacy. 이 메이크업 감각.

내 자바 스크립트 코드에 실제 GUID를 사용하고 싶습니다. 내 아이디 속성은 다음과 같이 만든 경우는 MongoDB를 얼마나 효율적으로 될 것이라고?

 [BsonId(IdGenerator = typeof(GuidGenerator)),MongoDB.Bson.Serialization.Attributes.BsonRepresentation(BsonType.String)]
public Guid Id { get; set; }

이 차종은 문자열로 내 아이디를 저장하여 MongoDB. 그러나 이것은 정말 어떻게 효율적이다? 내 ID에 대한 바이너리 형식이 더 나은 것 같은데요,하지만 난 정말 GUID를해야합니다.

내 JSON의 가이 드 I 필요에 uuidLegacy : 3 - 어떻게 바이너리에서 갈 수 있나요?

나는 다른 생각이 난 그냥 나에게 전송되는 $ 이진 값을 사용할 수있을 것 같아요? 내 쿼리 문자열의 일부로서 조회 등을 수행하기 위해 ID를 사용.

감사,

해결법

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

    1.GUID를 작업하는 것은 대부분 다른 바이트 순서를 사용하여 GUID를 저장하는 다른 드라이버 결과 역사적 사고 또한 몽고 쉘에서 이진 표현과 협력하는 방법에 관한 몇 가지 함정이있다.

    GUID를 작업하는 것은 대부분 다른 바이트 순서를 사용하여 GUID를 저장하는 다른 드라이버 결과 역사적 사고 또한 몽고 쉘에서 이진 표현과 협력하는 방법에 관한 몇 가지 함정이있다.

    나는 문제를 설명하기 위해 다음 코드를 사용 :

    var document = new BsonDocument { { "_id", Guid.NewGuid() }, { "x", 1 } };
    collection.Drop();
    collection.Insert(document);
    Console.WriteLine("Inserted GUID: {0}", document["_id"].AsGuid);
    

    이는 내가 출력 실행했을 때 :

    Inserted GUID: 2d25b9c6-6d30-4441-a360-47e7804c62be
    

    나는 몽고이를 표시 할 때 내가 얻을 쉘 :

    > var doc = db.test.findOne()
    > doc
    { "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
    > doc._id.hex()
    c6b9252d306d4144a36047e7804c62be
    >
    

    진수로 표시하는 경우에도 바이트 순서가 원래 GUID 일치하지 않음을 알 수 있습니다. 그게 내가 얘기 한 역사적 사고입니다. 모든 바이트, 그들은 단지 Guid.ToByteArray의 마이크로 소프트의 구현에 특별한 주문 덕분에 ()에 거기있다.

    도움말을 당신은 당신이 mongo.exe가 저장되어있는 디렉토리에 헬퍼 함수의 다음 파일을 복사 할 수 쉘 몽고의 GUID를 작동 :

    https://github.com/rstam/mongo-csharp-driver/blob/master/uuidhelpers.js

    이 파일은 당신이 도움이 될 수있는 상단에 몇 가지 간단한 문서 주석이 있습니다. 몽고에서 사용할 수있는이 기능은 당신이 시동시이 파일을 읽을 수있는 몽고 쉘을 알려줄 필요가 쉘 확인하십시오. 다음 샘플 세션을 참조하십시오 :

    C:\mongodb\mongodb-win32-x86_64-2.0.6\bin>mongo --shell uuidhelpers.js
    MongoDB shell version: 2.0.6
    connecting to: test
    type "help" for help
    > var doc = db.test.findOne()
    > doc
    { "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
    > doc._id.hex()
    c6b9252d306d4144a36047e7804c62be
    > doc._id.toCSUUID()
    CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")
    >
    

    또한 GUID의 쿼리에 도우미 기능의 또 다른를 사용할 수 있습니다 :

    > db.test.find({_id : CSUUID("2d25b9c6-6d30-4441-a360-47e7804c62be")})
    { "_id" : BinData(3,"xrklLTBtQUSjYEfngExivg=="), "x" : 1 }
    >
    

    지금까지 할 일은 전례없는 그리고 그것은 확실히 볼과 몽고의 데이터를 쿼리 쉽게 쉘하게하고 모든 서로 다른 바이트 순서로 문제를 방지하는 문자열로 GUID를 저장있다. 유일한 단점은 더 많은 공간을 (대략 이중) 사용한다는 것입니다.

  2. from https://stackoverflow.com/questions/11355792/with-mongodb-and-guids-for-the-id-of-documents-what-is-efficient-way-to-store-th by cc-by-sa and MIT license