длина проекционного массива mongo-go-driver - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь получить прогноз для количества элементов в массиве документов.

options.SetProjection(bson.M{
    "foo": true,
    "nrOfBars": bson.M{ "$size": "$bars" },
})

bars - это имя поля массива.
Этот запрос всегда возвращает вместо 0длины массивов.

Как правильно запросить длину массива с новым mongo-go-драйвером?

1 Ответ

0 голосов
/ 18 февраля 2019

Вы пытаетесь использовать оператор агрегирования как часть проекционного документа.Проекционный документ предназначен для использования в простых запросах только для возврата определенных полей.

То, что вы хотите использовать, - это этап $project в конвейере агрегации .Это отличается от простого проекционного документа, и вы можете использовать более сложные операторы агрегирования, такие как $size.Вот пример кода, который, я считаю, делает то, что вы хотели бы:

ctx := context.TODO()

pipeline := bson.A{
    bson.D{{
        "$project",
        bson.D{
            {"foo", 1},
            {"nrOfBars", bson.D{
                {"$size", "$bar"},
            }},
        },
    }},
}

cur, err := col.Aggregate(ctx, pipeline)

Эта агрегация возвращает курсор.Чтобы получить доступ к результатам, вы должны выполнить итерацию курсора, как описано в документации по .

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