为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕仙森 2021-12-06 19:40:08
我有一个使用 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,但它似乎不适用于我正在尝试做的事情。
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

我认为你假设mgo是一个“ ORM ”。但这只是在 Mongo 中存储数据的一种简单方法。有 3 种不同的方法可以解决您的问题:

  1. 将不同的类型放入不同的集合中。这样,每个文档都是相同的类型。(集合就像关系数据库中的“表”)。

  2. 用它的类型标记每个事物(即将对象类型存储在一个字段中),然后您可以对其进行查询。

  3. 如果您感到危险,您可以假设所有艺术家都有流派,所有用户都有个人资料。然后使用$exists仅选择该类型。

第一个选项是通常的做法。你应该有特定的理由去做 #2 或 #3,因为它们可能会更慢。


查看完整回答
反对 回复 2021-12-06
  • 1 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信