2017-12-11 1 views
0

私は大量の時系列データを毎日取得したいと思っています。マングース操作を日付範囲でカウントする

たとえば、3日前から現在までの期間をクエリしたいとします。 3日前に1000個のエラー、2日前に2000個のエラー、今日500個のエラーがあるとします。私のオブジェクトには、「作成された」日付フィールドがあります。

このため

私は

MyModel.count({ created: { $gte: threeDaysAgo, $lte: today } }) 

を行うことができ、その後、他の2日間繰り返します。これは、ユーザーが300日間のスパンを検索したいときに問題になります.300回操作する必要があります。だから私は個々のクエリをスキップしたいと思います。

毎日個別の電話をすることなく、これらの金額を私に返すMongoose/MongoDBオペレーションはありますか?

+0

は、私が知らないことをここに私のコードです。あなたは3日間クエリを作成し、作成した日付を選択してから、その結果を数えます。 –

+0

ジムに感謝し、それを考えなかった。パフォーマンスについて少しは心配しました.20万以上のオブジェクトが返される可能性があります。しかし、作成したフィールドを選択するだけでパフォーマンスが向上すると思います。 –

+0

数が多すぎると、3回の「カウント」トランザクションが改善される可能性があります。 –

答えて

0

私は凝集に行くことになりました。

   DBLogData.aggregate([ 
       { 
        $match: { application: application.id } 
       }, 
       { 
        $group: { 
         _id: { 
          day: { 
           $dayOfMonth: "$created" 
          }, 
          month: { 
           $month: "$created" 
          }, 
          year: { 
           $year: "$created" 
          } 
         }, 
         count: { 
          $sum: 1 
         } 
        } 
       } 
      ], (error, graphCountDatas) => { 
       if (error) { 
        console.log(error); 
        callback(error); 
       } else { 
        callback(null, graphCountDatas); 
       } 
      }); 

そして、いくつかの参照:https://docs.mongodb.com/v3.4/aggregation/ https://docs.mongodb.com/v3.4/reference/operator/aggregation-date/