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