Để trích xuất (extract) một element cụ thể từ mảng con (sub-array) trong MongoDB, bạn sử dụng toán tử projection $elemMatch.
Tạo dữ liệu mẫu
> db.extractSubArrayDemo.insertOne(
{
_id: 101,
"clientName":"Larry",
"ClientDetails": [
{ "ClientProjectName":"Online Game", "DeveloperTeamSize": 10 },
{ "ClientProjectName":"Pig Dice Game", "DeveloperTeamSize": 12 },
{ "ClientProjectName":"Web Student Tracker", "DeveloperTeamSize": 11 }
]
}
);
{ "acknowledged" : true, "insertedId" : 101 }
Hiển thị document:
> db.extractSubArrayDemo.find().pretty();
Trích xuất element khớp điều kiện
Chỉ lấy element trong mảng
ClientDetailscóClientProjectName = "Pig Dice Game":> db.extractSubArrayDemo.find({ '_id': 101 },{ _id: 0, ClientDetails: { $elemMatch: {ClientProjectName: 'Pig Dice Game' } }}).pretty();Kết quả:
Giải thích $elemMatch (projection)
- Trả về element đầu tiên trong mảng khớp với điều kiện
- Chỉ hoạt động trong projection (tham số 2 của find)
- Khác với
$elemMatchtrong query (tham số 1) - dùng để match document - Nếu không có element nào khớp, trường mảng sẽ không xuất hiện trong kết quả
Cách này hiệu quả khi mảng lớn và bạn chỉ cần 1 element cụ thể thay vì tải toàn bộ mảng.