【发布时间】:2020-08-04 20:49:03
【问题描述】:
我在我的 Go 应用程序中使用 MongoDB,并提取一些数据并将其存储在 bson.M 中(这是一个示例,从数据库中获取 bson.M 对象然后打印它(让我们调用这个对象data):
[map[_id:ObjectID("XXXXXXX") address:XX decimal:18 providers:map[currency:value] symbol:LINK]
这对我来说是正确的。
我想循环遍历providers 字段中的地图(如您所见,它也是其中的地图)。我做了几次尝试,但每次都被阻止。
由于我在docs here 中阅读的内容以及我所做的测试,看起来 bson.M 和primitive.M 是相同的,它们都被视为map[string]interface{}。
当我尝试将其声明为 map[string]string 时,我出现了一个恐慌错误:
// code run
data["providers"].(map[string]string)
//error received
panic: interface conversion: interface {} is primitive.M, not map[string]string
原因是我想遍历providers 字段,当我尝试按原样循环时,我收到此错误:
// code to run
for key, provider := range data["providers"] {...}
// error received
cannot range over data["providers"] (map index expression of type interface{})
我读到我可能需要对编组和解码做一些事情,但我觉得我只是错过了一个步骤,为什么我需要这样做,或者他们将如何提供帮助。
无论如何总结一下:
如何循环遍历primitive.M/bson.M/map[string]interface{}?
如何将 primitive.M/bson.M/map[string]interface{} 转换为 map[string]string?
看起来我可能试图做与this entry 相反的事情,而且看起来this entry 给了我相互矛盾的信息。希望在我了解更多我的真正问题时编辑问题。谢谢!
【问题讨论】: