我使用 mgo 驱动程序开发 Go 代码以与 MongoDB 一起使用。首先我在 Windows 计算机上开发它,它工作得很好(在同一台 Windows 计算机上安装 Mongo DB)。然后我将源代码复制到一台装有 MongoDB 的 Linux 机器上,在那里构建它,但它不起作用。问题是它如何从数据库中读取对象“_id”。
在 Windows 上,它是普通的 12 字节 ObjectId,类似于此(使用 bson.ObjectId.String() 显示):
user Id: ObjectIdHex("533f8c02023ab611d62dbafd")
但在 Linux 上是这样的:
user Id: ObjectIdHex("33756e46397a6842337659437139546a51")
当然,我不能将该对象 ID 用于引用等。它有 17 个字节长。
一件有趣的事情是,在 Windows 上,MongoDB shell 显示 ObjectId 如下:
"_id" : ObjectId("533f8c02023ab611d62dbafd")
在这样的 Linux 上:
"_id" : "3unF9zhB3vYCq9TjQ"
如果我以 HEX 格式逐个字符地转换字符串"3unF9zhB3vYCq9TjQ",它将完全是"33756e46397a6842337659437139546a51"。所以,我的理解是,Linux 上的 mgo 驱动程序不是对 _id 进行 base64 解码,而是将它的每个字节转换为 HEX 格式。
我想我可以弄清楚如何自己重新编码,但它是Linux上mgo驱动程序中的一个已知错误,还是我在这里遗漏了一些东西,比如一些配置等?我想保持我的程序可移植。
谢谢。