登录
首页 >  Golang >  Go问答

解析非常规的 MongoDB 返回值为 BSON 结构

来源:stackoverflow

时间:2024-03-12 17:57:19 140浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《解析非常规的 MongoDB 返回值为 BSON 结构》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

mongo的返回是这样的:

[
    {
        "_id": "xxxxx-xxxx-xxxxxxxxxxxxxxx",
        "internetgatewaydevice": {
            "wandevice": {
                "1": {
                    "_instance": true,
                    "_writable": false
                },
                "2": {
                    "_instance": true,
                    "_writable": false
                },
                ...
                "_object": true,
                "_timestamp": {
                    "$date": "2020-11-23t04:14:13.202z"
                },
                "_writable": false
            }
        }
    }
]
  • wandevice.1wandevice.2 未修复。可以是 n 对象。
  • 当返回的是 json 字符串时,unmarshaljson 起作用。因为 wandevice.[id]id 是连续的而不是重复的,因此我可以在 internetgatewaydevice 结构中创建一个 wandevices 数组

可以通过一种方法“解组”来自 mongo 的返回值,而无需创建这样的结构吗?

type device struct {
    internetgatewaydevice internetgatewaydevice `json:"internetgatewaydevice" bson:"internetgatewaydevice"`
}

type internetgatewaydevice struct {
    wandevice wandevice `json:"wandevice" bson:"wandevice"`
}

type wandevice struct {
    devicenum1 `json:"1" bson:"1"`
    devicenum1 `json:"2" bson:"2"`
    devicenum1 `json:"3" bson:"3"`
    devicenum1 `json:"4" bson:"4"`
    .....
}
  • 我这样称呼它:
    collection := m.Client.Database(acs.Mongo.Database).Collection("devices")
    filter := bson.D{
        {"InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.2.MACAddress._value", parsedMac},
    }

    response := &models.Device{}
    err = collection.FindOne(context.TODO(), filter).Decode(response)

解决方案


您可以创建自定义 UnmarshalJSON,如下所示: https://play.golang.org/p/FdW064a9RDT

终于介绍完啦!小伙伴们,这篇关于《解析非常规的 MongoDB 返回值为 BSON 结构》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>