Sử dụng $ group để lấy một mảng từ tất cả các tài liệu và sau đó $ giảm với $ concat để lấy một chuỗi:
db.col.aggregate([
{
$group: {
_id: null,
text: { $push: "$text" }
}
},
{
$project: {
text: {
$reduce: {
input: "$text",
initialValue: "",
in: {
$cond: [ { "$eq": [ "$$value", "" ] }, "$$this", { $concat: [ "$$value", " ", "$$this" ] } ]
}
}
}
}
}
])
Sau $group
bạn sẽ nhận được một tài liệu duy nhất chứa một mảng của tất cả text
các giá trị. Sau đó, $reduce
"quét" mảng và nối trạng thái (giá trị $$value
) với mặt hàng hiện đang được xử lý. Đối với trạng thái mục đầu tiên sẽ là một chuỗi trống vì vậy tôi đang sử dụng $cond
để tránh có khoảng trắng ở đầu.