2015-03-02 106 views
1

我正在用mgo编写一个db接口。 我模型中的一些文档引用其他文档。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, 
} 

我的目标是:

  1. 保持这些文件嵌入代码,
  2. 店父的家长收集只到子对象的引用,
  3. 店的孩子在儿童集合作为一个独立的文件。

以下:

type Child struct{ 
    Id  bson.ObjectId `json:"_id,omitempty" bson:"_id,omitempty"` 
    C  string   `bson:"-"` 
} 

成功在1和2,但只有child.Id获取存储在儿童集合。 我对Golang/mgo很新。我和Marshaling和Unmarshaling玩了一下,但我不太明白Getter和Setter是如何工作的。尽管如此,我有他们会这样做的感觉。 任何线索?

+0

结构标记'bson:“ - ”'告诉bson忽略Child的C字段。 – Logiraptor 2015-03-02 15:38:54

+0

这是一个问题,因为孩子也必须作为独立文档存储。 – Alain1405 2015-03-02 15:53:28

回答

1

您可能正在寻找bson:",omitempty"标记而不是bson:"-"。前者只会在空时而不是时时忽略该字段。或者,您也可以使用仅用于参考的辅助ChildReference类型。在同一个集合中使用不同类型是很好的。另外,请注意,尽管在某些情况下使用了这种做法,但您不要在所有情况下都将集合名称存储在文档ID旁边。定义好的模式最常见的做法是简单地存储文档ID(例如{"person_id": 123}的含义是明确的)。