sql >> Databáze >  >> NoSQL >> MongoDB

odčítání v mongo dotazu nefunguje?

Musíte provést mírnou úpravu svého $project objekt. Musíte použít objekt, který byl získán odečtením 1 od count namísto použití předchozí hodnoty 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));

Výše uvedený kód by fungoval pro skupiny, které mají records >= 2 . Pokud existuje jedna skupina pouze s jedním záznamem, počet po odečtení bude nula, což povede k dělení nulou chyba.

Můžete tedy upravit svůj kód tak, aby obsahoval $cond , abyste zkontrolovali, zda je počet po odečtení 0 , pokud je, pak výchozí 1 , jinak ponechte odečtenou hodnotu 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. MongoDB:Efektivní návrh schémat s vloženými dokumenty

  2. Mongo Copy Collection a uživatelská oprávnění

  3. Jak vypíšu celou databázi MongoDB jako text/json?

  4. Získejte všechny „dokumenty“ z „kolekce“ MongoDB