我有以下架构的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。
任何帮助都将不胜感激。
答案 0 :(得分:2)
如果数据元素出现在另一个表示中的不同名称下(例如json文本或数据库),而不是结构字段名称,则必须告诉与字段标记中的struct字段匹配的名称。
您告诉json
软件包将json值"len"
设置到字段SplitLen
中,该字段的名称不同,方法是将其包含在其标记中:json:"len"
。< / p>
但是你还没有告诉mongo驱动程序也使用这个很可能在你的mongodb中命名为"Len"
(或"len"
)的字段。您明确排除了可以&#34;自动匹配的字段&#34;按名称:
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"`
答案 1 :(得分:1)
将字段名称添加到BSON标记:
SplitLen int `bson:"len,minsize" json:"len"
否则它似乎会与被忽略的Len
字段冲突。