mgo将bson.objectId转换为html模板中的字符串(十六进制)

时间:2015-03-12 10:42:03

标签: go mgo objectid go-html-template

我知道这个问题可能与this one重复。但到目前为止还没有得到满意的答案。我真的想引起一些关注,尽快找到解决方案。所以我请求你不要关闭这个问题,除非你有解决方案并在前一个问题中回答: - )

我将描述说服的问题:

我有一个存储在mongodb中的数据结构,众所周知,mongodb的_idbson.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 :-(。

那么还有更好的方法吗?

2 个答案:

答案 0 :(得分:15)

bson.ObjectId类型提供了一个Hex方法,它将返回您要查找的十六进制表示形式,template包允许您调用您手头的值的任意方法,因此,不需要将该值作为字符串存储在其他任何地方。

这可行,例如:

<td>{{$value.Id.Hex}}</td>

答案 1 :(得分:0)

你也可以按如下方式定义struct

type Data struct {
    Id bson.ObjectId `json:"id" bson:"_id,"`
    Content string `json:"content" bson:"content"`
}

然后你可以在模板html时使用<td>{{$value.Id}}</td>