2017-11-29 8 views
0

は、次のような構造を持つコレクション内のドキュメントの任意の数を持っていると仮定した日から7日ごとによる総額$グループ:のMongoDB -

{ 
    "_id" : "1", 
    "totalUsers" : NumberInt(10000), 
    "iosUsers" : NumberInt(5000), 
    "androidUsers" : NumberInt(5000), 
    "creationTime" : ISODate("2017-12-04T06:14:21.529+0000") 
}, 
{ 
    "_id" : "2", 
    "totalUsers" : NumberInt(12000), 
    "iosUsers" : NumberInt(6000), 
    "androidUsers" : NumberInt(6000), 
    "creationTime" : ISODate("2017-12-04T06:14:21.529+0000") 
}, 
{ 
    "_id" : "3", 
    "totalUsers" : NumberInt(14000), 
    "iosUsers" : NumberInt(7000), 
    "androidUsers" : NumberInt(7000), 
    "creationTime" : ISODate("2017-12-04T06:14:21.529+0000") 
} 

そして、与えられた二つの日付の間の結果を返すクエリを作成したいです(すなわち:startDateendDate)、その後、グループの結果は7日ごと:

db.collection.aggregate(
    { $match: {$gte: startDate, $lte: endDate } }, 
    { $group: { _id: { --- every seven days from endDate --- } } 
) 

私はこれをどのように行うことができますか?

答えて

0

まずboundries

var boundries = []; 
vat sd= ISODate("2017-10-18T20:41:33.602+0000"),ed=ISODate("2017-11-22T12:41:36.348+0000"); 
boundries.push(sd); 

var i = sd; 

while(i<=ed){ 
    //push ISODate(i + 7 days) in boundries 
} 

//also push ISODate(ed+1day) because upper bound is exclusive 

//use $bucket aggregation 
db.collection.aggregate({$match:{creationTime:{$gte:stDate,$lte:endDate}}},{ 
$bucket:{ 
    groupBy: "$creationTime", 
    boundaries:boundries , 
} 

}) 
+0

感謝の男を取得!それがトリックでした! –

+0

あなたは大歓迎です:) – Shubham