Sử dụng $group trong Aggregation Framework để distinct trên nhiều trường (compound distinct).
Ví dụ minh họa
Tạo collection distinctWithMultipleKeysDemo:
> db.distinctWithMultipleKeysDemo.insertOne({"TenSinhVien": "Mike", "TuoiSinhVien": 22, "DiemToan": 56});
> db.distinctWithMultipleKeysDemo.insertOne({"TenSinhVien": "Mike", "TuoiSinhVien": 22, "DiemToan": 56});
> db.distinctWithMultipleKeysDemo.insertOne({"TenSinhVien": "Bob", "TuoiSinhVien": 23, "DiemToan": 45});
> db.distinctWithMultipleKeysDemo.insertOne({"TenSinhVien": "Bob", "TuoiSinhVien": 23, "DiemToan": 45});
> db.distinctWithMultipleKeysDemo.insertOne({"TenSinhVien": "Carol", "TuoiSinhVien": 27, "DiemToan": 54});
Dữ liệu: 3 cặp giá trị duy nhất (Mike/22, Bob/23, Carol/27) - mỗi cặp trùng 2 lần.
Truy vấn distinct trên TenSinhVien + TuoiSinhVien
> db.distinctWithMultipleKeysDemo.aggregate([
{$group: {_id: {TenSinhVien: "$TenSinhVien", TuoiSinhVien: "$TuoiSinhVien"}}}
]);
Kết quả:
{ "_id": {"TenSinhVien": "Carol", "TuoiSinhVien": 27} }
{ "_id": {"TenSinhVien": "Bob", "TuoiSinhVien": 23} }
{ "_id": {"TenSinhVien": "Mike", "TuoiSinhVien": 22} }
Mở rộng: Thêm $project để format output, $sort để sắp xếp, $count để đếm tổng.
Lưu ý: MongoDB không hỗ trợ distinct() trực tiếp trên nhiều trường. Aggregation là cách chuẩn.