MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Subtraktion in der Mongo-Abfrage funktioniert nicht?

Sie müssen eine geringfügige Änderung an Ihrem $project vornehmen Objekt. Sie müssen das Objekt verwenden, das durch Subtrahieren von 1 erhalten wurde von count , anstatt den vorherigen Wert von count zu verwenden .

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

Der obige Code würde für Gruppen funktionieren, die records >= 2 haben . Wenn es eine einzelne Gruppe mit nur einem Datensatz gibt, wäre die Anzahl nach der Subtraktion null, was zu einer Teilung durch null führen würde Fehler.

Sie könnten also Ihren Code ändern, um ein $cond , um zu prüfen, ob die Zählung nach der Subtraktion 0 ist , wenn ja, dann standardmäßig 1 , andernfalls behalten Sie den subtrahierten Wert von 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));