Разбор записей Монго в структуре
У меня есть база данных Монго со следующей схемой
{
"_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" (SplitLen в go struct).
лен определяется как
SplitLen int `bson:",minsize" json:"len"`
Я считаю, что это как-то связано с тегами. Также я хотел бы упомянуть, что та же самая структура использовалась, чтобы вставить значение в mongodb.
Любая помощь будет оценена.
2 ответа
Добавьте также имя поля в тег BSON:
SplitLen int `bson:"len,minsize" json:"len"
В противном случае кажется, что это будет противоречить Len
поле, которое игнорируется.
Если элемент данных появляется под другим именем в другом представлении (например, текст json или база данных), чем то, что является именем поля структуры, вы должны указать, какое имя сопоставить полю структуры в теге поля.
Вы сказали json
пакет для получения / установки значения JSON "len"
в поле SplitLen
который назван по-другому, включив его в свой тег: json:"len"
,
Но вы не сказали водителю монго также использовать это поле, которое, скорее всего, называется "Len"
(или же "len"
в твоем mongodb. Вы явно исключили поле, которое может быть "автоматически сопоставлено" по имени:
Len uint64 `bson:"-" json:"-"`
Как и предполагал Айнар-Г, вы можете назначить поле, добавив "len"
к bson
значение тега, которое заставит драйвер MGO также использовать SplitLen
поле:
SplitLen int `bson:"len,minsize" json:"len"`
И теперь я не вижу никакой цели для Len
поле, вы должны удалить его, чтобы избежать путаницы, или использовать Len
имя вместо SplitLen
:
Len int `bson:"len,minsize" json:"len"`