Mongodb 从mgo查询中获取ObjectDhex值
我还是个新手,虽然我看到了许多与此类似的问题,但我无法重现一些OP要求的输出() 我正在做一件相当简单的事情,我正在mongo中点击一个Mongodb 从mgo查询中获取ObjectDhex值,mongodb,go,mgo,Mongodb,Go,Mgo,我还是个新手,虽然我看到了许多与此类似的问题,但我无法重现一些OP要求的输出() 我正在做一件相当简单的事情,我正在mongo中点击一个users集合,我所要做的就是将\u id值作为字符串返回。我最终将把这些\u id推到NSQ上,但这是我的首要任务 var users []bson.M err = sess.DB("db_name").C("users").Find(bson.M{}).All(&users) if err != nil { os.Exit(1) } fo
users
集合,我所要做的就是将\u id
值作为字符串返回。我最终将把这些\u id
推到NSQ上,但这是我的首要任务
var users []bson.M
err = sess.DB("db_name").C("users").Find(bson.M{}).All(&users)
if err != nil {
os.Exit(1)
}
for _, user := range users {
fmt.Printf("%+v \n", user["_id"])
}
今天,这一成果:
ObjectIdHex("537f700b537461b70c5f0000")
ObjectIdHex("537f700b537461b70c600000")
ObjectIdHex("537f700b537461b70c610000")
ObjectIdHex("537f700b537461b70c620000")
我浏览了文档,认为我正确地使用了地图,以便增加价值。所以我想,我的查询结果是:
{"_id" : ObjectIdHex("Some_ID") }
但是,如果ObjectdHex(“ID”)是值,我如何简单地获取其中的字符串
因此,理想输出:
"537f700b537461b70c5f0000"
"537f700b537461b70c600000"
"537f700b537461b70c610000"
"537f700b537461b70c620000"
与键
“\u id”
关联的值的类型仅为字符串
是类型map[string]接口{}
,因此需要将id作为ObjectId
:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
而ObjectId
有一个方法可以准确地返回您想要的内容:对象id是一个“纯”十六进制字符串:
fmt.Println(objid.Hex())
选择
objid
可以简单地转换为string
,因为它的底层类型是string
。因此,您可以使用许多其他选项将其转换为十六进制字符串
:
hexid := fmt.Sprintf("%x", string(objid))
如果您只想打印,可以直接执行以下操作:
fmt.Printf("%x", string(objid))
注意:将其转换为string
很重要,否则fmt
包将调用其string()
方法,从而生成类似ObjectIdHex(“537f700b537461b70c5f0000”)的字符串。
这就是将被转换为十六进制的方法,而十六进制显然不是您想要的
或者您可以使用软件包和功能:
hexid := hex.EncodeToString([]byte(objid))
是否有理由使用hex.EncodeToString([]字节(objid))
代替该方法?@BeBop我不这么认为。我只是不知道Hex()
方法。我应该把它添加到答案中还是你把它作为一个新答案发布?