Browse Source

Mongo Collection "aggregate" method interface refactored.

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
e3c281f3cb
  1. 22
      extensions/mongo/Collection.php
  2. 4
      extensions/mongo/Query.php

22
extensions/mongo/Collection.php

@ -349,19 +349,27 @@ class Collection extends Object
/** /**
* Performs aggregation using Mongo Aggregation Framework. * Performs aggregation using Mongo Aggregation Framework.
* @param array $pipeline list of pipeline operators, or just the first operator * @param array $pipeline list of pipeline operators, or just the first operator
* @param array $pipelineOperator Additional pipeline operators * @param array $pipelineOperator additional pipeline operator. You can specify additional
* pipelines via third argument, fourth argument etc.
* @return array the result of the aggregation. * @return array the result of the aggregation.
* @throws Exception on failure.
* @see http://docs.mongodb.org/manual/applications/aggregation/ * @see http://docs.mongodb.org/manual/applications/aggregation/
*/ */
public function aggregate($pipeline, $pipelineOperator = []) public function aggregate($pipeline, $pipelineOperator = [])
{ {
$token = 'Aggregating from ' . $this->getFullName(); $token = 'Aggregating from ' . $this->getFullName();
Yii::info($token, __METHOD__); Yii::info($token, __METHOD__);
Yii::beginProfile($token, __METHOD__); try {
$args = func_get_args(); Yii::beginProfile($token, __METHOD__);
$result = call_user_func_array([$this->mongoCollection, 'aggregate'], $args); $args = func_get_args();
Yii::endProfile($token, __METHOD__); $result = call_user_func_array([$this->mongoCollection, 'aggregate'], $args);
return $result; $this->tryResultError($result);
Yii::endProfile($token, __METHOD__);
return $result['result'];
} catch (\Exception $e) {
Yii::endProfile($token, __METHOD__);
throw new Exception($e->getMessage(), (int)$e->getCode(), $e);
}
} }
/** /**
@ -377,8 +385,8 @@ class Collection extends Object
* - condition - criteria for including a document in the aggregation. * - condition - criteria for including a document in the aggregation.
* - finalize - function called once per unique key that takes the final output of the reduce function. * - finalize - function called once per unique key that takes the final output of the reduce function.
* @return array the result of the aggregation. * @return array the result of the aggregation.
* @see http://docs.mongodb.org/manual/reference/command/group/
* @throws Exception on failure. * @throws Exception on failure.
* @see http://docs.mongodb.org/manual/reference/command/group/
*/ */
public function group($keys, $initial, $reduce, $options = []) public function group($keys, $initial, $reduce, $options = [])
{ {

4
extensions/mongo/Query.php

@ -244,8 +244,8 @@ class Query extends Component implements QueryInterface
] ]
]; ];
$result = $collection->aggregate($pipelines); $result = $collection->aggregate($pipelines);
if (!empty($result['ok'])) { if (array_key_exists(0, $result)) {
return $result['result'][0]['total']; return $result[0]['total'];
} else { } else {
return 0; return 0;
} }

Loading…
Cancel
Save