我使用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驱动程序中的一个已知错误,还是我在这里遗漏了一些东西,比如一些配置等等?我想保持我的程序可移植。
感谢。