$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));