mgo中的模型关系
我正在用mgo编写一个db接口。 我的模型中的一些文档引用了其他文档mgo中的模型关系,go,bson,mgo,Go,Bson,Mgo,我正在用mgo编写一个db接口。 我的模型中的一些文档引用了其他文档 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
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很陌生。我玩了一些封送和解封,但我不太明白Getter和Setter是如何工作的。不过我觉得他们会耍花招。
有什么线索吗?您可能正在查找
bson:,省略空的“
标记,而不是bson:“-”
。前者只有在字段为空时才会忽略该字段,而不是始终忽略该字段。或者,您还可以拥有仅用于引用的辅助ChildReference
类型。在同一个集合中使用不同的类型是可以的
另外,请注意,尽管这种做法在某些情况下使用,但在所有情况下都不必将集合名称存储在文档id旁边。对于定义良好的模式,最常见的做法是只存储文档id(例如,使用
{“person\u id”:123}
含义很清楚)。结构标记bson:“-”
告诉bson忽略Child的C字段。这是一个问题,因为Child也必须作为独立文档存储。