Ví dụ
Làm thế nào để có được tổng kết của amount
?
> db.transactions.aggregate[
[
{
$group : {
_id : '$cr_dr',
count : {$sum : 1}, //counts the number
totalAmount : {$sum : '$amount'} //sums the amount
}
}
]
];
Và kết quả là
{
"_id" : "C",
"count" : 3.0,
"totalAmount" : 120.0
}
{
"_id" : "D",
"count" : 5.0,
"totalAmount" : 410.0
}
Một phiên bản khác tổng hợp amount
và fee
> db.transactions.aggregate[
[
{
$group : {
_id : '$cr_dr',
count : {$sum : 1},
totalAmount : {$sum : { $sum : ['$amount', '$fee']}}
}
}
]
];
Và kết quả là
{
"_id" : "C",
"count" : 3.0,
"totalAmount" : 128.0
}
{
"_id" : "D",
"count" : 5.0,
"totalAmount" : 422.0
}
Tổng hợp được sử dụng để thực hiện phép tính hoặc thao tác trên một nhóm giá trị từ nhiều tài liệu [hàng]. Kết quả của một hàm tổng hợp là một giá trị duy nhất được tính toán
Trong SQL Server 2012, một hệ thống RDBMS phổ biến, chúng tôi có sẵn chức năng tổng hợp sau
- AVG
- TỐI THIỂU
- CHECKSUM_AGG
- TỔNG
- ĐẾM
- STDEV
- COUNT_BIG
- STDEVP
- NHÓM
- VAR
- GROUPING_ID
- VARP
- TỐI ĐA
Trong MongoDB, chúng ta có thể thực hiện chức năng tổng hợp bằng ba cách tiếp cận khác nhau
1. đường ống tổng hợp
2. Bản đồ-Giảm
3. Tổng hợp một mục đích
đường ống tổng hợp
Phương thức đường ống tổng hợp là một khung để thực hiện tác vụ tổng hợp. Về mặt kỹ thuật, MongoDB chuyển các tài liệu [hàng] của một bộ sưu tập [bảng] thông qua một đường dẫn. Dữ liệu được xử lý trong mỗi đường ống và kết quả được chuyển sang đường ống tiếp theo và cuối cùng, kết quả tính toán được trả về. Cách tiếp cận này sử dụng phương thức “aggregate[]” do MongoDB cung cấp
Cú pháp sử dụng phương pháp Đường ống tổng hợp như sau
db. bộ sưu tập_name. tổng hợp[group_by_field_name, [matching_criteria]]
Ví dụ: hãy xem xét chúng tôi có dữ liệu nhân viên sau
Để thêm dữ liệu vào MongoDB, chúng ta có thể đưa ra lệnh sau trên trình bao MongodB. Thao tác này sẽ tạo một bộ sưu tập nhân viên [bảng] và chèn tất cả tài liệu [hàng] vào đó
db. người lao động. chèn[
[
{EmpName. 'Sam Pitroda',Tuổi. 35,Lương. 3126,Giới tính. 'M', Phòng. 10},
{EmpName. 'Anil Shastri',Tuổi. 48,Lương. 2724,Giới tính. 'M', Phòng. 20},
{EmpName. 'Bill Rama',Tuổi. 48,Lương. 2270,Giới tính. 'M', Phòng. 10},
{EmpName. 'John Butler', Tuổi. 45,Lương. 3622,Giới tính. 'M', Phòng. 30},
{EmpName. 'Srini Arya',Tuổi. 30,Lương. 3966,Giới tính. 'F', Phòng. 40},
{EmpName. 'Ajay Khanna',Tuổi. 49,Lương. 3711,Giới tính. 'M', Phòng. 20},
{EmpName. 'Supriya Khanna',Tuổi. 32,Lương. 3066,Giới tính. 'F', Phòng. 10},
{EmpName. 'Ismail Paun',Tuổi. 32,Lương. 3608,Giới tính. 'M', Phòng. 30},
{EmpName. 'Akshay Kumar',Tuổi. 22,Lương. 2651,Giới tính. 'M', Phòng. 10},
{EmpName. 'Steve Allan', Tuổi. 29,Lương. 4391,Giới tính. 'M', Phòng. 20},
{EmpName. 'Rahul Puri',Tuổi. 32,Lương. 2111,Giới tính. 'M', Phòng. 30},
{EmpName. 'Jayant Singh',Tuổi. 31,Lương. 2931,Giới tính. 'M', Phòng. 20},
{EmpName. 'Saurab Khanna',Tuổi. 39,Lương. 2566,Giới tính. 'M', Phòng. 20},
{EmpName. 'Pappu Kaun',Tuổi. 24,Lương. 4133,Giới tính. 'M', Phòng. 10}
]
]
Chúng tôi sẽ sử dụng phương pháp Đường ống tổng hợp để đọc tổng tiền lương của Phòng 10
tổng $
Để đọc tổng lương của từng bộ phận, chúng ta có thể viết hàm tổng hợp như thế này
db. người lao động. tổng hợp[{$group. {_nhận dạng. "$Dept", TotalSalary. {$sum. "$Salary"}}}]
Để đọc tổng số tiền lương cho một bộ phận cụ thể [Phòng 20], chúng ta có thể viết hàm tổng hợp như thế này
db. người lao động. tổng hợp[{$group
{_nhận dạng. "$Dept",TotalSalary. {$sum. "$Salary"}}},
{$match. {_nhận dạng. {$lt. 20}}}]
$trung bình
Để có được mức lương trung bình của tất cả các bộ phận, chúng ta có thể viết hàm tổng hợp sau trên trình bao MongoDB
db. người lao động. tổng hợp[{$group. {_nhận dạng. "$Dept", TotalSalary. {$trung bình. "$Salary"}}}]
$đầu tiên, $cuối cùng
Để có được mức lương tối đa và tối thiểu từ mỗi Phòng, chúng ta có thể viết lệnh sau trong trình bao MongodB
db. người lao động. tổng hợp[{$sort. {Lương. 1}},{$nhóm. {_nhận dạng. {Sở. "$Dept"},MaxOfSalary. {$đầu tiên. "$Salary"},MinOfSalary. {$last. "$Salary"}}}]