mgo中的模型关系

时间:2015-03-02 13:12:49

标签: go bson mgo

我正在用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. 将儿童收藏中的儿童存储为独立文档。
  4. 以下内容:

    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是如何工作的。我觉得他们会做这个伎俩。 任何线索?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找bson:",omitempty"代码,而不是bson:"-"。前者只有在空的时候才会省略该字段,而不是在任何时候。或者,您也可以使用仅在引用中使用的辅助ChildReference类型。可以使用相同集合的不同类型。

顺便说一下,请注意虽然在某些情况下使用了这种做法,但在所有情况下,都没有将集合名称存储在文档ID旁边。定义良好的模式的最常见做法是仅存储文档ID(例如,使用{"person_id": 123},其含义很明确。)