WedX - журнал о программировании и компьютерных науках

пример mgo для метода заполнения

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

28.12.2018

Ответы:


1

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

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

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

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

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

Возврат только найденного документа с помощью Mongo и Голанг

28.12.2018
  • Позвольте мне сузить его. Скажем так, моя пользовательская модель содержит поле address_id со значением как bson.objectId. А адрес лежит в другой коллекции с таким же bson.objectId. Теперь, как я могу получить пользовательский объект вместе с полными адресными данными в одном ответе?? Я надеюсь, что это помогает .. 28.12.2018

  • 2

    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)
        }
    }
    
    08.01.2019
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]