Golang Mgo按ID(Mongodb)填充嵌套结构

时间:2015-02-06 06:33:35

标签: mongodb go mgo

将mongoose与NodeJs一起用于文档填充来模拟连接是很常见的。我试图了解如何用go和mgo来实现类似的东西。

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
}

我想在Post中仅存储用户和标记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

1 个答案:

答案 0 :(得分:0)

请查看Stack Overflow上的以下问题:

How do I perform the SQL Join equivalent in MongoDB?

但是,并不总是需要模拟NoSQL数据库(如MongoDB)的连接。当您需要为所有User获取Post时,您可能需要考虑执行额外查询或使用缓存。

P.S。即使您使用的是SQL数据库,也应仔细检查JOIN语句,因为其潜在的性能问题,不建议在生产中使用{{1}}语句。