2015-02-06 67 views
0

使用mongoose和NodeJs進行文檔填充以模擬連接非常常見。我正在嘗試瞭解如何實現與go和mgo類似的功能。Golang Mgo使用ID填充嵌套結構(Mongodb)

type User struct { 
    Id bson.ObjectId `json:"_id" bson:"_id"` 
    UserName string 
} 

type MessageBoard { 
    Id bson.ObjectId `json:"_id" bson:"_id"` 
} 

type Tag struct { 
    Id bson.ObjectId `json:"_id" bson:"_id"` 
    text string 
} 

type Post struct { 
    Id bson.ObjectId `json:"_id" bson:"_id"` 
    Text string 
    MessageBoard bson.ObjectId 
    User bson.ObjectId 
    Tags []bson.ObjectId 
} 

我想在郵政中只存儲用戶和標籤ID。用戶可以有很多帖子,如果用戶編輯UserName,所有帖子都應該反映這一點。

var posts []Post 

err := PostCollection.Find(bson.M{"MessageBoard":mBoardId}).All(&posts) 
if err != nil { 
    return nil, err 
} 

這是一個簡單的查詢來獲取帖子,但我如何有效地獲得填充用戶和標籤模型的帖子?

有睡眠(一個Mgo擴展)似乎做我在找什麼,但我有興趣更好地理解性能影響和設計選項,如果有一個單獨的解決方案使用Mgo。 https://github.com/mansoor-s/Sleep

回答

0

請堆棧溢出檢查出以下問題:

How do I perform the SQL Join equivalent in MongoDB?

然而,它並不總是必要的,以模擬一個的NoSQL數據庫,如MongoDB的連接。當您需要爲所有Post獲取User時,您可能需要考慮執行額外查詢或使用緩存。

P.S.即使您正在使用SQL數據庫,JOIN聲明也應仔細審閱,並且不建議在生產中使用,因爲它存在潛在的性能問題。