MongoDB group 數據不同字段distinct問題解決辦法


近日被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 });

 如果有更好的辦法,煩請留言,共同探討


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM