gpt4 book ai didi

go - 为什么使用golang的mgo库找不到id?

转载 作者:IT王子 更新时间:2023-10-29 01:18:08 24 4
gpt4 key购买 nike

我在 golang 中使用 mgo 库进行 mongo 操作,这是我的代码:

session.SetMode(mgo.Monotonic, true)
coll := session.DB("aaaw_web").C("cron_emails")
var result Result
fmt.Printf("%v", message.ID)
err = coll.FindId(bson.ObjectId(message.ID)).One(&result)
fmt.Printf("%v", result)
fmt.Println(err)

我得到这个输出:

595f2c1a6edcba0619073263
{ObjectIdHex("") 0 0 0 0 { 0 false 0 } 0 0 0 0 0 0 0}
ObjectIDs must be exactly 12 bytes long (got 24)
not found

但我检查过,文件存在于 mongo 中,但没有得到任何结果,不知道我错过了什么......

最佳答案

正如错误消息提示的那样,一个对象 ID 正好是 12 个字节长(12 个字节的数据)。您看到打印的 24 个字符长的 ID 是 ID 的 12 个字节的十六进制表示(1 个字节 => 2 个十六进制数字)。

使用 bson.ObjectIdHex()函数获取 bson.ObjectId 的值如果十六进制表示可用。

err = coll.FindId(bson.ObjectIdHex(message.ID)).One(&result)

对于反向,您可以使用 ObjectId.Hex()方法,详见此答案:Obtain ObjectIdHex value from mgo query

您在代码中所做的很简单 type conversion (假设 message.IDstring 类型),语法是有效的,因为 bson.ObjectId 的底层类型是 string,因此基本上将 24 个字符解释为 bson.ObjectId 类型,但它是一个无效的 ObjectId 值,因为它将是 24 个字节而不是 12 个。

关于go - 为什么使用golang的mgo库找不到id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44966608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com