Chương này giới thiệu về Ống dẫn Tích hợp MongoDB, chủ yếu được sử dụng cho phân tích thống kê, tương tự như câu lệnh group by trong SQL. Trong MongoDB shell, phân tích thống kê được thực hiện thông qua hàm db.collection.aggregate().

Khái niệm

Ống dẫn Tích hợp là một khái niệm trừu tượng xử lý dữ liệu như nước chảy qua một đường ống. Chúng ta có thể xử lý dữ liệu ở nhiều giai đoạn trong ống dẫn. Sau khi một giai đoạn xử lý dữ liệu, kết quả được chuyển đến giai đoạn tiếp theo để tiếp tục xử lý.

Ví dụ về việc áp dụng ống dẫn tích hợp trong phân tích thống kê:

  • Ở giai đoạn đầu, một lô dữ liệu văn bản được truy xuất từ bộ sưu tập dựa trên các điều kiện nhất định.
  • Ở giai đoạn thứ hai, dữ liệu văn bản đã truy xuất được nhóm và tổng hợp.
  • Ở giai đoạn thứ ba, dữ liệu tổng hợp từ giai đoạn thứ hai được sắp xếp.

Toàn bộ quá trình giống như một hoạt động ống dẫn nơi dữ liệu chảy vào từ một đầu ống dẫn, trải qua xử lý qua một số giai đoạn, và sau đó đưa ra kết quả cuối cùng.

Các Toán tử Được Hỗ trợ bởi Ống dẫn Tích hợp MongoDB

Dưới đây là các toán tử ống dẫn phổ biến được hỗ trợ bởi MongoDB:

Toán tử Mô tả
$match Giai đoạn $match được sử dụng để lọc dữ liệu văn bản dựa trên điều kiện, tương tự như điều kiện where trong SQL.
$group Giai đoạn $group được sử dụng để nhóm và tổng hợp dữ liệu văn bản, tương tự như mệnh đề group by trong SQL.
$sort Được sử dụng để sắp xếp dữ liệu.

Bước để Sử dụng Ống dẫn Tích hợp

Thường, ba bước được thực hiện:

  • Lọc dữ liệu mục tiêu sử dụng $match.
  • Nhóm và tổng hợp dữ liệu sử dụng $group.
  • Sắp xếp kết quả sử dụng $sort (tùy chọn).

Ví dụ:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

Tương đương SQL:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Lưu ý: Để biết thêm thông tin về phân tích thống kê tổng hợp, vui lòng tham khảo các chương tiếp theo.