Как объединить результаты строк из нескольких записей MongoDB в один результат в MongoDB? - PullRequest
1 голос
/ 25 апреля 2019

Предполагая следующие записи:

{ text: "foo"},
{ text: "bar"}

Как я могу получить такой результат, как:

results: "foo bar"

Самое близкое, что я получаю, - это использование $addToSet, но это просто создает массив с результатами вместо одной строки, что я действительно хочу.

results: [ "foo", "bar" ] 

Использование Mongo 3.4

1 Ответ

1 голос
/ 25 апреля 2019

Используйте $ group , чтобы получить массив из всех документов, а затем $ уменьшите с помощью $ concat , чтобы получить одну строку:

db.col.aggregate([
    {
        $group: {
            _id: null,
            text: { $push: "$text" }
        }
    },
    {
        $project: {
            text: {
                $reduce: {
                    input: "$text",
                    initialValue: "",
                    in: {
                        $cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
                    }
                }
            }
        }
    }
])

После $group вы получите один документ, который содержит массив всех значений text. Затем $reduce «сканирует» массив и объединяет состояние ($$value) с обрабатываемым в данный момент элементом. Для первого состояния элемента будет пустая строка, поэтому я использую $cond, чтобы избежать пробелов в начале.

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