Sử dụng positional operator $ trong projection để chỉ trả về phần tử khớp.
Tạo collection
> db.getASpecificObjectDemo.insertOne({
_id: 1,
"CustomerName": "Larry",
"CustomerDetails": {
"CustomerPurchaseDescription": [
{ "id": 100, "ProductName": "Product-1", "Amount": 10000 },
{ "id": 101, "ProductName": "Product-2", "Amount": 10500 },
{ "id": 102, "ProductName": "Product-3", "Amount": 10200 }
]
}
});
{ "acknowledged": true, "insertedId": 1 }
Hiển thị tài liệu
> db.getASpecificObjectDemo.find().pretty();
Lấy phần tử có id = 101 trong mảng
> db.getASpecificObjectDemo.find(
{ _id: 1, "CustomerDetails.CustomerPurchaseDescription.id": 101 },
{ _id: 0, "CustomerDetails.CustomerPurchaseDescription.$": 1 }
);
Kết quả (chỉ phần tử id=101):
{
"CustomerDetails": {
"CustomerPurchaseDescription": [
{ "id": 101, "ProductName": "Product-2", "Amount": 10500 }
]
}
}
Giải thích: Toán tử $ (positional) trong projection đại diện cho phần tử đầu tiên trong mảng khớp điều kiện truy vấn. Chỉ hoạt động khi truy vấn có điều kiện trên trường của mảng đó.