Стойността, свързана с ключ "_id"
е от тип bson.ObjectId
което е просто string
.
bson.M
е тип map[string]interface{}
, така че имате нужда от Твърдение за тип
за да получите идентификатора като ObjectId
:
objid, ok := m["_id"].(ObjectId)
if !ok {
panic("Not ObjectId")
}
И ObjectId
има ObjectId.Hex()
метод, който връща точно това, което искате:идентификаторът на обекта като "чист" шестнадесетичен низ:
fmt.Println(objid.Hex())
Алтернативи
objid
може просто да се преобразува в string
защото основният му тип е string
. Така че можете да използвате редица допълнителни опции, за да го конвертирате в шестнадесетичен string
:
hexid := fmt.Sprintf("%x", string(objid))
Ако просто искате да го отпечатате, можете да направите директно:
fmt.Printf("%x", string(objid))
Забележка: Конвертирането му в string
важен е друг fmt
пакетът ще извика своя String()
метод, който води до низ като ObjectIdHex("537f700b537461b70c5f0000")
и това е, което ще бъде преобразувано в шестнадесетичен, което очевидно не е това, което искате.
Алтернативно можете да използвате encoding/hex
пакет и hex.EncodeToString()
функция:
hexid := hex.EncodeToString([]byte(objid))