MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

la soustraction dans la requête mongo ne fonctionne pas?

Vous devez apporter une légère modification à votre $project objet. Vous devez utiliser l'Objet qui a été obtenu en soustrayant 1 de count , plutôt que d'utiliser la valeur précédente 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));

Le code ci-dessus fonctionnerait pour les groupes qui ont records >= 2 . S'il y a un seul groupe avec un seul enregistrement, le décompte après soustraction serait égal à zéro, ce qui entraînerait une division par zéro erreur.

Vous pouvez donc modifier votre code pour inclure un $cond , pour vérifier si le compte après soustraction est 0 , si c'est le cas, alors la valeur par défaut est 1 , sinon conservez la valeur soustraite 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));