在 Golang 中使用 mgo 库查找 ID
在提供的代码中,尝试使用 ID 通过 ID 查找文档时会出现一个常见问题Golang 中的 mgo 库。理解此错误的关键在于 MongoDB 中对象 ID 的性质。
理解对象 ID
MongoDB 中的对象 ID 是唯一的 12 字节十六进制值,用于服务作为每个文档的主键。然而,在使用 Golang 时,这些 ID 通常表示为 24 个字符的十六进制字符串。这是因为这些字符串使用每个字节两个十六进制数字对 12 个字节的对象 ID 进行编码。
错误
错误消息“ObjectIDs 必须恰好是 12 个字节” long (got 24)”表示代码正在尝试使用 24 个字符的字符串作为对象 ID。然而,MongoDB 需要一个 12 字节的对象 ID,这不是 24 个字符的字符串所代表的。
解决方案
此问题的解决方案是使用bson.ObjectIdHex() 函数将 24 个字符的十六进制字符串转换为有效的 bson.ObjectId。修改后的代码应如下所示:
<code class="go">err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)</code>
现在,err 变量将正确指示是否找到具有指定 ID 的文档。
转换回来
如果您有 bson.ObjectId 并需要获取其 24 个字符的十六进制表示形式,则可以使用 ObjectId.Hex() 方法。
其他信息
需要注意的是,虽然错误消息表明长度差异为 24 字节,但实际上是 12 字节。这是因为对象 ID 的大小为 12 字节,但错误消息还包含十六进制字符串两边的引号。
以上是如何使用 Golang 中的 mgo 库通过 ID 查找文档?的详细内容。更多信息请关注PHP中文网其他相关文章!