MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

subtração na consulta mongo não funciona?


Você precisa fazer uma pequena modificação em seu $project objeto. Você precisa fazer uso do Object que foi obtido ao subtrair 1 de count , em vez de usar o 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));

O código acima funcionaria para grupos que possuem records >= 2 . Se houver um único grupo com apenas um registro, a contagem após a subtração será zero, resultando em uma divisão por zero erro.

Assim, você pode modificar seu código para incluir um $cond , para verificar se a contagem após a subtração é 0 , se for, o padrão é 1 , senão mantém o valor subtraído 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));