Hiện tại có một số hạn chế trong những gì mà khung tổng hợp có thể làm để cải thiện hiệu suất truy vấn của bạn, nhưng bạn có thể giúp nó theo cách sau:
db.my_collection.aggregate([
{ "$sort" : { "LOG_TYPE" : 1 } },
{ "$group" :{
"_id": "$LOG_TYPE",
"COUNT": { "$sum":1 }
}}
])
Bằng cách thêm một loại trên LOG_TYPE, bạn sẽ "buộc" trình tối ưu hóa sử dụng một chỉ mục trên LOG_TYPE để sắp xếp các tài liệu. Điều này sẽ cải thiện hiệu suất theo một số cách, nhưng khác nhau tùy thuộc vào phiên bản đang được sử dụng.
Trên dữ liệu thực nếu bạn có sắp xếp dữ liệu ở giai đoạn nhóm $, nó sẽ cải thiện hiệu quả của việc tích lũy các tổng. Bạn có thể thấy các kế hoạch truy vấn khác nhau trong đó với $ sort, nó sẽ sử dụng chỉ mục khóa phân đoạn. Sự cải thiện này mang lại hiệu suất thực tế sẽ phụ thuộc vào số lượng giá trị trong mỗi "nhóm" - nói chung LOG_TYPE chỉ có bảy giá trị riêng biệt khiến nó trở thành một khóa phân đoạn cực kỳ kém, nhưng điều đó có nghĩa là tất cả khả năng mã sau sẽ là nhanh hơn nhiều so với tổng hợp thậm chí được tối ưu hóa:
db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
print(db.my_collection.count({"LOG_TYPE":lt});
});