$sum operator - sum of salary by group in MongoDB

You are here : Home / MongoDB Tutorial


Contents of page >

$sum operator in MongoDB >
$sum operator returns the sum of all numeric values of documents in the collection in MongoDB.
1) First let's create insert documents in collection in MongoDB


1.1) Let's create new collection and insert document in it before finding >
db.employee.insert({_id : 1,  firstName:"ank", salary : 1000 })
db.employee.insert({_id : 2,  firstName:"ank", salary : 2000 })
db.employee.insert({_id : 3,  firstName:"sag", salary : 3000 })
db.employee.insert({_id : 4,  firstName:"sag", salary : 4000 })
db.employee.insert({_id : 5,  firstName:"neh", salary : 5000 })
Above will create collection (or table) (if collection already exists it will insert documents in it).


1.2) FIND > Query all documents of collection using find() method>
db.employee.find()
Output>
{ "_id" : 1, "firstName" : "ank", "salary" : 1000 }
{ "_id" : 2, "firstName" : "ank", "salary" : 2000 }
{ "_id" : 3, "firstName" : "sag", "salary" : 3000 }
{ "_id" : 4, "firstName" : "sag", "salary" : 4000 }
{ "_id" : 5, "firstName" : "neh", "salary" : 5000 }


2) Find sum of salary of all employee with same firstName in collection in MongoDB >


Step 2.1 - We will group employee by firstName and find sum of salary of each group.
Step 2.2- We will use aggregate() method, $sum operator and $group operator.
db.employee.aggregate([{$group : {_id : "$firstName", salary_sum : {$sum : "$salary"}}}])
Output >
{ "_id" : "ank", "salary_sum" : 3000 }
{ "_id" : "sag", "salary_sum" : 7000 }
{ "_id" : "neh", "salary_sum" : 5000 }


2.3) Sql query equivalent to above MongoDB query is >
select firstName, sum(salary) salary_sum from employee group by firstName;


3) Find sum of salary of all employee in collection in MongoDB >


Step 3.1) - We will group employee by null (nothing) and find sum of salary of group (there will be only 1 group - i.e. whole documents of collection)
Step 3.2)- We will use aggregate() method, $group operator, and _id : null
db.employee.aggregate([{$group : {_id : null, salary_sum : {$sum : "$salary"}}}])
Output >
{ "_id" : null, "salary_sum" : 15000 }


3.3) Sql query equivalent to above MongoDB query is >
select sum(salary) salary_sum from employee;

4) How to write aggregate query with where clause in MongoDB >


Find sum of salary of all employee with same firstName where salary > 2000 in collection in MongoDB >
Step 4.1 - We will find document where salary > 2000
Step 4.2 - We will use $match operator
Step 4.3 - Then we will group employee by firstName and find sum of salary of each group.
Step 4.4 - We will use aggregate() method, $group operator


db.employee.aggregate([
 { $match: { salary : { $gt: 2000} } },
 {$group : {_id : "$firstName", salary_sum : {$sum : "$salary"}}}])
Output >
{ "_id" : "sag", "salary_sum" : 7000 }
{ "_id" : "neh", "salary_sum" : 5000 }


4.5) Sql query equivalent to above MongoDB query is >
select firstName, sum(salary) salary_sum from employee
where salary > 2000
group by firstName


5) Summary -
So in this MongoDB tutorial we learned how to use $sum operator. $sum operator returns the sum of all numeric values of documents in the collection in MongoDB.


Find sum of salary of all employee with same firstName in collection in MongoDB >
db.employee.aggregate([{$group : {_id : "$firstName", salary_sum : {$sum : "$salary"}}}])


Find sum of salary of all employee in collection in MongoDB >
db.employee.aggregate([{$group : {_id : null, salary_sum : {$sum : "$salary"}}}])


Find sum of salary of all employee with same firstName where salary > 2000 in collection in MongoDB >
db.employee.aggregate([
 { $match: { salary : { $gt: 2000} } },
 {$group : {_id : "$firstName", salary_sum : {$sum : "$salary"}}}])


Having any doubt? or you liked the tutorial! Please comment in below section.
Please express your love by liking JavaMadeSoEasy.com (JMSE) on facebook, following on google+ or Twitter. You may join our fbGroup or linkedInGroup as well.


RELATED LINKS>

eEdit
Must read for you :