将 mongo 条目解析为结构体

我有具有以下架构的 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 中。


任何帮助,将不胜感激。


慕码人8056858
浏览 131回答 2
2回答

白衣染霜花

如果数据元素在其他表示形式(例如 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"`

肥皂起泡泡

将字段名称也添加到 BSON 标签中:SplitLen int `bson:"len,minsize" json:"len"不然好像会和Len被忽略的字段冲突。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go