mgo 将 bson.objectId 转换为 html 模板中的字符串(十六进制)
Posted
技术标签:
【中文标题】mgo 将 bson.objectId 转换为 html 模板中的字符串(十六进制)【英文标题】:mgo convert bson.objectId to string(hex) in html template 【发布时间】:2015-05-14 11:29:24 【问题描述】:我知道这个问题可能与this one 重复。但直到现在还没有得到满意的答复。我真的很想引起人们的注意,以便尽快找到解决方案。所以我请求你不要关闭这个问题,除非你有解决方案并在上一个问题中回答了:-)
我将描述这个问题以使人信服:
我有一个存储在 mongodb 中的数据结构,众所周知,mongodb 的 _id
是一个 bson.ObjectId
类型,我可以这样检索它:
type Data struct
Id bson.ObjectId `bson:"_id,omitempty"`
Content string `bson:"content"`
然后我通过查找特定查询条件得到了Data
的切片,并使用http/template
中的切片来呈现前端视图。为了操作切片中的每个项目,我想使用Id
字段,但是当使用它时:
range $key, $value := .DataSlice
<td>$value.Id</td>
end
这只给出了一种类似ObjectIdHex("550146d1b51bc1c208d1924d")
的字符串,而不是550146d1b51bc1c208d1924d
,它很好用且易于使用。
在duplicate issue。操作员说,他找到了解决此问题的方法,方法是在原始数据结构中“添加Id_String
”。但我真的不知道该怎么做?这是否意味着在检索后分配它?由于我使用切片来存储检索到的数据,并且切片中的数据不能轻易更改。这样做会比使用 jquery 在前端完成工作更复杂。但是这样做只会让我心爱的 Go 感到沮丧:-(。
那么有没有更好的方法来做到这一点?
【问题讨论】:
bson.ObjectId in a template的可能重复 【参考方案1】:bson.ObjectId 类型提供了一种Hex 方法,该方法将返回您正在寻找的十六进制表示,template 包允许对您手头的值调用任意方法,因此无需存储该值在其他任何地方作为字符串重复。
这会起作用,例如:
<td>$value.Id.Hex</td>
【讨论】:
另外,在生成新的对象 ID 时,您可以调用 bson.NewObjectId().Hex() 并仅获取字符串 - 以防您稍后想要将其插入数据库并使用字符串输入 _id 字段。【参考方案2】:你也可以像下面这样定义结构
type Data struct
Id bson.ObjectId `json:"id" bson:"_id,"`
Content string `json:"content" bson:"content"`
那么你可以在模板html的时候使用<td>$value.Id</td>
【讨论】:
以上是关于mgo 将 bson.objectId 转换为 html 模板中的字符串(十六进制)的主要内容,如果未能解决你的问题,请参考以下文章
BSON::ObjectId 与 Mongo::ObjectID
BSON::ObjectId 与 Mongo::ObjectID