Använd $group för att hämta en array från alla dokument och sedan $reduce med $concat för att få en sträng:
db.col.aggregate([
{
$group: {
_id: null,
text: { $push: "$text" }
}
},
{
$project: {
text: {
$reduce: {
input: "$text",
initialValue: "",
in: {
$cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
}
}
}
}
}
])
Efter $group
du kommer att få ett enda dokument som innehåller en array av all text
värden. Sedan $reduce
"scannar" arrayen och sammanfogar tillståndet ($$value
) med för närvarande bearbetad artikel. För det första objektet kommer tillståndet att vara en tom sträng så jag använder $cond
för att undvika blanksteg i början.