You forgot the $project
level of the object. Try this instead:
$tick = Tickers::connection()->connection->command(array(
'aggregate' => 'tickers',
'pipeline' => array(
array( '$project' => array(
'_id' => 0,
'year' => array('$year' => '$date'),
'month' => array('$month' => '$date'),
'day' => array('$dayOfMonth' => '$date'),
'hour' => array('$hour' => '$date'),
'avg' => '$ticker.avg',
)),
array( '$group' => array( '_id' => array(
'year'=>'$year',
'month'=>'$month',
'day'=>'$day',
'hour'=>'$hour'
),
'avg' => array('$avg' => '$ticker.avg'),
)),
array('$sort'=>array(
'year'=>1,
'month'=>1,
'day'=>1,
'hour'=>1
))
)
));