gpt4 book ai didi

mongodb - 从 mgo 查询中获取 ObjectIdHex 值

转载 作者:IT王子 更新时间:2023-10-29 00:35:46 24 4
gpt4 key购买 nike

我还是个新手,虽然我在 SO 上看到多个与此类似的问题,但我无法重现某些 OP 请求的输出(this answer looking the closest)。

我正在做一些相当简单的事情,我在 mongo 中点击一个 users 集合,我想要做的就是将 _id 值作为字符串返回。我最终会将这些 _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")

我浏览了 bson#m文档并认为我正确地使用了 map 以增加值(value)。所以我想,我的查询结果是:

{"_id" : ObjectIdHex("Some_ID") }

但如果 ObjectIdHex("ID") 是值,我如何简单地获取其中的字符串。

如此理想的输出:

"537f700b537461b70c5f0000"
"537f700b537461b70c600000"
"537f700b537461b70c610000"
"537f700b537461b70c620000"

最佳答案

与键 "_id" 关联的值是 bson.ObjectId 类型这只是一个字符串

bson.M是一个 map[string]interface{} 类型,所以你需要 Type assertion将 id 作为 ObjectId 获取:

objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}

ObjectId 有一个 ObjectId.Hex()返回所需内容的方法:作为“纯”十六进制字符串的对象 ID:

fmt.Println(objid.Hex())

备选方案

objid 可以简单地转换为 string,因为它的底层类型是 string。因此,您可以使用许多其他选项将其转换为十六进制 string:

hexid := fmt.Sprintf("%x", string(objid))

如果你只是想打印它,你可以直接这样做:

fmt.Printf("%x", string(objid))

注意将它转换成string很重要,否则fmt包会调用它的String()方法这会产生类似 ObjectIdHex("537f700b537461b70c5f0000") 的字符串,这将被转换为十六进制,这显然不是您想要的。

或者您可以使用encoding/hex包和 hex.EncodeToString()功能:

hexid := hex.EncodeToString([]byte(objid))

关于mongodb - 从 mgo 查询中获取 ObjectIdHex 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146922/

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