2

mgo ドライバーを使用して MongoDB で動作する Go コードを開発しています。まず、Windows コンピューターで開発しましたが、問題なく動作しました (同じ Windows コンピューターに Mongo DB をインストールした場合)。次に、MongoDB が独自にインストールされている Linux マシンにソース コードをコピーし、そこでビルドしましたが、動作しませんでした。問題は、データベースからオブジェクト「_id」を読み取る方法です。

Windows では、これは通常の 12 バイトの ObjectId であり、次のようになります ( bson.ObjectId.String() を使用して表示):

user Id: ObjectIdHex("533f8c02023ab611d62dbafd") 

しかし、Linux では次のようになります。

user Id: ObjectIdHex("33756e46397a6842337659437139546a51")

もちろん、そのオブジェクト ID を参照などに使用することはできません。長さは 17 バイトです。

興味深い点の 1 つは、Windows では、MongoDB シェルが ObjectId を次のように表示することです。

"_id" : ObjectId("533f8c02023ab611d62dbafd")

Linux では次のようにします。

"_id" : "3unF9zhB3vYCq9TjQ"

文字列"3unF9zhB3vYCq9TjQ"を 1 文字ずつHEX 形式に変換すると、正確に"33756e46397a6842337659437139546a51"になります。したがって、私の理解では、_id を base64 でデコードする代わりに、Linux の mgo ドライバーはそのすべてのバイトを HEX 形式に変換します。

自分で再エンコードする方法を理解できると思いますが、Linuxのmgoドライバーの既知のバグですか、それとも設定などの何かが欠けていますか? プログラムの移植性を維持したいと考えています。

ありがとう。

4

0 に答える 0