2015-03-02 110 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}的含義是明確的)。