Du måste göra en liten modifiering av ditt $project
objekt. Du måste använda objektet som erhölls när du subtraherade 1
från count
, istället för att använda det tidigare värdet 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));
Ovanstående kod skulle fungera för grupper som har records >= 2
. Om det finns en enda grupp med bara en post, skulle räkningen efter subtraktion vara noll, vilket resulterar i en diva med noll fel.
Så du kan ändra din kod så att den inkluderar en $cond
, för att kontrollera om antalet efter subtraktion är 0
, om det är det, är det 1
som standard , annars behåll det subtraherade värdet för 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));