2016-12-06 15 views
3

私は私の文書があるデータベースマングース集約GROUPBY、週、年

ためnodejsとのMongoDBを使用しています:周波数値が可能な

{ 
    "_id": "58466d6a0b3f4d2e2fa22905", 
    "updatedAt": "2016-12-06T07:48:58.435Z", 
    "createdAt": "2017-12-06T07:48:58.435Z", 
    "userId": "56d04e265a2100c72a311334", 
    "__v": 0 
    } 

ユーザーがクライアント側でfromDateから、toDateまで及び周波数を与えます0,1,2 ここで、0は曜日を意味し、1は週を意味し、2は年を意味する。上記のデータに基づいて

iは元のため

レポートを生成します:ユーザーがfromDateから= 2016年12月1日からtoDateまで= 2016年12月6日を与えれば。周波数が0ある場合

結果は、周波数が2であれば結果は

あろう周波数が1であれば結果は

{ 
    2016-12-01 to 2016-12-06:{ 
    count:16 
      } 
    } 

あろう

{ 
    2016-12-01:{ 
    count:1 
      } 
    2016-12-02:{ 
     count:7 
     } 
    2016-12-06:{ 
     count:8 
     } 
    } 

あろう

{ 2016:{ count:16 } } 
また、I:

var aggregate = [{ 
     $match: { 
      createdAt: { 
       $gte: fromDate, 
       $lt: toDate 
      } 
     } 
    }, { 
     $group: { 
      // what should i will do here 
      }, 
      count: { 
       $sum: 1 
      } 
     } 
    }] 

    return LoginReportModel.aggregate(aggregate).exec(); 

ORいずれも編集

を歓迎lodashを使用してのような他のより良い方法を知っている:私はこのように行われてきた文書

の数でカウント

しますユーザーIDで文書数が一意であることを希望する

答えて

2

C $dateToString

上のドキュメントを参照して一体あなたはこのようにそれを行うことができます:

var frequency = 2 

var frequencyDateFormatMap = { 
    0: '%Y-%m-%d', 
    1: '%U', 
    2: '%Y' 
} 

var frequencyDateFormat = frequencyDateFormatMap[frequency] 

var aggregate = [ 
    {$match: { 
    createdAt: { 
     $gte: fromDate, 
     $lt: toDate 
    } 
    }}, 
    {$project: { 
    frequency: { 
     $dateToString: { 
     format: frequencyDateFormat, 
     date: '$createdAt' 
     } 
    } 
    }}, 
    {$group: { 
    _id: '$frequency', 
    count: { 
     $sum: 1 
    } 
    }} 
] 

return LoginReportModel.aggregate(aggregate).exec() 
+0

は、あなたは上記の問題 – Sam

+0

私は例を追加した上で私を助けることができる、唯一の違いは、周波数1のために、それは週番号を出力していることです"2016-12-01 to 2016-12-06"のような文字列の代わりにグループキーとして使用します。それが役に立てば幸い! – Rudi

+0

助けてくれてありがとう!この事は私も$ dayOfMonthと$ yearで達成することができますが、主な問題は週です..どのように私は上記のようにデータを上記のように日付に変換することができますこのレポートを生成するためにファイルをExcelの上に書く – Sam

関連する問題