登录
首页 >  Golang >  Go问答

为什么使用golang的mgo库找不到ID?

来源:Golang技术栈

时间:2023-04-25 21:39:55 442浏览 收藏

本篇文章给大家分享《为什么使用golang的mgo库找不到ID?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我在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()方法,在此答案中有详细说明:[从 mgo 查询中获取 ObjectIdHex 值](https://stackoverflow.com/questions/29146922/obtain- objectidhex-value-from-mgo-query/29148800#29148800)

您在代码中所做的是一个简单的类型转换(假设message.ID是 type string),并且语法是有效的,因为基础类型bson.ObjectIdstring,所以基本上将 24 个字符解释为bson.ObjectId类型,但它是一个无效ObjectId值,因为它会是 24 字节而不是 12。

终于介绍完啦!小伙伴们,这篇关于《为什么使用golang的mgo库找不到ID?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>