Используйте $ 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
, чтобы избежать пробелов в начале.