发现java读取mongo生成报表的一个项目bug

看到的是如下语句,一直没觉得有问题:

groupFields.append("_id","$ProductId").append("_id", "$ProjectId");

//groupFields= new Document("_id","$ProductId").append("_id", "$ProjectId");

下面的语句则是控制更细分的维度报表条件:

if(groupList!=null && groupList.size()>0){

for(String groupField:groupList){

groupFields.append("_id", "$"+groupField);

}

}

最后完全理解了产品说的报表问题后,对比如下的mongo shell 语句反思找到问题:

ui : default group

db.adnstats.aggregate([{$group : {_id : {"ProductId":"$ProductId","ProjectId":"$ProjectId"},"GroupId":{$addToSet : "$GroupId"}, group_total : {$sum : 1},request_total : {$sum : "$Request"},ImpNormal_total : {$sum : "$ImpNormal"},ClNormal_total : {$sum : "$ClNormal"},ClkInvalid_total : {$sum : "$ClkInvalid"}}}])

ui : default group + AdPosId

db.adnstats.aggregate([{$group : {_id : {"ProductId":"$ProductId","ProjectId":"$ProjectId","AdPosId":"$AdPosId"},"GroupId":{$addToSet : "$GroupId"}, group_total : {$sum : 1},request_total : {$sum : "$Request"},ImpNormal_total : {$sum : "$ImpNormal"},ClNormal_total : {$sum : "$ClNormal"},ClkInvalid_total : {$sum : "$ClkInvalid"}}}])

问题定位:

java中的 groupFields.append("_id","$ProductId").append("_id", "$ProjectId"); 导致的效果是,生成了 

{"_id", "$ProjectId"} 而不是需要的 {_id : {"ProductId":"$ProductId","ProjectId":"$ProjectId"},

所以在细分到广告位的维度后,其实java 生成的条件是 { _id:"$AdPosId"} 而不是我们真正需要的 

{_id : {"ProductId":"$ProductId","ProjectId":"$ProjectId","AdPosId":"$AdPosId"} }

于是赶紧修改,等待上线!

你可能感兴趣的:(发现java读取mongo生成报表的一个项目bug)