sql >> Databasteknik >  >> NoSQL >> MongoDB

subtraktion i mongo query fungerar inte?

Du måste göra en liten modifiering av ditt $project objekt. Du måste använda objektet som erhölls när du subtraherade 1 från count , istället för att använda det tidigare värdet 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));

Ovanstående kod skulle fungera för grupper som har records >= 2 . Om det finns en enda grupp med bara en post, skulle räkningen efter subtraktion vara noll, vilket resulterar i en diva med noll fel.

Så du kan ändra din kod så att den inkluderar en $cond , för att kontrollera om antalet efter subtraktion är 0 , om det är det, är det 1 som standard , annars behåll det subtraherade värdet för 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. Hur är en MongoDB ObjectID 12 byte?

  2. parametern include_type_name är satt till true i node.js

  3. Hur man förfinar exporterade MongoDB-dokument i mongoexport

  4. Stöd för flera användartyper av Passport-lokal mongoose node.js