æè¿æ ·ä¸ç»æ°æ®ï¼
{
"campaign_id": "A",
"campaign_name": "A",
"subscriber_id": "123"
},
{
"campaign_id": "A",
"campaign_name": "A",
"subscriber_id": "123"
},
{
"campaign_id": "A",
"campaign_name": "A",
"subscriber_id": "456"
}
æç
§ campaign_id ä¸ campaign_name åç»ï¼å¹¶æ¥è¯¢åºæ¯ä¸ªåç»ä¸çè®°å½æ¡æ° å subscriber_id ä¸åè®°å½ç个æ°
å
³ç³»åæ°æ®åºSQL示ä¾ï¼
select campaign_id,campaign_name,count(subscriber_id),count(distinct subscriber_id)
group by campaign_id,campaign_name from campaigns;
åæ
æç¤ºï¼ä»£ç å¯å·¦å³æå¨ï¼
å¨MongoDBä¸å°±åå¨ä¸¤ç§ç»åï¼
1ï¼ campaign_id, campaign_name, subscriber_id ä¸ä¸ªç¸åçå为ä¸ç»ï¼
2ï¼ campaign_id, campaign_name 两个ç¸åï¼subscriber_id ä¸åå为ä¸ç»ï¼
æåéè¿è¿ä¸¤ç§åç»æ¥è¯¢åºæç
§ campaign_id ä¸ campaign_name åç»ï¼subscriber_id ä¸åè®°å½ç个æ°
MongoDB示ä¾ï¼
db.campaigns.aggregate([
{ "$match": { "subscriber_id": { "$ne": null }}},
// Count all occurrences
{ "$group": {
"_id": {
"campaign_id": "$campaign_id",
"campaign_name": "$campaign_name",
"subscriber_id": "$subscriber_id"
},
"count": { "$sum": 1 }
}},
// Sum all occurrences and count distinct
{ "$group": {
"_id": {
"campaign_id": "$_id.campaign_id",
"campaign_name": "$_id.campaign_name"
},
"totalCount": { "$sum": "$count" },
"distinctCount": { "$sum": 1 }
}}])
åæ
æç¤ºï¼ä»£ç å¯å·¦å³æå¨ï¼
ææ¡£ç»æï¼
第ä¸ä¸ª groupï¼
{
"_id" : {
"campaign_id" : "A",
"campaign_name" : "A",
"subscriber_id" : "456"
},
"count" : 1
}
{
"_id" : {
"campaign_id" : "A",
"campaign_name" : "A",
"subscriber_id" : "123"
},
"count" : 2
}
第äºä¸ª groupï¼
{
"_id" : {
"campaign_id" : "A",
"campaign_name" : "A"
},
"totalCount" : 3,
"distinctCount" : 2
}
è³æ¤ï¼æä»¬å·²ç»æ¥è¯¢åºä¸å
±æ 3 æ¡è®°å½ï¼subscriber_id æä¸¤ç§ä¸åçå¼
å
³æ³¨å
¬ä¼å·ï¼å享干货ï¼è®¨è®ºææ¯
![]()