Lọc document sớm trong pipeline với $match
Stage $match trong aggregation hoạt động giống find(), lọc document trước khi xử lý các stage sau, tối ưu hiệu năng.
Dữ liệu khách hàng
> db.demo358.insertOne({"ClientId": 101, "ClientName": "Chris", "ClientAge": 34});
> db.demo358.insertOne({"ClientId": 102, "ClientName": "David", "ClientAge": 32});
> db.demo358.insertOne({"ClientId": 103, "ClientName": "David", "ClientAge": 35});
> db.demo358.insertOne({"ClientId": 104, "ClientName": "Bob", "ClientAge": 31});
> db.demo358.insertOne({"ClientId": 105, "ClientName": "Chris", "ClientAge": 36});
Đếm số document ClientName="David"
> db.demo358.aggregate([
{ $match: { "ClientName": "David" } },
{ $count: "ClientName" }
]);
Kết quả
{ "ClientName": 2 }
Lợi ích $match sớm:
- Giảm số document xử lý ở stage sau
- Có thể dùng index (nếu $match là stage đầu tiên)
- Cú pháp giống find() hoàn toàn
$count: Stage đếm document, output field name do ta đặt.