2015-03-12 15 views
8

So che questo problema può essere duplicato in this one. Ma non ha ottenuto una risposta soddisfatta fino ad ora. E voglio davvero attirare l'attenzione per ottenere una soluzione il prima possibile. Quindi ti prego di non chiudere questo problema se non si ha la soluzione e rispose in quella precedente :-)mgo convert bson.objectId in stringa (hex) nel modello html

mi limiterò a descrivere il problema per convincere:

ho una struttura di dati che sono stati memorizzati in MongoDB , come noto, il _id di MongoDB è un tipo bson.ObjectId, ho potuto recuperare che, con un po 'come questo:

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

Poi ho avuto una fetta di Data trovando con particolare condizione di query, e l'uso che la fetta in http/template per il rendering per la vista front-end. Al fine di manipolare ogni elemento nella fetta, voglio utilizzare il campo Id, ma quando si utilizza quello con:

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

che solo dà una sorta di stringa come ObjectIdHex("550146d1b51bc1c208d1924d") invece di 550146d1b51bc1c208d1924d che è bello e facile da usare .

Nel duplicate issue. L'op ha detto che ha trovato un modo per risolvere questo "aggiungendo un Id_String" alla struttura dati originale. Ma davvero non so come farlo? Questo significa assegnarlo dopo il recupero? Poiché utilizzo una sezione per archiviare i dati recuperati, i dati in una sezione non possono essere modificati facilmente. Sarà più complesso farlo rispetto al lavoro nel front-end usando jquery. Ma fare che appena mi deprimono con la mia amata Go :-(.

è così c'è un modo migliore per farlo?

+0

possibile duplicato di [bson.ObjectId in un modello] (http://stackoverflow.com/questions/28262392/bson-objectid-in-a-template) –

risposta

14

Il tipo bson.ObjectId offre un metodo Hex che restituirà la rappresentazione esadecimale che stai cercando, e il pacchetto template permette di chiamare i metodi arbitrari sui valori che avete a portata di mano, quindi non c'è alcuna necessità di memorizzare tale valore nella doppiezza altrove come una stringa

Questo potrebbe funzionare, per esempio:.

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

Grazie, funziona! – armnotstrong

+0

Inoltre, durante la generazione di un nuovo ID oggetto, è possibile chiamare bson.NewObjectId(). Hex() e ottenere solo la stringa - nel caso in cui si desideri inserirla successivamente in un database e si utilizzino i campi _id di tipo stringa. –

0

È inoltre possibile definire struct come segue

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

Quindi è possibile utilizzare <td>{{$value.Id}}</td> quando templating html