Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mgo Mongodb中选择相同类型的所有嵌入文档?_Mongodb_Go_Mgo - Fatal编程技术网

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

如何在mgo Mongodb中选择相同类型的所有嵌入文档?,mongodb,go,mgo,Mongodb,Go,Mgo,我有一个使用mgo/mongodb的go应用程序。我使用的是嵌入式文档,而不是关系文档 所以我。。。(一些代码是为了简洁而编辑的) 我试图从所有的用户那里得到所有的艺术家。但我不知道我的查询需要什么?我简要地谈到了Map/Reduce,但它似乎不适用于我正在尝试做的事情 我想你是在假设mgo是一个“”。但这只是在Mongo中存储数据的一种简单方法。有3种不同的方法可以解决您的问题: 将不同的类型放入不同的集合中。这样,每个文档都是相同的类型。(集合就像关系数据库中的“表”) 用对象的类型标记每个

我有一个使用mgo/mongodb的go应用程序。我使用的是嵌入式文档,而不是关系文档

所以我。。。(一些代码是为了简洁而编辑的)


我试图从所有的用户那里得到所有的艺术家。但我不知道我的查询需要什么?我简要地谈到了Map/Reduce,但它似乎不适用于我正在尝试做的事情

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

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

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

  • 如果你感到危险,你可以假设所有的艺术家都有风格,所有的用户都有个人资料。然后使用
    $exists
    仅选择该类型


  • 第一种选择是通常的方法。你应该有具体的理由去做第2或第3步,因为它们可能会慢一些。

    谢谢你的回复!例如,将我们的用户和艺术家分成两个独立的集合?但是我该如何将用户链接到用户?您可以存储一个对象ID数组,并简单地记住查询其他集合。使用Go mgo库有没有推荐的方法?或者只是手动创建一个新文档,获取ID,然后更新父文档并将ID推送到数组中?谢谢你的帮助!后者。存在处理父/子关系的ORM。但是使用ORM是一种复杂的权衡。
    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
    }