Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 从mgo查询中获取ObjectDhex值_Mongodb_Go_Mgo - Fatal编程技术网

Mongodb 从mgo查询中获取ObjectDhex值

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

我还是个新手,虽然我看到了许多与此类似的问题,但我无法重现一些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)
}

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()
方法。我应该把它添加到答案中还是你把它作为一个新答案发布?