# #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
является aninterface{}
, поэтому вы только расшифровываете в an*interface{}
. Используйте указатель на правильный тип.2. @JimB Спасибо, но я пока не понимаю, как это сделать
3. Вы указали указатель на значение для декодирования, например
amp;models.Earnings{}
.4. @JimB спасибо, это помогло мне