gpt4 book ai didi

mongodb - 如何将primitive.m 断言为map[string]string

转载 作者:行者123 更新时间:2023-12-01 22:23:39 25 4
gpt4 key购买 nike

我在我的 Go 应用程序中使用 MongoDB,并提取一些数据并将其存储在 bson.M(这是一个例子,从数据库中获取 bson.M 对象然后打印它(让我们称这个对象为data):

[map[_id:ObjectID("XXXXXXX") address:XX decimal:18 providers:map[currency:value] symbol:LINK]

这对我来说是正确的。

我想在 providers 中遍历 map 字段(如您所见,里面也有一张 map )。我做了几次尝试,但每次都被阻止。

由于我在 docs here 中读到的内容和我做过的测试,看起来bson.M和primitive.M是一样的,它们都被当作 map[string]interface{} .

当我试图将它断言给 map[string]string 时我去一个 panic 错误:

// 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正在给我相互矛盾的信息。希望编辑问题,因为我更了解我真正的问题是什么。谢谢!

    最佳答案

    与 Burak Serdar 交谈帮助我们找到了答案!你必须断言 data["providers"]primitive.M

    for key, provider := range data["providers"].(primitive.M){...}

    需要注意的关键事项:primitive.M 的处理方式类似于 map[string]interface{}

    正如 Burak Serdar 所提到的,我不能将一个原语.M 的实例声明为一个 map[string]string,因为 interfacemap[string]interface{}类型为 primitive.M .所以相反,我必须断言 providers反对 primitive.M对象,然后我可以正常循环它。

    我不能将一个primitive.M 转换成一个map[string]string

    关于mongodb - 如何将primitive.m 断言为map[string]string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61354850/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com