Разбор записей Монго в структуре

У меня есть база данных Монго со следующей схемой

{ 
  "_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"`
Другие вопросы по тегам