2011-07-10 10 views
3

ruby​​を使用してmongoDBにオブジェクトを挿入しようとしていて、C#とNoRMドライバを使用して取得しようとしています。MongoDb:RubyでUUIDを挿入した後、C#でGUIDに変換できない

私はC#オブジェクト内でGuidを使いたいまで、すべてがうまく進んでいるようでした。

私は(このブログの記事http://blog.mikeobrien.net/2010/08/working-with-guids-in-mongodb-with-ruby.htmlにより示唆されるように)モンゴに挿入する前に、RubyでUUIDを設定するには、次のコードを使用:

BSON::Binary.new("d7b73eed91c549bfaa9ea3973aa97c7b", BSON::Binary::SUBTYPE_UUID) 

C#でGUIDの例外「バイト配列をこのオブジェクトを取得する場合正確に16バイトの長さでなければなりません。投げられた。

管理シェルを使用して、オブジェクトの内容を検査しました。 GUIDプロパティがしかし

BinData(3,"ZDdiNzNlZWQ5MWM1NDliZmFhOWVhMzk3M2FhOTdjN2I=") 

に設定されていた私はC#を使用して、同じGUIDを挿入した場合、GUIDプロパティが

BinData(3,"7T6318WRv0mqnqOXOql8ew==") 

に私が間違ってやっている任意のアイデアを設定したのか?

答えて

2

ブログの例が間違っていると思います。

guidpack=guid.scan(/../).map {|e| e.to_i(16)}.pack('c*') 

そして、Base64でエンコードされたサイズを確認:あなたは、GUIDはhexstringになりたい私はこれを試してみました「の\ XD7」(1バイト)ではない「D7」

で始まるすなわちのようにそれは私には見えます、それは今見えます。

Base64.encode64 BSON::Binary.new(guidpack, BSON::Binary::SUBTYPE_UUID).to_s 
=> "17c+7ZHFSb+qnqOXOql8ew==\n" 

しかし、結果は正確にあなたが上記のC#を使用するときに何が起こるかと一致しないので、これは全く正しい答えではないかもしれません。 (私はモンゴーなどでテストしていません。ちょうどbsonの宝石なので、申し訳ありません)

+0

ありがとうございました。最初は私たちが逆順になっている最初の3つのバイトグループ(c#の "ed3eb7d7-c591-bf49"、ルビーの "d7b73eed-91c5-49bf"しかし、どちらも同じ値( "17c + 7ZHFSb + qnqOXOql8ew ==")でMongoに保存されました。この質問につまずいた後http://stackoverflow.com/questions/5745512/how-to-read-a-net-guid-into-a-java-uuid私はC#が小さなエンドエンディアンとしてguidを格納することを認識しましたが、エンディアン。 – Castrohenge

関連する問題