我有一个使用mgo / mongodb的go应用程序。我使用的是嵌入式文档而不是关系文档。
所以我有......(为简洁起见,编写了一些代码)。
type User struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"id"`
Name string `form:"name" bson:"name" json:"name"`
Password string `form:"password" bson:"password,omitempty" json:"password" binding:"required"`
Email string `form:"email" bson:"email,omitempty" json:"email" binding:"required"`
Artists []Artist `form:"artists" bson:"artists,omitempty" json:"artists" inline`
Releases []Release `form:"releases" bson:"releases,omitempty" json:"releases" inline`
ContentFeed []Content `form:"content_feed" bson:"content_feed,omitempty" json:"content_feed" inline`
Profile Profile `form:"profile" bson:"profile,omitempty" json:"profile" inline`
TopTracks []Track `form:"top_tracks" bson:"top_tracks" json:"top_tracks" inline`
}
type Artist struct {
Id bson.ObjectId `bson:"_id,omitempty" json:"id"`
Title string `form:"title" bson:"title" json:"title"`
Genres string `form:"genres" bson:"genres" json:"genres"`
}
func (repo *ArtistRepo) GetArtists() ([]Artist, error) {
results := &[]Artist{}
err := repo.collection.Find(???).All(results)
return results, err
}
我正试图从所有用户中获取所有艺术家。但我无法在查询中找出我需要的内容?我简单地谈到了Map / Reduce,但它似乎并不适用于我正在尝试做的事情。
答案 0 :(得分:2)
我认为您假设n
是“ORM”。但它只是一种在Mongo中存储数据的简单方法。有3种不同的方法可以解决您的问题:
将不同类型放入不同的集合中。这样,每个文档都是相同的类型。 (集合类似于关系数据库中的“表”)。
使用它的类型标记每个东西(即将对象类型存储在字段中),然后您可以查询它。
如果您感觉很危险,您可以假设所有艺术家都有流派,并且所有用户都有个人资料。然后使用mgo
仅选择该类型。
第一种选择是通常的方法。你应该有特定的理由去做#2或#3,因为它们可能会变慢。