Bạn cần thực hiện một sửa đổi nhỏ đối với $project
của mình sự vật. Bạn cần sử dụng Đối tượng lấy được khi trừ 1
từ count
, thay vì sử dụng giá trị trước đó của 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));
Đoạn mã trên sẽ hoạt động cho các nhóm có records >= 2
. Nếu có một nhóm duy nhất chỉ có một bản ghi, số đếm sau phép trừ sẽ bằng 0, dẫn đến số chia cho số không lỗi.
Vì vậy, bạn có thể sửa đổi mã của mình, để bao gồm một $ cond
, để kiểm tra xem số đếm sau phép trừ có phải là 0
không , nếu có, thì hãy mặc định nó thành 1
, nếu không, hãy giữ giá trị bị trừ của 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));