2017-09-29 17 views
0

私のマングースに集計を使用しようとしています。複数条件の集計javascript/mongoose

理想的なスクリプトでは、すべてのcrime.amountとheavy_crimeの合計が過去100日間であり、ユーザーIDに関連する結果のみが得られます。

(今日:todate) (100日前:fromdate

モデル:コードしようと

time: Number, 
    userid : String, 

    crime: { 
     cash: {type: Number, default: 0}, 
     amount: { type: Number, default: 0} 
    }, 
    heavy_crime: { 
     cash: {type: Number, default: 0}, 
     amount: { type: Number, default: 0} 
    }, 

function checkCrimeRating(userid) { 
    var todate = new Date(); 
    var fromdate = new Date(); 
    var lastfive = new Date(); 
    var MainDate = date.getDate(); 

    fromdate.setHours(0,0,0,0); 
    todate.setHours(0,0,0,0); 
    lastfive.setHours(0,0,0,0); 

    lastfive.setDate(MainDate - 5); 
    fromdate.setDate(MainDate - 100); 


    return dailyStats.aggregate(
     { $group: { 
      _id: "$time" : $gte {fromdate.getTime()}, $lte: {todate.getTime()}, 
      total:  { $sum: { $add: ["$crime.amount", "$heavycrime.amount"] } }, 
     }} 
    ).then(function (numberO)) 
} 

は、どのように私は集計にのみ機能することができます最後の100日を、正しいユーザーIDで要約しますか?

numberO Would ideally return number of crime and heavycrime the last 100 days. 

答えて

1

あなたは$match段階が欠落しています。

あなたの日付比較をマッチステージに移動し、続いて$groupを合計犯罪にします。

dailyStats.aggregate([ 
    { 
    "$match": { 
     "user": userid, 
     "time": { 
     "$gte": fromdate.getTime(), 
     "$lte": todate.getTime() 
     } 
    } 
    }, 
    { 
    "$group": { 
     "_id": null, 
     "total": { 
     "$sum": { 
      "$add": [ 
      "$crime.amount", 
      "$heavycrime.amount" 
      ] 
     } 
     } 
    } 
    } 
]);