Rams
Rams

Reputation: 2189

Select count group by mongodb

I'm trying to convert following sql query into mongodb but I couldn't finish it

select campaign_id,campaign_name,count(subscriber_id) 
    group by campaign_id,campaign_name from campaigns;

Here is my partial mongodb query

db.campaigns.aggregate([
    {$group: { 
        _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
        count: {$sum: "$subscriber_id"}
    }}
])

Upvotes: 0

Views: 1737

Answers (1)

JohnnyHK
JohnnyHK

Reputation: 312115

To emulate SQL count(subscriber_id) you can prepend a $match stage to your pipeline to filter out docs where subscriber_id is either missing or set to null and then you can just use a simple {$sum: 1} for your count:

db.campaigns.aggregate([
    {$match: {subscriber_id: {$ne: null}}},
    {$group: { 
        _id: {campaign_id: "$campaign_id",campaign_name: "$campaign_name"},
        count: {$sum: 1}
    }}
])

Upvotes: 2

Related Questions