Windows和Linux上mgo驱动程序对ObjectID的不同处理

时间:2014-04-12 07:14:54

标签: mongodb go mgo

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

感谢。

0 个答案:

没有答案