1
我有以下格式MongoDB的聚集PHP,數小時集團
{
"_id" : ObjectId("12e123123123123123"),
"client_id" : "12345667889",
"resource" : "test/test",
"version" : "v2",
"ts" : new Date("Wed, 02 Jan 2013 15:34:58 GMT +08:00")
}
的ts
是MongoDate()字段的文件。
我試圖通過CLIENT_ID和小時使用MongoDB的聚合函數在PHP組數使用率在表/圖
這是我目前的嘗試
$usage = $this->db->Usage->aggregate(array(array(
'$project' => array(
'hour' => array(
'years' => array('$year' => '$ts'),
'months' => array('$month' => '$ts'),
'days' => array('$dayOfMonth' => '$ts'),
'hours' => array('$hour' => '$ts'),
)
),
'$group' => array(
'_id' => array(
'client_id' => '$client_id',
'hour' => '$hour',
),
'number' => array('$sum' => 1),
)
)));
不幸的是我的迴應,我顯示我回來只是由client_id分組,沒有別的。
[result] => Array
(
[0] => Array
(
[_id] => Array
(
[client_id] => adacf8deba7066e4
)
[number] => 12
)
)
任何人都能指向正確的方向,或有另一種解決方案按小時分組?
- 修正 - PHP要求您將每個管道放在一個單獨的數組中,並將整個數組放入一個數組中。看到更新的幫助從JohnnyHK
$usage = $this->db->Usage->aggregate(array(array(
'$project' => array(
'client_id' => 1,
'hour' => array(
'years' => array('$year' => '$ts'),
'months' => array('$month' => '$ts'),
'days' => array('$dayOfMonth' => '$ts'),
'hours' => array('$hour' => '$ts'),
)
)),array(
'$group' => array(
'_id' => array(
'client_id' => '$client_id',
'hour' => '$hour',
),
'number' => array('$sum' => 1),
)
)));
我收到了同樣的反應。我在shell中嘗試了同樣的結果,並且得到相同的錯誤結果,這使我認爲它與我的Collection的設置或Mongodb本身的方式有關。我正在運行2.2.2版本。 – Balthasar
奇怪。我添加了我用來用MongoDB v2.2.2測試這個的shell。 – JohnnyHK
真棒修復它。這是PHP需要通過變量的方式。儘管在項目中需要添加client_id。我將用解決方案更新我的問題。 – Balthasar