我正在用mgo编写数据库接口。 我模型中的一些文档引用了其他文档。
type Child struct{
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
C string
}
type Parent struct {
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
A string
B Child
}
child := Child{
Id: bson.NewObjectId(),
C: "panino"
}
parent := Parent{
Id: bson.NewObjectId(),
A: "Just a string",
B: child,
}
我的目标是:
以下内容:
type Child struct{
Id bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"`
C string `bson:"-"`
}
在1和2中成功,但只有child.Id存储在Children集合中。 我对Golang / mgo很新。我玩Marshaling和Unmarshaling有点玩,但我不太明白Getter和Setter是如何工作的。我觉得他们会做这个伎俩。 任何线索?
答案 0 :(得分:1)
您可能正在寻找bson:",omitempty"
代码,而不是bson:"-"
。前者只有在空的时候才会省略该字段,而不是在任何时候。或者,您也可以使用仅在引用中使用的辅助ChildReference
类型。可以使用相同集合的不同类型。
顺便说一下,请注意虽然在某些情况下使用了这种做法,但在所有情况下,都没有将集合名称存储在文档ID旁边。定义良好的模式的最常见做法是仅存储文档ID(例如,使用{"person_id": 123}
,其含义很明确。)