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ドライバーの既知のバグですか、それとも設定などの何かが欠けていますか? プログラムの移植性を維持したいと考えています。
ありがとう。