Microsoft PowerPoint MongoDB 2 pptx Aggregation Pipeline PART 3 – LESSON 2 Aggregation Aggregation có thể hiểu là sự tập hợp Các Aggregation operation xử lý các bản ghi dữ liệu và trả về kết quả đã.
Trang 1Aggregation & Pipeline
PART 3 – LESSON 2
Trang 2Trong SQL, count(*) và GROUP BY là tương đương với Aggregation trong MongoDB.
Trang 3Phương thức aggregate()
Với Aggregation trong MongoDB sử dụng phương thức aggregate()
Trang 5Từ Collection trên, muốn hiển thị một danh sách có bao nhiêu bài hướng dẫn được viết bởi mỗi người dùng sử dụng phương thức aggregate() như sau:
Truy vấn SQL tương đương cho trường hợp trên là select by_user, count(*) from
mycol group by by_user Trong ví dụ trên, chúng ta đã nhóm các Document bởi
trường by_user và trên mỗi lần xuất hiện của by_user, giá trị trước đó của tổng sẽ được tăng lên
Trang 6Biểu thức Miêu tả Ví dụ
$sum Tổng giá trị được xác định từ tất cả Document
trong Collection đó db.mycol.aggregate([{$group : {_id : "$by_user",
num_tutorial : {$sum : "$likes"}}}])
$avg Tính trung bình của tất cả giá trị đã cho từ tất cả
Document trong Collection đó db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min Lấy giá trị nhỏ nhất của các giá trị từ tất cả Document
trong Collection đó db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max Lấy giá trị lớn nhất của các giá trị từ tất cả Document
trong Collection đó db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push Chèn giá trị vào trong một mảng trong Document kết
quả db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet Chèn giá trị tới một mảng trong Document kết quả,
nhưng không tạo các bản sao db.mycol.aggregate([{$group : {_id : "$by_user", url
: {$addToSet : "$url"}}}])
$first Lấy Document đầu tiên từ Source Document theo
nhóm db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last Lấy Document cuối cùng từ Source Document theo
nhóm db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
Trang 7Trươc hết là về pipeline, nó là khái niệm dùng để miêu tả sự xử lí, truyền tải dữ liệu xuôi theo một luồng Và Aggregation Pipeline là một framework dùng để tổng hợp lại dữ liệu được mô hình hóa dựa trên kỹ thuật pipeline
Những Document có thể được đưa qua một chuỗi các giai đoạn pipeline để biến đổi và kết quả nhận được sẽ là sự tổng hợp của các so sánh, sàng lọc, thêm bớt nội dung
Mỗi giai của pipeline biến đổi các Document khi chúng đi qua, thậm chí là tạo ra loại Document khác hẳn ban đầu, kết quả bước trước làm đầu vào cho bước sau
Nhìn chung truy vấn bằng SQL có thể làm được những gì thì với Aggregation Pipeline của Mongodb( NoSQL ) cũng có thể làm được điều đó Thậm chí là khi nhìn vào truy vấn bạn còn dễ hình dung các bước xử lí và kết quả đầu ra hơn là thao tác với SQL
Trang 9Operator của Aggregation Pipeline
Toán tử $group: Dùng tương tự như Group By trong SQL Phải kết hợp với Count, Sum, Min, Max… Xem ví dụ phía dưới:
Trang 10Filter categories theo các manufacturer bằng câu lệnh $addToSet và tính giá trung bình của sảnphẩm theo manufacturer bằng câu lệnh $avg.
Trang 11 Câu lệnh trước group lại category theo manufacture nhưng xóa category bị trùng.
Kết quả ra tương tự như dùng $addToSet nhưng các category bị trùng sẽ không bị xóa đi
Trang 12Toán tử $match: Dùng để lọc các Document, chỉ cho phép chuyển các Document phù hợp với tập điều kiện được chỉ định sang giai đoạn pipeline tiếp theo (nếu có).
Cú pháp:
Trang 13 Cho các document:
Nếu muốn lấy ra những kết quả có tên là "bosalino kizaru" ta sẽ làm như sau :
Trang 14Toán tử $addFields: Cũng với dữ liệu như trên, bây giờ mình lại muốn thêm vào kết quả một vài trường dữ liệu bằng $addFields.
Có thể thấy sau khi thêm 2 trường chuc_vu, gioi_tinh thì kết quả được kế thừa lại tới bước tiếp theo để cuối cùng ta được tổng hợp cả 3 trường Đúng với tư tưởng của kỹ thuật
pipeline
Trang 15Toán tử $project: Khi Document của chúng ta có quá nhiều fields, và tất nhiên ta chỉ muốn lấy 1 vài dữ liệu có ích thì dùng project là một lựa chọn.
Trang 17Như các bạn thấy, trong $project chúng ta cũng có thể thêm các trường dữ liệu tự định nghĩa, và sâu bên trong toán tử chúng ta hoàn toàn sử dụng chèn vào toán tử khác để
có được kết quả mong muốn
Bằng cách này, sau khi query thì dữ liệu trả về có khả năng tùy biến về cả số lượng, nội dung, phân cấp như mong muốn rất thuận tiện cho những xử lí về sau bằng các ngôn ngữ lập trình
Trang 18Sắp xếp dữ liệu dùng $sort Ví dụ sắp xếp giá theo giảm dần.
Trang 19$skip và $limit.
Trang 20$first và $last.
(muốn query ra các sản phẩm cũ nhất thì cũng sử dụng câu query trên thay $first bằng $last)
Trang 21Hiển thị ra các item theo từng sizes một (tức là tách mảng sizes ra từng bản ghi riêng rẽ dùng
$unwind
Trang 23Bài 1 Lấy ra các bản ghi có country là Spain, và city là Salamanca.
Bài 2 Lấy thông tin country, city and tên trường đại học của mỗi document