Я работаю с MongoDB в своем приложении Go, извлекаю некоторые данные и сохраняю их в bson.M (который. Вот пример, как получить объект bson.M из БД и затем распечатать его (давайте назовем этот объект data
):
[map[_id:ObjectID("XXXXXXX") address:XX decimal:18 providers:map[currency:value] symbol:LINK]
Что мне кажется правильным.
Я думаю, что хочу l oop над картой в поле providers
(как Вы можете видеть, что там тоже карта). Я делал несколько попыток, но каждый раз меня блокировали.
Из-за того, что я прочитал в документах здесь и тестирование, которое я провел, похоже, что bson.M и primitive.M одинаковы, и каждый из них рассматривается как map[string]interface{}
.
Когда я пытался утвердить его в map[string]string
I go a pani c ошибка:
// code run
data["providers"].(map[string]string)
//error received
panic: interface conversion: interface {} is primitive.M, not map[string]string
Причина этого в том, что я хочу l oop над полем providers
, и когда я пытаюсь l oop как есть, я получаю эту ошибку:
// code to run
for key, provider := range data["providers"] {...}
// error received
cannot range over data["providers"] (map index expression of type interface{})
Я прочитал, что мне может понадобиться что-то сделать с маршалингом и декодированием, но я чувствую, что просто пропускаю шаг, чтобы понять, почему нужно сделать это, или как бы они помогли.
В любом случае подвести итог:
Как сделать один l oop над примитивом. М / бсон. M / map [string] interface {}?
Как преобразовать интерфейс primitive.M / bson.M / map [string] {} в строку map [string]?
Похоже, я пытаюсь сделать противоположное этой записи , и похоже, эта запись дает мне противоречивую информацию , Надеюсь отредактировать вопрос, поскольку я больше понимаю, в чем заключается моя настоящая проблема. Спасибо!