将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
答案 0 :(得分:0)
请查看Stack Overflow上的以下问题:
How do I perform the SQL Join equivalent in MongoDB?
但是,并不总是需要模拟NoSQL数据库(如MongoDB)的连接。当您需要为所有User
获取Post
时,您可能需要考虑执行额外查询或使用缓存。
P.S。即使您使用的是SQL数据库,也应仔细检查JOIN
语句,因为其潜在的性能问题,不建议在生产中使用{{1}}语句。