sql >> Database >  >> NoSQL >> MongoDB

aftrekken in mongo-query werkt niet?

U moet een kleine wijziging aanbrengen in uw $project object. U moet gebruik maken van het Object dat is verkregen bij het aftrekken van 1 van count , in plaats van de vorige waarde van count . te gebruiken .

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));

De bovenstaande code zou werken voor groepen met records >= 2 . Als er een enkele groep is met slechts één record, zou de telling na aftrekking nul zijn, wat resulteert in een delen door nul fout.

U kunt uw code dus aanpassen om een ​​$cond , om te controleren of de telling na aftrekken 0 . is , als dat zo is, zet het dan standaard op 1 , houd anders de afgetrokken waarde van 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. Laravel alle sessie-ID's met Redis-stuurprogramma

  2. Wachtwoord instellen voor de mongo-database van meteor

  3. C# Mongo Driver IMongoDatabase RunCommand om databasestatistieken te krijgen

  4. Kolom verwijderen uit onderliggende collectie