- Bài 1: MongoDB - Tổng quan
- Bài 2: MongoDB - Điểm mạnh và lợi thế
- Bài 3: MongoDB - Thiết lập môi trường
- Bài 4: MongoDB - Mô hình dữ liệu
- Bài 5: MongoDB - Tạo Database
- Bài 6: MongoDB - Xoá Database
- Bài 7: MongoDB - Tạo Collection
- Bài 8: MongoDB - Xoá Colleciton
- Bài 9: MongoDB - Kiểu dữ liệu
- Bài 10: MongoDB - chèn Document
- Bài 11: MongoDB - truy vấn Document
- Bài 12: MongoDB - Cập nhật Document
- Bài 13: MongoDB - Xoá Document
- Bài 14: MongoDB - Projection
- Bài 15: MongoDB - Giới hạn bản ghi
- Bài 16: MongoDB - Sắp xếp bản ghi
- Bài 17: Mongodb - Index
- Bài 18: MongoDB - Aggregation
- Bài 19: MongoDB - Replication
- Bài 20: MongoDB - Shard
- Bài 21: MongoDB - Tạo backup
- Bài 22: MongoDB - Triển khai
- Bài 23: MongoDB - Java(P1)
- Bài 24: MongoDB - Java(p2)
- Bài 25: MongoDB - PHP
- Bài 26: MongoDB - Relationship
- Bài 27: MongoDB - Tham chiếu database
- Bài 28: MongoDB - Truy vấn Covered
- Bài 29: MongoDB - Phân tích truy vấn
- Bài 30: MongoDB - Toán tử Atomic
- Bài 31: MongoDB - Chỉ mục nâng cao
- Bài 32: MongoDB - Hạn chế chỉ mục (index)
- Bài 33: MongoDB - ObjectID
- Bài 34: MongoDB - Map Reduce
- Bài 35: MongoDB - Text Search
- Bài 36: MongoDB - Regular Expression
- Bài 37: MongoDB - Rockmongo
- Bài 38: MongoDB - GridFS
- Bài 39: MongoDB - Capped Collection
- Bài 40: MongoDB - Auto-Increment
Bài 18: MongoDB - Aggregation - MongoDB
Đăng bởi: Admin | Lượt xem: 1921 | Chuyên mục: SQL
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ả đã được tính toán. Các phép toán tập hợp nhóm các giá trị từ nhiều Document lại với nhau, và có thể thực hiện nhiều phép toán đa dạng trên dữ liệu đã được nhóm đó để trả về một kết quả duy nhất. Trong SQL, count(*) và GROUP BY là tương đương với Aggregation trong MongoDB.
1. Phương thức aggregate()
Với Aggregation trong MongoDB, bạn nên sử dụng phương thức aggregate().
Cú pháp
Cú pháp cơ bản của phương thức aggregate() là như sau:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Ví dụ
Trong Collection, bạn có dữ liệu sau:
{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
},
Từ Collection trên, nếu bạ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, thì bạn sẽ sử dụng phương thứcaggregate()như sau:
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{ "_id" : "tutorials point", "num_tutorial" : 2 }
{ "_id" : "Neo4j", "num_tutorial" : 1 }
>
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. Có một danh sách các biểu thức Aggregation có sẵn, được liệt kê dưới đây:
Expression | Description | Example |
---|---|---|
$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"}}}]) |
$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"}}}]) |
$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"}}}]) |
$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"}}}]) |
2. Khái niệm Pipeline
Trong UNIX, lệnh shell pipeline nghĩa là khả năng để thực thi một hoạt động trên một số input và sử dụng output như là input cho lệnh tiếp theo, và... MongoDB cũng hỗ trợ cùng khái niệm pipeline đó trong Aggregation Framework. Có một tập hợp các giai đoạn có thể có và mỗi giai đoạn đó lấy một tập hợp các Document như là một input và tạo ra một tập các Document kết quả (hoặc kết quả cuối cùng JSON Document tại phần cuối của pipeline). Kết quả này, sau đó, sẽ lại được sử dụng cho giai đoạn tiếp theo …
Các giai đoạn có thể có trong Aggregation Framework là:
- $project: Được sử dụng để chọn một số trường cụ thể từ một Collection.
- $match: Đây là một hoạt động lọc và vì thế nó có thể giảm số Document mà được cung cấp như là input cho giai đoạn kế tiếp.
- $group: Thực hiện Aggregation thực sự, như đã trình bày ở trên.
- $sort: Sắp xếp các Document.
- $skip: Nhảy qua số Document đã cung cấp.
- $limit: Giới hạn số Document.
- $unwind: Được sử dụng để chia một Document đang sử dụng mảng thành nhiều Document. Sử dụng hoạt động này sẽ tạo một số lượng Document cho bước tiếp theo.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: MongoDB - Tổng quan
- Bài 2: MongoDB - Điểm mạnh và lợi thế
- Bài 3: MongoDB - Thiết lập môi trường
- Bài 4: MongoDB - Mô hình dữ liệu
- Bài 5: MongoDB - Tạo Database
- Bài 6: MongoDB - Xoá Database
- Bài 7: MongoDB - Tạo Collection
- Bài 8: MongoDB - Xoá Colleciton
- Bài 9: MongoDB - Kiểu dữ liệu
- Bài 10: MongoDB - chèn Document
- Bài 11: MongoDB - truy vấn Document
- Bài 12: MongoDB - Cập nhật Document
- Bài 13: MongoDB - Xoá Document
- Bài 14: MongoDB - Projection
- Bài 15: MongoDB - Giới hạn bản ghi
- Bài 16: MongoDB - Sắp xếp bản ghi
- Bài 17: Mongodb - Index
- Bài 18: MongoDB - Aggregation
- Bài 19: MongoDB - Replication
- Bài 20: MongoDB - Shard
- Bài 21: MongoDB - Tạo backup
- Bài 22: MongoDB - Triển khai
- Bài 23: MongoDB - Java(P1)
- Bài 24: MongoDB - Java(p2)
- Bài 25: MongoDB - PHP
- Bài 26: MongoDB - Relationship
- Bài 27: MongoDB - Tham chiếu database
- Bài 28: MongoDB - Truy vấn Covered
- Bài 29: MongoDB - Phân tích truy vấn
- Bài 30: MongoDB - Toán tử Atomic
- Bài 31: MongoDB - Chỉ mục nâng cao
- Bài 32: MongoDB - Hạn chế chỉ mục (index)
- Bài 33: MongoDB - ObjectID
- Bài 34: MongoDB - Map Reduce
- Bài 35: MongoDB - Text Search
- Bài 36: MongoDB - Regular Expression
- Bài 37: MongoDB - Rockmongo
- Bài 38: MongoDB - GridFS
- Bài 39: MongoDB - Capped Collection
- Bài 40: MongoDB - Auto-Increment