2013-01-25 1 views
0

Я следую за агрегацией mongo db в java, и пример показывает нижеприведенный конвейер. То, что я пытаюсь сделать, это добавить дополнительное поле с именем department, которое содержит значение отдела (так что в этом случае оно будет иметь то же значение, что и поле _id. Я попытался добавить другое поле в groupFields с new BasicDBObject("department",$department), но это didn ' . т работаmongodb (java), включая поле id по имени

// create our pipeline operations, first with the $match 
DBObject match = new BasicDBObject("$match", new BasicDBObject("type", "airfare")); 

// build the $projection operation 
DBObject fields = new BasicDBObject("department", 1); 
fields.put("amount", 1); 
fields.put("_id", 0); 
DBObject project = new BasicDBObject("$project", fields); 

// Now the $group operation 
DBObject groupFields = new BasicDBObject("_id", "$department"); 
groupFields.put("average", new BasicDBObject("$avg", "$amount")); 
DBObject group = new BasicDBObject("$group", groupFields); 

// run aggregation 
AggregationOutput output = collection.aggregate(match, project, group); 

с выходом

{"_id" : "Human Resources" , "average" : 74.91735537190083} , 
{"_id" : "Sales" , "average" : 72.30275229357798} , 
{"_id" : "Engineering" , "average" : 74.1} 
+0

Привет, это сообщение было очень полезно, я немного в отчаянии, чтобы понять, как разбирать выходные результаты? В этом случае, как вы сделали результат в POJO? Если я использую какое-то время (... iterator.hasnext()), он вводит бесконечный цикл ... – nuvio

+0

Почему бы вам не опубликовать свой код в другом вопросе, и мы можем помочь найти проблему –

+0

К счастью, я решил проблему с a 'для каждого' цикла ('while' имеет некоторую проблему), большое спасибо за предложение. – nuvio

ответ

1

Try, чтобы изменить порядок:

AggregationOutput output = collection.aggregate(match, group, project); 

Или вы можете добавить еще один проект после группы. Если вы используете $project до $group, он просто передает значения в оператор группы, а не непосредственно для вывода.

+0

В оригинальном случае это даже не похоже, что проект ничего не делает –

+0

Проецирование работает, но у меня есть случай, когда мое _id-поле фактически является составным id '_id: {a:" v1 ", b: "v2"} ', и я хотел бы иметь' a' и 'b' в качестве отдельных полей на выходе, а не сгруппировать как _id. Можно ли развернуть поле id так? –

+0

невредим, я понял. выполнение проекции впоследствии - правильный путь. –

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

  • Нет связанных вопросов^_^