簡體   English   中英

mongoDB PHP按日期匯總集合,每個日期匯總字段

[英]mongoDB PHP aggregate collection by date and sum field per date

我試圖輸出一個按日期分組的日期數組,其中包含一個名為minutes_numeric的字段的總和。

我當前的查詢是:

return $this->db->Work->aggregate(array(
            array(
                '$match' => array(
                    'date' => array('$gt' => $start, '$lt' => $end)
                )
            ),
            array(
                '$project' => array(
                    'year' => array('$year' => '$date' ),
                    'month' => array('$month' => '$date' ),
                    'day' => array('$dayOfMonth' => '$date'),
                ),
            ),
            array(
                '$group' => array(
                    '_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
                    'minutes_numeric' => array('$sum' => 1)
                ),
            ),
            array(
                '$sort' => array(
                    '_id' => 1
                ),
            ),
            array(
                '$limit' => 30
            )
        ));

哪個輸出:

{
result: [
{
_id: {
year: 2013,
month: 12,
day: 4
},
minutes_numeric: 40
},
{
_id: {
year: 2013,
month: 12,
day: 11
},
minutes_numeric: 127
},
{
_id: {
year: 2013,
month: 12,
day: 12
},
minutes_numeric: 108
}
],
ok: 1
}

很棒,但是minutes_numeric代表當天的行數,因此我更改了$group子句:

    array(
        '$group' => array(
            '_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
            'minutes_numeric' => array('$sum' => '$minutes_numeric')
        ),
    ),

然后將總和(minutes_numeric)更改為0,而不是實際的總和。

我不確定我的款項為什么會出錯,非常感謝您的幫助


編輯,

如果我將$ project更新為包括minutes_numeric,則總和似乎不包括$ match參數

 array(
            '$project' => array(
                'year' => array('$year' => '$date' ),
                'month' => array('$month' => '$date' ),
                'day' => array('$dayOfMonth' => '$date'),
                'minutes_numeric' => 1
            ),
        ),
        array(
            '$group' => array(
                '_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
                'minutes_numeric' => array('$sum' => '$minutes_numeric')
            ),
        )

如果這是您當前的查詢

return $this->db->Work->aggregate(array(
            array(
                '$match' => array(
                    'date' => array('$gt' => $start, '$lt' => $end)
                )
            ),
            array(
                '$project' => array(
                    'year' => array('$year' => '$date' ),
                    'month' => array('$month' => '$date' ),
                    'day' => array('$dayOfMonth' => '$date'),
                    'minutes_numeric' => 1
                ),
            ),
            array(
                '$group' => array(
                    '_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
                    'minutes_numeric' => array('$sum' => '$minutes_numeric')
                ),
            ),
            array(
                '$sort' => array(
                    '_id' => 1
                ),
            ),
            array(
                '$limit' => 30
            )
        ));

那么$ match參數被“忽略”的唯一方法是結果不符合您的預期,可能是因為它們是錯誤的。 嘗試檢查$ start和$ end的值,因為您使用的查詢似乎正確。

如果這不是問題,請使用當前查詢的結果更新您的問題。 (如果查詢與我的答案中的查詢不同,也可以更新查詢)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM