2011-06-23 23 views
0

我創建了一個MongoDB聚合查詢,該查詢將給我當前月份的數據總和,但是如何修改此數據它會從每個月的每一天返回一個數組,每天的總數(我認爲這是可能的,但我發現很難得到它的工作)?如果這是不可能的,是否有比使用循環和運行30組查詢更好的方法?使用一個MongoDB組()查詢爲該月的每一天創建一個總和數組

我正在使用PHP驅動程序,但shell中的答案同樣有用。

$total_this_month = $db->test->group(
    array(), 
    array(
     'sum' => 0 
    ), 
    new MongoCode('function(doc, out){ out.sum += doc.data; }'), 
    array(
     'condition' => array(
      'time' => array(
       '$gte' => new MongoDate(strtotime('first day of this month, 00:00:00')), 
       '$lte' => new MongoDate(strtotime('last day of this month, 23:59:59')) 
      ) 
     ) 
    ) 
); 

回答

1

如果您計劃經常運行小組查詢,您應該考慮添加一個或多個新字段,以允許您按照需要的時間段進行分組。如果這是一個不需要性能調整的即席查詢,那麼以前使用map-reduce的答案是一個很好的答案。例如,我有一個需要按天,周,月等在這裏聚集,有時一個集合的示例記錄:

{"_id" : ObjectId("4ddaed3a8b0f766963000003"), 
"name": "Sample Data", 
"time" : "Mon May 23 2011 17:26:50 GMT-0600 (MDT)", 
"period" : { 
    "m" : 201105, 
    "w" : 201121, 
    "d" : 20110523, 
    "h" : 2011052317 
} 
} 

有了這些附加字段我可以做更多的事情與組功能並也可以索引這些字段以加快查詢速度。您可以選擇像我一樣使用整數,或者使用字符串 - 無論哪種方式都可以使用,但請記住,您的查詢參數需要具有相同的數據類型。我喜歡整數,因爲它看起來應該表現得更好一些,佔用更少的空間(只是一種預感)。

0

group命令不支持通過函數生成新的分組鍵,所以使用map/reduce而不是group。

相關問題