【问题标题】:mgo example for populate method填充方法的 mgo 示例
【发布时间】:2019-05-26 02:45:23
【问题描述】:

我是 GoLang 和 MongoDB 的新手。我正在尝试使用 mgo 了解它们的关系。但是,我无法找到一个合适的示例来说明如何使用 mgo 从 Go 中的 mongo 中获取引用的对象。我听说过填充方法,但不知道 mgo 是如何使用它的。任何人都可以对此有所了解吗?

【问题讨论】:

    标签: mongodb go mgo


    【解决方案1】:

    MongoDB 提供$lookup 来执行左外连接。下面是一个使用 mgo 的例子。

    func TestLookup(t *testing.T) {
        var err error
        uri := "mongodb://localhost/stackoverflow?replicaSet=replset"
        dialInfo, _ := mgo.ParseURL(uri)
        session, _ := mgo.DialWithInfo(dialInfo)
        c := session.DB("stackoverflow").C("users")
    
        pipeline := `
        [{
            "$lookup": {
                "from": "addresses",
                "localField": "address_id",
                "foreignField": "_id",
                "as": "address"
            }
        }, {
            "$unwind": {
                "path": "$address"
            }
        }, {
            "$project": {
                "_id": 0,
                "name": "$name",
                "address": "$address.address"
            }
        }]
         `
        var v []map[string]interface{}
        var results []bson.M
        json.Unmarshal([]byte(pipeline), &v)
        if err = c.Pipe(v).All(&results); err != nil {
            t.Fatal(err)
        }
        for _, doc := range results {
            t.Log(doc)
        }
    }
    

    【讨论】:

      【解决方案2】:

      您的问题过于宽泛,但一般来说,如果您想通过单个查询获取“引用”对象,则必须使用 MongoDB 的 Aggregation framework,特别是 lookup 阶段。

      聚合框架可以从mgo 与Collection.Pipe() 方法一起使用。

      例如,请参阅Get a value in a reference of a lookup with MongoDB and Golang。

      更多示例:

      How to get the count value using $lookup in mongodb using golang?

      Only return the looked up document with Mongo and Golang

      【讨论】:

      • 让我缩小范围。基本上可以说,我的用户模型包含值为 bson.objectId 的 address_id 字段。该地址位于具有相同 bson.objectId 的不同集合中。现在如何在单个响应中获取用户对象以及完整的地址数据?我希望它有所帮助..
      猜你喜欢
      • 2012-09-25
      • 2015-06-15
      • 2016-07-11
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 2020-09-01
      相关资源
      最近更新 更多