MongoDB SELECT COUNT GROUP BY
This would be the easier way to do it using aggregate
:
db.contest.aggregate([ {"$group" : {_id:"$province", count:{$sum:1}}}])
I need some extra operation based on the result of aggregate function. Finally I've found some solution for aggregate function and the operation based on the result in MongoDB. I've a collection Request
with field request, source, status, requestDate
.
Single Field Group By & Count:
db.Request.aggregate([ {"$group" : {_id:"$source", count:{$sum:1}}}])
Multiple Fields Group By & Count:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}])
Multiple Fields Group By & Count with Sort using Field:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"_id.source":1}}])
Multiple Fields Group By & Count with Sort using Count:
db.Request.aggregate([ {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}, {$sort:{"count":-1}}])
If you need multiple columns to group by, follow this model. Here I am conducting a count by status
and type
:
db.BusinessProcess.aggregate({ "$group": { _id: { status: "$status", type: "$type" }, count: { $sum: 1 } } })