2

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

谢谢。

4

0 回答 0