2015-03-12 23 views
8

Wiem, że ten problem może być powielony do this one. Ale do tej pory nie otrzymała satysfakcjonującej odpowiedzi. Naprawdę chcę zwrócić uwagę na rozwiązanie tak szybko, jak to możliwe. Więc błagam, aby nie zamknąć ten problem, chyba że masz rozwiązanie i odpowiedział na to w poprzedniej :-)mgo przekonwertuj bson.objectId na ciąg (hex) w szablonie html

opiszę problem dla przekonać:

Mam strukturę danych, który został zapisany w MongoDB jak wiadomo, _id z MongoDB jest rodzajem bson.ObjectId mógłbym odzyskać to z rodzaju tak:

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

Potem dostałem kawałek Data stwierdzając z konkretnego stanu kwerendy i użyć tego kawałek w http/template renderować do widoku z przodu. W celu manipulowania każdy element w kawałkach, chcę użyć pola Id, ale po użyciu tego z:

{{range $key, $value := .DataSlice}} 
    <td>{{$value.Id}}</td> 
{{end}} 

że tylko daje pewien rodzaj sznurka jak ObjectIdHex("550146d1b51bc1c208d1924d") zamiast 550146d1b51bc1c208d1924d który jest miły i łatwy w użyciu .

W numerze duplicate issue. Operator powiedział, że znalazł sposób, aby rozwiązać ten problem, dodając "Id_String" do oryginalnej struktury danych. Ale naprawdę nie wiem jak to zrobić? Czy to oznacza przypisanie go po pobraniu? Ponieważ używam plasterka do przechowywania danych, a danych w plasterku nie można łatwo zmienić. Będzie to bardziej skomplikowane niż wykonanie zadania z poziomu front-endu przy użyciu jquery. Ale robi to po prostu wcisnąć mi z moim ukochanym Go :-(.

Więc czy istnieje lepszy sposób to zrobić?

+0

możliwy duplikat [bson.ObjectId w szablonie] (http://stackoverflow.com/questions/28262392/bson-objectid-in-a-template) –

Odpowiedz

14

Typ bson.ObjectId oferuje metodę Hex że powróci reprezentację hex, którego szukasz, a pakiet template pozwala wywołać dowolne metody na wartości masz pod ręką, więc nie ma potrzeby, aby zapisać tę wartość w dwulicowości nigdzie indziej jako ciąg

to będzie działać, na przykład:.

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

Dzięki, to działa! – armnotstrong

+0

Ponadto podczas generowania nowego identyfikatora obiektu można wywołać funkcję bson.NewObjectId(). Hex() i uzyskać tylko ciąg znaków - w przypadku, gdy później chcesz wstawić to do bazy danych i używasz pól typu _id łańcucha. –

0

można również definiować struct następująco

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

Następnie można użyć <td>{{$value.Id}}</td> gdy templating HTML