Ghép chuỗi mảng và trường khác với $reduce và $concat
Sử dụng $reduce duyệt mảng nối chuỗi, sau đó $concat ghép với trường khác trong aggregation pipeline.
Dữ liệu môn học
> db.demo359.insertOne({
Name1: "Chris",
Name2: "David",
Subjects: ["MySQL", "MongoDB", "Java"]
});
Pipeline nối chuỗi
> db.demo359.aggregate([
{
$project: {
values: {
$reduce: {
input: '$Subjects',
initialValue: '',
in: { $concat: ['$$value', ' ', '$$this'] }
}
},
Name1: 1
}
},
{
$project: {
'ConcatResult': { $concat: ['$Name1', '$values'] }
}
}
]);
Kết quả
{ "_id": ObjectId("..."), "ConcatResult": "Chris MySQL MongoDB Java" }
Giải thích:
- Stage 1: $reduce nối mảng Subjects thành chuỗi " MySQL MongoDB Java"
- Stage 2: $concat ghép Name1 + chuỗi trên
Cải tiến: Dùng $join (MongoDB 4.4+) đơn giản hơn: { $join: ["$Subjects", " "] }.