mgo填充方法示例

时间:2018-12-28 08:42:07

标签: mongodb go mgo

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

2 个答案:

答案 0 :(得分:0)

您的问题过于笼统,但是通常,如果您想通过单个查询获取“引用”对象,则必须使用MongoDB的Apache Groovy - Why and How You Should Use It,特别是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?

答案 1 :(得分:0)

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