Để chỉ hiển thị phần tử được tìm thấy trong mảng, sử dụng aggregate(). Tạo collection:
> db.demo204.insertOne(
{
"_id" : 101,
"Name" : "Chris",
"Age" : 23,
"details" : [
{
"id" : "1001",
"empId" : "John_1001",
"salary" : "50000",
"Technology" : "Java"
},
{
"id" : "1002",
"empId" : "John_1002"
},
{
"id" : "1003",
"empId" : "John_10003",
"salary" : "60000",
"Technology" : "MongoDB"
}
]
}
);
{ "acknowledged" : true, "insertedId" : 101 }
Hiển thị tất cả tài liệu:
> db.demo204.find();
Kết quả:
Truy vấn aggregation để chỉ lấy phần tử có id="1001" và hiển thị trường Technology:
> db.demo204.aggregate([ { "$match": { "details.id": "1001" }}, { "$unwind": "$details" }, { "$match": { "details.id": "1001" }}, { "$project": { "Technology": "$details.Technology", "_id": 0 }} ])Kết quả - chỉ trả về Technology của phần tử khớp:
Quy trình: 1)
$matchlọc tài liệu chứa phần tử mục tiêu, 2)$unwindphân tách mảng, 3)$matchlần 2 lọc chính xác phần tử, 4)$projectchọn trường cần thiết.