2013-03-22 114 views
2

ID字段写入多个组在下面的查询如何在MongoDB的Java驱动程序

{ $group : { 
     _id : { success:'$success', responseCode:'$responseCode', label:'$label'}, 
     max_timeStamp : { $timeStamp : 1 }, 
     count_responseCode : { $sum : 1 }, 
     avg_value : { $sum : "$value" }, 
     count_success : { $sum : 1 } 
    }} 

如何_id : { success:'$success', responseCode:'$responseCode', label:'$label'},可以翻译在java中的MongoDB驱动程序才能使用。

我试图

BasicDBList list = new BasicDBList(); 
list.add(new BasicDBObject("success", "$success")); 
list.add(new BasicDBObject("responseCode", "$responseCode")); 
list.add(new BasicDBObject("label", "$label")); 
AggregationOutput output = collection.aggregate(match, project, group); 

多维数组

String [][] muitiGroupBy = {{"success", "$success"},{"responseCode", "$responseCode"},{"label", "$label"}}; 

等。

但我总是得到这样的结果

"_id" : [ { "success" : "$success"} , { "responseCode" : "$responseCode"}] 

如果我只使用一个领域它的作品。 DBObject groupFields = new BasicDBObject(“_id”,new BasicDBObject(“success”,“$ success”));}};}};}};

回答

4

我们弄清楚了方法。我们可以通过使用this来实现。

Map<String, Object> dbObjIdMap = new HashMap<String, Object>(); 
dbObjIdMap.put("success", "$success"); 
dbObjIdMap.put("responseCode", "$responseCode"); 
dbObjIdMap.put("label", "$label"); 
DBObject groupFields = new BasicDBObject("_id", new BasicDBObject(dbObjIdMap)); 
0

我可以通过这个代码(代码的Grails和蒙戈-Java的应用程序-3.2)实现这一点:

DBObject groupFields = new BasicDBObject() 
groupFields.put('success', "\$success") 
groupFields.put('responseCode', "\$responseCode") 
groupFields.put('label', "\$label") 
def result = collection.aggregate(Arrays.asList(Aggregates.group(groupFields, []))).iterator() 
+0

随着Java驱动程序3+'Document'类,而应使用BasicDBObject的' '。 – Paul 2016-11-01 17:29:24