gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:34 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

第一个选项是通常的做法。您应该有执行 #2 或 #3 的具体原因,因为它们可能会更慢。

关于mongodb - 我如何在 mgo Mongodb 中选择所有相同类型的嵌入式文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com