Неправильное декодирование в Mongo-go-драйвере

# #mongodb #go

Вопрос:

Например, у меня есть такая структура:

 type Overview struct {  Symbol string `json:"Symbol,omitempty"`  AssetType string `json:"AssetType,omitempty"`  Name string `json:"Name,omitempty"`  Description string `json:"Description,omitempty"`  ...  ... }  

В дополнение к этому у меня есть несколько других структур. Моя функция выбирает подходящую структуру для Decode(), но когда я пытаюсь получить данные из базы данных, я получаю результат в следующем виде:

 [  {  "Key": "_id",  "Value": "618aa6f2a64cb8105a9c7984"  },  {  "Key": "Symbol",  "Value": "IBM"  },  {  "Key": "FiscalYearEnd",  "Value": "December"  },  ...  ... ]   

Я ожидаю ответа в виде моей структуры, но я получаю такой массив. Я попытался сам объявить структуру ответа: var result models.Overview . После этого проблема исчезла, но это не решение моей проблемы

Вот моя функция:

 var (  models map[string]interface{} )  func init() {  models = make(map[string]interface{})  models["Overview"] = models.Overview{}  models["Earnings"] = models.Earnings{}  ...  ... } func GetDbData(collection string, db *mongo.Database, filter bson.D) (interface{}, error) {  var result = models[collection] // Choosing a structure  res := db.Collection(collection).FindOne(context.TODO(), filter)  err := res.Decode(amp;result)  if err != nil {  return nil, err  }  return result, nil }  

Я не могу понять, почему это происходит, я надеюсь, что кто-то уже сталкивался с этой проблемой и сможет мне помочь

Комментарии:

1. result является an interface{} , поэтому вы только расшифровываете в an *interface{} . Используйте указатель на правильный тип.

2. @JimB Спасибо, но я пока не понимаю, как это сделать

3. Вы указали указатель на значение для декодирования, например amp;models.Earnings{} .

4. @JimB спасибо, это помогло мне