Anda perlu membuat sedikit modifikasi pada $project obyek. Anda perlu menggunakan Object yang diperoleh dengan mengurangkan 1 dari count , daripada menggunakan nilai count sebelumnya .
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));
Kode di atas akan berfungsi untuk grup yang memiliki records >= 2 . Jika ada satu grup dengan hanya satu record, hitungan setelah pengurangan akan menjadi nol, menghasilkan bagi dengan nol kesalahan.
Jadi Anda dapat memodifikasi kode Anda, untuk menyertakan $cond
, untuk memeriksa apakah hitungan setelah pengurangan adalah 0 , jika ya, maka default ke 1 , jika tidak, pertahankan nilai yang dikurangi dari 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));