Пример MGO для метода заполнения - PullRequest
0 голосов
/ 28 декабря 2018

Я новичок в GoLang & MongoDB.Я пытаюсь понять их отношение с помощью MGO.Тем не менее, я не могу найти подходящий пример того, как получить ссылочные объекты из Монго в Go с помощью mgo.Я слышал о методе заполнения, но понятия не имею, как его использует mgo.Кто-нибудь может пролить свет на то же самое?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

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)
    }
}
0 голосов
/ 28 декабря 2018

Ваш вопрос слишком широкий, но в целом, если вы хотите получить "ссылочный" объект одним запросом, вы должны использовать структуру агрегации MongoDB , в частности стадию lookup .

Среду агрегации можно использовать из mgo с методом Collection.Pipe().

Например, см. Получить значение в ссылкепоиска с MongoDB и Golang .

Еще несколько примеров:

Как получить значение счетчика, используя $ lookup в mongodb, используя golang?

Возвращать найденный документ можно только с Монго и Голангом

...