sql >> Database teknologi >  >> NoSQL >> MongoDB

subtraktion i mongo-forespørgsel virker ikke?

Du skal lave en lille ændring af dit $project objekt. Du skal gøre brug af det objekt, der blev opnået ved at trække 1 fra fra count , i stedet for at bruge den tidligere værdi af 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));

Ovenstående kode ville fungere for grupper, der har records >= 2 . Hvis der er en enkelt gruppe med kun én post, vil optællingen efter subtraktion være nul, hvilket resulterer i en divider med nul fejl.

Så du kan ændre din kode til at inkludere en $cond , for at kontrollere om antallet efter subtraktion er 0 , hvis det er det, skal den som standard være 1 , ellers behold den subtraherede værdi af 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));



  1. Opsætning af flere Docker-containere og MongoDB til at køre i CircleCI

  2. Få mongoStat gennem mongoDB Java-driver

  3. mongo-go-driver:indlejret OR/AND-forespørgselsfilter

  4. mongodb:aktiver textSearch