2017-07-07 121 views
2

我使用蒙戈在golang抗工和这里MgO的图书馆是我的代码:为什么我无法找到使用golang的氧化镁库中的ID?

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 

但是我查了一下,文件中蒙戈存在,但得到这里没有结果,不知道我在想什么...

+0

正确,但mongo对象的ID是24个字符,我应该如何将该24个字符的ID转换成12个字符的ID,我试过bson.ObjectIdHex以及但没有运气, –

+1

ObjectIdHex应该工作,我使用这一切时间'ERR:= db.C( “图像”)FindId(bson.ObjectIdHex(ID))一(米)'。 – tsdtsdtsd

回答

3

由于错误消息提示,对象ID正好是12个字节长(12个字节的数据)。你看到打印的24字符长ID是12个字节的ID(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.ObjectIdstring,因此基本上将该24个字符解释为bson.ObjectId类型,但它是无效的ObjectId值,因为它将是24个字节而不是12个。

相关问题