首页 > 解决方案 > 填充方法的 mgo 示例

问题描述

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

标签: mongodbgomgo

解决方案


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)
    }
}

推荐阅读