Хранение вложенных структур с MGO

я пытаюсь построить монго документ из структуры go, которая сильно вложена, и яЯ столкнулся с проблемой перехода от go struct к объекту mongo. Я'мы построилиочень упрощенная версия того, что яЯ пытаюсь работать здесь:http://play.golang.org/p/yPZW88deOa

package main

import (
    "os"
    "fmt"
    "encoding/json"
)

type Square struct {
    Length int 
    Width int
}

type Cube struct {
    Square
    Depth int
}

func main() {
    c := new(Cube)
    c.Length = 2
    c.Width = 3
    c.Depth = 4

    b, err := json.Marshal(c)
    if err != nil {
        panic(err)
    }

    fmt.Println(c)
    os.Stdout.Write(b)
}

Запуск этого приводит к следующему выводу:

&{{2 3} 4}
{"Length":2,"Width":3,"Depth":4}

Что имеет полный смысл. Кажется, что либо функция Write, либо функция json.Marshal имеет некоторые функции, которые сворачивают вложенную структуру, но моя проблема возникает, когда я пытаюсь вставить эти данные в базу данных mongo с помощью функции mgo (func (*Collection) Upserthttp://godoc.org/labix.org/v2/mgo#Collection.Upsert). Если я используюjson.Marshal() функционировать первым и передать байтыcollection.Upsert()хранится как двоичный файл, который я нене хочу, но если я используюcollection.Upsert(bson.M("_id": id, &c) это выглядит как вложенная структура с формой:

{
    "Square": {
        "Length": 2
        "Width": 3
    }
    "Depth": 4
}

Но я хочу использовать монго с той же структурой, что и при использованииos.Stdout.Write() функция:

{
     "Length":2,
     "Width":3,
     "Depth":4
}

Есть ли флаг, который ям отсутствует, что бы легко с этим справиться? Единственная альтернатива, которую я вижу в этой точке, - это серьезное сокращение читабельности кода путем удаления вложенности структур, что я действительно ненавижу делать. Опять же, мой реальный код намного сложнее, чем этот пример, поэтому, если я смогу избежать его усложнения, сохраняя вложенность, это определенно будет предпочтительнее.

Ответы на вопрос(1)

Ваш ответ на вопрос