近日被mongoDB的聚合難住了,條件:
1、表中有字段mac,pv,ip,dates,type
2、要求,根據ip來group,計算pv合計,不重復的mac數,不重復的ip數
3、下面是解決辦法,說明:MongoDB權威指南中使用的是對象,即"macs":{},然后在reduce里面用 in來查找,prev.macs[obj.mac]=""來添加,容易出現Unexpected number錯誤
現在改成數組,並且在finalize 中清除,感覺很方便
1 db.test.group({ 2 "key":"ip", 3 "initial":{"mac":0,"pv":0,"ip":0,"macs":[],"ips":[]}, 4 "$reduce":function(obj,prev){ 5 if(prev.macs.indexOf(obj.mac)<0){ 6 prev.mac = prev.macs.push(obj.mac); 7 } 8 if(prev.ips.indexOf(obj.ip)<0){ 9 prev.ip = prev.ips.push(obj.ip); 10 } 11 prev.pv+=obj.pv; 12 }, 13 "finalize":function(prev){ 14 prev.macs=[]; 15 prev.ips=[]; 16 }, 17 "condition":{"dates":"2014-05-09","type":"type1"} 18 });
如果有更好的辦法,煩請留言,共同探討
