2013-03-22 2 views
2

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'}, могут быть переведены на использование в драйвере ява 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", новый BasicDBObject ("успех", "$ 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 код и Монго-ява-водитель-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

Смежные вопросы