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

将 mongo 条目解析为结构体

将 mongo 条目解析为结构体

Go
慕码人8056858 2021-11-01 10:42:10
我有具有以下架构的 mongo 数据库{   "_id" : ObjectId("55c8526d8c16598efb5ee1e6"),   "guid" : "72811d52b48379e72c8fdd11aa09cb8b",   "blkid" : 1,   "vblkid" : 0,   "spltid" : 0,   "cmpr" : false,   "encr" : false,  "chksum" : "",  "dup" : false,  "cid" : 1,  "off" : 524508,  "len" : 524408,  "incr" : 0,  "fBackupID" : 0,  "vid" : 0,  "plugInType" : 0,   "blkType" : 0,   "alen" : 0 }我正在尝试将这些解析为具有以下结构的结构:type VhfsBlockMD struct {    GUID       string `json:"guid"`    BlkID      int    `bson:",minsize" json:"blkid"`    VBlkID     int    `bson:",minsize" json:"vblkid"`    SpltID     int    `bson:",minsize" json:"spltid"`    Cmpr       bool   `json:"cmpr" `    Encr       bool   `json:"encr"`    Blksum     string `bson:"blksum,omitempty" json:"blksum,omitempty"`    Chksum     string `json:"chksum"`    Dup        bool   `json:"dup"`    Cid        int    `bson:",minsize" json:"cid"`    SplitLen   int    `bson:",minsize" json:"len"`    Off        int64  `bson:",minsize" json:"off"`    Incr       int    `bson:",minsize" json:"incr"`    CDup       bool   `bson:"cdup,omitempty" json:"cdup,omitempty"`    FBackupID  int    `bson:"fBackupID" json:"fBackupID"`    Vid        int    `bson:"vid" json:"vid"`    PlugInType int    `bson:"plugInType" json:"plugInType"`    BlkType    int    `bson:"blkType" json:"blkType"`    Alen       int    `bson:"alen" json:"alen"`    IsValid    int    `bson:"-" json:"-"`    Len        uint64 `bson:"-" json:"-"`}我正在使用 mgo 驱动程序。现在的问题是,在仅解析属性后,我无法正确解析为“len”(go 结构中的 SplitLen)。len 定义为SplitLen int `bson:",minsize" json:"len"`我相信这与标签有关。另外我想提到的是,使用相同的结构将值插入到 mongodb 中。任何帮助,将不胜感激。
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

如果数据元素在其他表示形式(例如 json 文本或数据库)中出现在与结构字段名称不同的名称下,则必须告诉字段标记中的结构字段要匹配哪个名称。

你告诉json包来获取/设置JSON值"len"到现场SplitLen这是由包括本在其标签不同的名称:json:"len"

但是您还没有告诉 mongo 驱动程序也使用这个字段,它很可能在您的 mongodb 中命名"Len"(或"len")。您明确排除了可以按名称“自动匹配”的字段:

Len uint64 `bson:"-" json:"-"`

正如 Ainar-G 建议的那样,您可以通过将"len"加到bson标签值来指定该字段,这将强制 mgo 驱动程序也使用该SplitLen字段:

SplitLen int `bson:"len,minsize" json:"len"`

现在我看不到该Len字段的任何用途,您应该将其删除以避免混淆,或者使用Len名称而不是SplitLen

Len int `bson:"len,minsize" json:"len"`


查看完整回答
反对 回复 2021-11-01
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

将字段名称也添加到 BSON 标签中:

SplitLen int `bson:"len,minsize" json:"len"

不然好像会和Len被忽略的字段冲突。


查看完整回答
反对 回复 2021-11-01
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

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