Utilisez $group pour obtenir un tableau de tous les documents, puis $reduce avec $concat pour obtenir une chaîne :
db.col.aggregate([
{
$group: {
_id: null,
text: { $push: "$text" }
}
},
{
$project: {
text: {
$reduce: {
input: "$text",
initialValue: "",
in: {
$cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
}
}
}
}
}
])
Après $group
vous obtiendrez un document unique contenant un tableau de tous les text
valeurs. Alors $reduce
"scanne" le tableau et concatène l'état ($$value
) avec l'élément en cours de traitement. Pour le premier élément, l'état sera une chaîne vide, j'utilise donc $cond
pour éviter d'avoir des espaces au début.