$projectにわずかな変更を加える必要があります 物体。 1を引いたときに得られたオブジェクトを利用する必要があります countから 、countの以前の値を使用するのではなく 。
DBObject project = new BasicDBObject("_id", 0);
DBObject countAfterSubtraction = new BasicDBObject("$subtract",
new Object[] {"$count", 1});
DBObject value = new BasicDBObject("$divide",
new Object[] {"$value",countAfterSubtraction});
project.put("value", value);
project.put("Date", "$_id");
stages.add(new BasicDBObject("$project", project));
上記のコードは、records >= 2のグループで機能します 。レコードが1つしかない単一のグループがある場合、減算後のカウントはゼロになり、ゼロ除算になります。 エラー。
したがって、コードを変更して、 $cond<を含めることができます。 / strong>
、減算後のカウントが0であるかどうかを確認します 、そうである場合は、デフォルトで1に設定します 、それ以外の場合は、countの減算値を保持します 。
DBObject project = new BasicDBObject("_id", 0);
DBObject countAfterSubtraction = new BasicDBObject("$subtract",
new Object[] {"$count", 1});
DBObject eq = new BasicDBObject("$eq",
new Object[]{countAfterSubtraction,0});
DBObject cond = new BasicDBObject("$cond",
new Object[]{eq,1,countAfterSubtraction});
DBObject value = new BasicDBObject("$divide",
new Object[] {"$value",cond});
project.put("value", value);
project.put("Date", "$_id");
stages.add(new BasicDBObject("$project", project));