带有projection和GroupBy参数的MongoDB查询聚合结果

带有projection和GroupBy参数的MongoDB查询聚合结果,mongodb,group-by,concat,Mongodb,Group By,Concat,我收集了三份文件 示例: 所有文档都包括以下字段: Cid、AppName、imageHits(int)、计数器(int)、imageNames(String) 我想在Cid和AppName上使用$group,并且我在计数器(int)和图像点击(int)上执行$sum操作。在这之前,我得到了预期的结果 { "_id" : { "cust_id" : "4" , "app" : "flipkart"} , "imageHits" : 10 , "counter" : 6} { "_id" : {

我收集了三份文件

示例:

所有文档都包括以下字段:

Cid、AppName、imageHits(int)、计数器(int)、imageNames(String)

我想在
Cid
AppName
上使用
$group
,并且我在
计数器(int)
图像点击(int)
上执行
$sum
操作。在这之前,我得到了预期的结果

{ "_id" : { "cust_id" : "4" , "app" : "flipkart"} , "imageHits" : 10 , "counter" : 6}
{ "_id" : { "cust_id" : "1" , "app" : "gmail"} , "imageHits" : 1 , "counter" : 5}
我的聚合查询:

BasicDBObject groupquery = new BasicDBObject(); 
BasicDBObject filter = new BasicDBObject("_id",new BasicDBObject("cust_id","$cid").append("app","$an"));
filter.append("imageHits",n‌​ew BasicDBObject("$sum","$ph"));
filter.append("counter",new BasicDBObject("$sum","$pg"));
groupquery.put("$group",filter); 
DBObject sortFields = new BasicDBObject("an", -1); 
DBObject sort=new BasicDBObject("$sort",sortFields); 
AggregationOutput aggregate=table.aggregate(matchQuery,sort,projection,groupquery);
Iterable<DBObje‌​ct> results=aggregate.results();
for (DBObject dbObject:results1{System.out.(dbObject);} 

BasicDBObject groupquery=new BasicDBObject();
BasicDBObject筛选器=新的BasicDBObject(“\u id”,新的BasicDBObject(“cust\u id”,“$cid”)。追加(“app”,“$an”);
filter.append(“imageHits”,n‌​ew基本对象(“$sum”和“$ph”);
filter.append(“counter”,新的BasicDBObject(“$sum”,“$pg”));
groupquery.put(“$group”,过滤器);
DBObject sortFields=newBasicDBObject(“an”,-1);
DBObject sort=新的BasicDBObject(“$sort”,sortFields);
AggregationOutput aggregate=table.aggregate(匹配查询、排序、投影、groupquery);
Iterable results=聚合.results();
for(DBObject-DBObject:results1{System.out.(DBObject);}

现在我需要
imageNames(String)
$concate
,其中
$group
应该是相同的。

您能给我们看一个示例文档和预期的输出吗?请提供您的聚合查询。BasicDBObject groupquery=new BasicDBObject();BasicDBObject filter=new BasicDBObject(“\u id”,new BasicDBObject(“cust\u id”,“$cid”).append(“app”、“$an”);filter.append(“imageHits”,new basicdbobobject(“$sum”、“$ph”);filter.append(“counter”,new BasicDBObject(“$sum”、“$pg”);groupquery.put(“$group”,filter);DBObject sortFields=new BasicDBObject(“$sort”,sortFields);aggregationoutaggregate=table.aggregate(matchQuery,sort,projection,groupquery);Iterable results=aggregate.results();for(DBObject DBObject:results1{System.out.(DBObject);}我得到了答案,我们必须使用object.append(“imageNames”,new BasicDBObject($push“,“$imageNames”);以及groupBy操作来获取特定文档的图像名称数组