Динамически создавать агрегированный конвейер для mongo-go-driver - PullRequest
0 голосов
/ 13 ноября 2018

https://godoc.org/github.com/mongodb/mongo-go-driver

Я пытаюсь динамически создать агрегированный конвейер. Например, я хочу прочитать кусочек строки, содержащей океаны. Я попытался разбить их на части, но не смог найти никаких методов для добавления элементов.

pipeline := bson.NewArray(
    bson.VC.DocumentFromElements(
        bson.EC.SubDocumentFromElements(
            "$match",
            bson.EC.SubDocumentFromElements("ocean",
                bson.EC.ArrayFromElements("$in",
                    bson.VC.String("Pacific Ocean"),
                    //bson.VC.String("Indian Ocean"),
                ),
            ),
            bson.EC.SubDocumentFromElements("callTypeName",
                    bson.EC.ArrayFromElements("$in",
                        bson.VC.String("Wookie"),
                        bson.VC.String("Unknown 13"),
                    ),
            ),
        ),
    ),
)
cur, err := collection.Aggregate(context.Background(), pipeline)

1 Ответ

0 голосов
/ 13 ноября 2018

Я подумал, что вопрос довольно ясен, не уверен, действительно ли первый комментатор действительно внимательно прочитал утверждение.

Что этот человек просил, чтобы динамически вставлять данные в виде списка данных в конвейер.

У меня была та же проблема с приложением vue, над которым работала моя команда.Используя предоставленные вами данные, вот общий шаблон:

Учитывая кусочек океанов

a := []string{"Pacific Ocean", "Indian Ocean"}

Создайте кусочек размером 0 типа * bson.Value

b := make([]*bson.Value, 0)

Переберите срез океана и добавьте преобразованные значения bson к срезу b

for _, v := range a {
    b = append(b, bson.VC.String(v))
}

Затем создайте пару ключ-значение, чтобы монго могло искать совпадения

c := bson.EC.ArrayFromElements("$in", b...)

Затемпередать c в конвейер

pipeline := bson.NewArray(
    bson.VC.DocumentFromElements(
        bson.EC.SubDocumentFromElements(
            "$match",
            bson.EC.SubDocumentFromElements("ocean", c),
        ),
    ),
)

Это должно дать вам представление о том, как динамически конвейер для callTypeNames

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...