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

mgo convert bson.objectId to string(hex) in html template

我知道这个问题可能与 重复。但至今仍未得到满意的答复。我真的很想提请大家注意,尽快找到解决方案。所以我求求你不要关闭这个问题,除非你有解决方案并在上一个问题中回答过:-)

我会描述这个问题以说服:

我有一个存储在 mongodb 中的数据结构,众所周知,mongodb 的 _idbson.ObjectId 类型,我可以使用 sort 检索它像这样:

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}}

That 只给出了一种类似于 ObjectIdHex("550146d1b51bc1c208d1924d") 而不是 550146d1b51bc1c208d1924d 的字符串,它很好用且易于使用。

。 op 说他找到了一种方法来解决这个问题,通过 "adding a Id_String" 到原始数据结构。但我真的不知道该怎么做?这是否意味着在检索后分配它?由于我使用切片来存储检索到的数据,并且切片中的数据不能轻易更改。这样做比使用 jquery 在前端完成工作要复杂得多。但是这样做只会让我对我心爱的 Go 感到沮丧:-(。

那么有更好的方法吗?

bson.ObjectId type offers a Hex method that will return the hex representation you are looking for, and the template 程序包允许对您手头的值调用任意方法,因此无需将该值以字符串的形式存储在其他任何地方。

这会起作用,例如:

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

你也可以这样定义struct

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

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