sql >> Base de Datos >  >> NoSQL >> MongoDB

la resta en la consulta mongo no funciona?

Necesitas hacer una ligera modificación a tu $project objeto. Debe hacer uso del Objeto que se obtuvo al restar 1 de count , en lugar de usar el valor anterior de 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));

El código anterior funcionaría para grupos que tienen records >= 2 . Si hay un solo grupo con un solo registro, el conteo después de la resta sería cero, lo que resultaría en una división por cero error.

Entonces podría modificar su código, para incluir un $cond , para verificar si el conteo después de la resta es 0 , si es así, por defecto es 1 , de lo contrario, mantenga el valor restado de 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));