Lọc mảng con và giữ lại phần tử khớp điều kiện
Sử dụng $addFields kết hợp $filter để tạo trường mới chỉ chứa các phần tử thỏa mãn điều kiện.
Dữ liệu môn học
> db.demo334.insertOne({
"Name": "Chris",
"Age": 21,
"details": [
{ "Subject": "MySQL", "Score": 78 },
{ "Subject": "MongoDB", "Score": 45 }
]
});
Lọc môn có Score >= 70
> db.demo334.aggregate([
{
$addFields: {
details: {
$filter: {
input: '$details',
as: 'out',
cond: { $gte: ['$$out.Score', 70] }
}
}
}
}
]);
Kết quả
{
"_id": ObjectId("..."),
"Name": "Chris",
"Age": 21,
"details": [{ "Subject": "MySQL", "Score": 78 }]
}
Giải thích: $$out tham chiếu đến từng phần tử trong mảng input. $filter trả về mảng mới chỉ chứa phần tử thỏa cond.