0

私はJavaでmongodb集約をフォローしています。この例は、以下のパイプラインを示しています。私がやろうとしてdepartmentいるのは、部門の値を含むという名前のフィールドを追加することです(したがって、この場合、同じ値が_idフィールドになります。withに別のフィールドを追加しようとしましたgroupFieldsnew BasicDBObject("department",$department)、機能しませんでした。

// 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}
4

1 に答える 1

1

順序を切り替えてみてください:

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

または、グループの後に別のプロジェクトを追加できます。$projectbeforeを使用している場合は$group、値を直接出力に渡すのではなく、グループ演算子に渡すだけです。

于 2013-01-25T05:28:50.197 に答える