我使用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"

如果我以十六进制格式逐字符转换字符串 "3unF9zhB3vYCq9TjQ" ,它将完全是 "33756e46397a6842337659437139546a51" . 因此,我的理解是,Linux上的mgo驱动程序不是base64解码_id,而是将其中的每个字节转换为HEX格式 .

我想我可以弄清楚自己如何重新编码,但它是Linux上mgo驱动程序中的已知错误,还是我在这里遗漏了一些东西,比如某些配置等等?我想让我的程序可移植 .

谢谢 .