2014-06-17 6 views
9

Mam czterostopniowe zapytanie o agregację w postaci dopasowania -> grupa -> projekt -> sort. Agregacja działa dobrze i tworzy tablicę taką, jak poniżej.filtr agregacji mongodb dla rekordów z polem większym lub równym numerowi

{ count: 48, ISP: 'LEASEWEB USA', percentRisky: 100 }, 
    { count: 51, ISP: 'ARETI INTERNET LTD', percentRisky: 100 }, 
    { count: 82, ISP: 'TINET SPA', percentRisky: 100 }, 
    { count: 109, ISP: 'GIGLINX', percentRisky: 100 }, 
    { count: 142, ISP: 'EGIHOSTING', percentRisky: 100 }, 
    { count: 857, ISP: 'VERSAWEB, LLC', percentRisky: 100 } 

Poniżej znajduje się moje zapytanie o agregację. Czy jest jakiś sposób, aby pokazywać wyniki tylko wtedy, gdy pole "zliczania" jest większe niż 500? Próbowałem dodawać do etapu projektu bez powodzenia.

 { $match : { //match to documents which are from all clients, from last three days, and scored 
      org : {"$in" : clientArray }, 
      frd : {$gt : new Date(JSON.stringify(util.lastXDates(3)))}, 
      sl : true 
     }}, 
     { $group : { //group by isp, get total count, and get count of risky 
      _id : "$gog", 
      count : { $sum : 1 }, 
      countRisky : { $sum : { $cond : { if : { $gte : [ "$scr", 65 ] } , 
       then : 1, 
       else : 0 
      }} } 
     }}, 
     { $project : { //rename _id to isp, only show percent risky, and the count 
      _id : 0, 
      ISP : "$_id", 
      percentRisky : { $multiply : [{ $divide : ["$countRisky", "$count"] }, 100] }, 
      count : 1 
     }}, 
     { $sort : { //sort by percent risky 
      percentRisky : 1, 
      count : 1 
+1

pytanie jest prawdopodobnie bardziej użyteczne niż odpowiedź! –

Odpowiedz

16

Można zawierać wiele $match etapów w przygotowaniu, więc dodać drugi $match na koniec:

... 
{$match: {count: {$gt: 500}}} 
+0

Robiłem to, ale z instrukcją $ project, zmieniłem ją tak, aby pasowało i działa teraz Dzięki! Oznaczone jako rozwiązane w 2 minuty :) – isaac9A

Powiązane problemy