看到的是如下语句,一直没觉得有问题:
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"} }
于是赶紧修改,等待上线!