我有具有以下模式的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:"-"`
}我用的是乐高驱动。
现在的问题是,在只解析属性之后,我无法正确地解析为"len“( go struct中的SplitLen)。
len被定义为
SplitLen int `bson:",minsize" json:"len"`我相信这和标签有关。另外,我想提到的是,使用相同的结构将值插入到mongodb中。
任何帮助都将不胜感激。
发布于 2015-08-10 10:51:50
还将字段名添加到BSON标记中:
SplitLen int `bson:"len,minsize" json:"len"否则,它似乎将与被忽略的Len字段发生冲突。
发布于 2015-08-10 10:06:05
如果数据元素在其他表示形式(例如,json文本或数据库)中出现在与struct字段名不同的名称下,则必须指出要与字段标记中的struct字段匹配的名称。
您告诉json包获取/设置json值"len"到字段SplitLen中,该字段通过在其标记:json:"len"中包含以下内容而命名不同。
但是您还没有告诉mongo驱动程序也使用这个字段,这个字段很可能在mongodb中被命名为"Len" (或"len")。您显式地排除了可以按名称“自动匹配”的字段:
Len uint64 `bson:"-" json:"-"`正如Ainar所建议的那样,您可以通过将"len"添加到bson标记值来指定字段,这将迫使bson驱动程序也使用SplitLen字段:
SplitLen int `bson:"len,minsize" json:"len"`现在我不认为Len字段有任何用途,您应该删除它以避免混淆,或者使用Len名称而不是SplitLen
Len int `bson:"len,minsize" json:"len"`https://stackoverflow.com/questions/31915888
复制相似问题