Хранение вложенных структур с 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) Upsert
http://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
}
Есть ли флаг, который ям отсутствует, что бы легко с этим справиться? Единственная альтернатива, которую я вижу в этой точке, - это серьезное сокращение читабельности кода путем удаления вложенности структур, что я действительно ненавижу делать. Опять же, мой реальный код намного сложнее, чем этот пример, поэтому, если я смогу избежать его усложнения, сохраняя вложенность, это определенно будет предпочтительнее.