如何在 mgo Mongodb 中选择所有相同类型的嵌入文档?

我有一个使用 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,但它似乎不适用于我正在尝试做的事情。


慕仙森
浏览 161回答 1
1回答

扬帆大鱼

我认为你假设mgo是一个“ ORM ”。但这只是在 Mongo 中存储数据的一种简单方法。有 3 种不同的方法可以解决您的问题:将不同的类型放入不同的集合中。这样,每个文档都是相同的类型。(集合就像关系数据库中的“表”)。用它的类型标记每个事物(即将对象类型存储在一个字段中),然后您可以对其进行查询。如果您感到危险,您可以假设所有艺术家都有流派,所有用户都有个人资料。然后使用$exists仅选择该类型。第一个选项是通常的做法。你应该有特定的理由去做 #2 或 #3,因为它们可能会更慢。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go