首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将mongo条目解析为struct

将mongo条目解析为struct
EN

Stack Overflow用户
提问于 2015-08-10 09:21:04
回答 2查看 157关注 0票数 3

我有具有以下模式的mongo数据库

代码语言:javascript
复制
{ 
  "_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 
}

我试图将它们解析为具有以下结构的结构:

代码语言:javascript
复制
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:"-"`
}

我用的是乐高驱动。

现在的问题是,在只解析属性之后,我无法正确地解析为"len“( go struct中的SplitLen)。

len被定义为

代码语言:javascript
复制
SplitLen int `bson:",minsize" json:"len"`

我相信这和标签有关。另外,我想提到的是,使用相同的结构将值插入到mongodb中。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-10 10:51:50

还将字段名添加到BSON标记中:

代码语言:javascript
复制
SplitLen int `bson:"len,minsize" json:"len"

否则,它似乎将与被忽略的Len字段发生冲突。

票数 1
EN

Stack Overflow用户

发布于 2015-08-10 10:06:05

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

您告诉json包获取/设置json值"len"到字段SplitLen中,该字段通过在其标记:json:"len"中包含以下内容而命名不同。

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

代码语言:javascript
复制
Len uint64 `bson:"-" json:"-"`

正如Ainar所建议的那样,您可以通过将"len"添加到bson标记值来指定字段,这将迫使bson驱动程序也使用SplitLen字段:

代码语言:javascript
复制
SplitLen int `bson:"len,minsize" json:"len"`

现在我不认为Len字段有任何用途,您应该删除它以避免混淆,或者使用Len名称而不是SplitLen

代码语言:javascript
复制
Len int `bson:"len,minsize" json:"len"`
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31915888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档