为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 MongoDB 获取完整文档

无法从 MongoDB 获取完整文档

Go
慕神8447489 2023-07-04 17:28:51
我有一个 MongoDB 集合,其中包含这种形式的项目    {    "_id" : "base_519",    "Name" : "Name",    "Position" : 1000,    "Type" : "Base",    "Visible" : true,    "Preview" : "/preview/preview.jpg",    "IsBase" : true,    "Product" : "product-2",    "Categories" : [         "category_1"    ],    "ObjData" : [         {            "_t" : "ObjDataNormal",            "CanBuy" : false,            "Foreground" : "/fg/foreground.gif",            "Background" : "null.no.gif",            "HasRatio" : false,            "Ratio" : "0",            "HasPadding" : true,            "Padding" : 40,            "Mask" : {                "_id" : 0,                "Name" : "",                "X" : 39,                "Y" : 85,                "Width" : 422,                "Height" : 332            }        }    ]}但是当我尝试使用 go 获取整个集合时,不会返回 ObjData 字段,而是得到了这个{        "id": "base_519",        "name": "Name",        "position": 1000,        "type": "Base",        "visible": true,        "preview": "/preview/preview.jpg",        "isbase": true,        "product": "product-2",        "categories": [            "category_1"        ]    }我是 Go 语言的新手,这只是我第一次尝试使用 mongodb 驱动程序。我在 Go 中使用的结构是这些那么我在这里缺少什么?正如我所说,我是 Go lang 的新手,所以我可能不太了解该语言和 mongo 驱动程序的工作原理
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

当我尝试使用 go 获取整个集合时,不会返回 ObjData 字段


返回嵌套字段ObjData,但未解码为提供的结构。


这是因为该结构ObjDataType有一个值不符合返回的文档。该结构已定义Ratio为,float64但文档的值为0in string。


您可以通过更改结构定义或文档值来解决此问题。即将结构更改为:


type ObjDataType struct {

    Type       string   `json:"type,omitempty" bson:"_t,omitempty"`

    CanBuy     bool     `json:"canbuy,omitempty" bson:"CanBuy,omitempty"`

    Foreground string   `json:"foreground,omitempty" bson:"Foreground,omitempty"`

    Background string   `json:"background,omitempty" bson:"Background,omitempty"`

    HasRatio   bool     `json:"hasratio,omitempty" bson:"HasRatio,omitempty"`

    Ratio      string  `json:"ratio,omitempty" bson:"Ratio,omitempty"`

    HasPadding bool     `json:"haspadding,omitempty" bson:"HasPadding,omitempty"`

    Padding    int      `json:"padding,omitempty" bson:"Padding,omitempty"`

    Mask       MaskType `json:"mask,omitempty" bson:"Mask,omitempty"`

}

bson.M对于您的学习之旅来说,一个额外的提示是,您可以使用而不是您的结构来调试代码的解码部分。例如:


for cursor.Next(ctx) {

    var variant bson.M

    cursor.Decode(&variant)

    variants = append(variants, variant)

    fmt.Println(variant)

}


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信