2017-06-02 25 views
0


我使用的是MongoDB 3.2,並且我要求按季度和半年的時間戳將文檔分組。文檔結構就像如何按時間戳將mondoDB文檔數據按季度/半年分組

{ 
    "_id" : ObjectId("59312c59bf501118aea587b2"), 
    "timestamp" : ISODate("2012-01-01T01:00:00Z"), 
    "value" : 20, 
    "uniqueId" : ObjectId("59312c59bf501118aea58a6d") 
}, 
{ 
    "_id" : ObjectId("59312c59bf501118aea587b3"), 
    "timestamp" : ISODate("2012-02-01T01:00:00Z"), 
    "value" : 20, 
    "uniqueId" : ObjectId("59312c59bf501118aea58a6d") 
}, 
{ 
    "_id" : ObjectId("59312c59bf501118aea587b4"), 
    "timestamp" : ISODate("2012-05-01T01:00:00Z"), 
    "value" : 20, 
    "uniqueId" : ObjectId("59312c59bf501118aea58a6d") 
}, 
{ 
    "_id" : ObjectId("59312c59bf501118aea587b5"), 
    "timestamp" : ISODate("2012-06-01T01:00:00Z"), 
    "value" : 20, 
    "uniqueId" : ObjectId("59312c59bf501118aea58a6d") 
} 

我需要按時間戳每季度或半年將文檔分組,我需要總結該值。季報結果應該看起來像下面

{ 
    "timestamp" : ISODate("2012-01-01T01:00:00Z"), 
    "value" : 40 
}, 
{ 
    "timestamp" : ISODate("2012-05-01T01:00:00Z"), 
    "value" : 90 
} 

能幫忙我怎麼能做到這一點,也爲半年。

回答

1

您可以聚合的季度文件,但每季度計算一次約會應該在客戶端來完成:

db.yourCollection.aggregate([ 
    { 
     $group: { 
      _id: { 
       year: {$year: "$timestamp"}, 
       quarter: {$ceil: {$divide:[{$month:"$timestamp"}, 3]}} 
       }, 
      value: {$sum:"$value"} 
     }   
    }, 
    { $project: { _id: 0, year: "$_id.year", quarter: "$_id.quarter", value: 1 } }, 
    { $sort: { year: 1, quarter: 1 } } 
]) 

輸出:

{ 
    "year" : 2012, 
    "quarter" : 1, 
    "value" : 40 
} 
, 
{ 
    "year" : 2012, 
    "quarter" : 2, 
    "value" : 40 
} 

如果你想要半年度報告,然後由3 insted劃分你應該使用劃分6