2014-06-17 27 views
9

sayısından büyük veya eşit bir alana sahip kayıtlar için Eşleşme -> grup -> proje -> sıralama biçiminde dört aşamalı bir toplama sorgum var. Toplama iyi çalışır ve aşağıdaki gibi bir dizi üretir.mongodb aggregation filter

{ 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 } 

Toplama sorgularım aşağıdadır. Yalnızca 'sayım' alanının 500'den büyük olduğu yerde sonuçları göstermek için herhangi bir yol var mı? Proje sahnesine şanssız olarak eklemeyi denedim.

 { $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

soru muhtemelen cevap daha yararlıdır! –

cevap

16

Sen boru hattında birden $match aşamalarını içerir, bu nedenle sonunda ikinci $match ekleyebilirsiniz:

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

Bunu yapıyordum ama $ project deyimiyle eşleşti ve şimdi çalışıyor. Teşekkürler! 2 dakikada çözüldü olarak işaretleyecektir :) – isaac9A