lithium\data\source\MongoDb::read()
Implements
lithium\data\Source::read()
Read from document
Parameters
-
string
$query
-
array
$options
Returns
objectFilter
This method can be filtered.
Source
public function read($query, array $options = array()) {
$this->_checkConnection();
$defaults = array('return' => 'resource');
$options += $defaults;
$params = compact('query', 'options');
$_config = $this->_config;
return $this->_filter(__METHOD__, $params, function($self, $params) use ($_config) {
$query = $params['query'];
$options = $params['options'];
$args = $query->export($self);
$source = $args['source'];
$model = $query->model();
if ($group = $args['group']) {
$result = $self->invokeMethod('_group', array($group, $args, $options));
$config = array('class' => 'set', 'defaults' => false) + compact('query') + $result;
return $model::create($config['data'], $config);
}
$collection = $self->connection->{$source};
if ($source === "{$_config['gridPrefix']}.files") {
$collection = $self->connection->getGridFS($_config['gridPrefix']);
}
$result = $collection->find($args['conditions'], $args['fields']);
if ($query->calculate()) {
return $result;
}
$resource = $result->sort($args['order'])->limit($args['limit'])->skip($args['offset']);
$result = $self->invokeMethod('_instance', array('result', compact('resource')));
$config = compact('result', 'query') + array('class' => 'set', 'defaults' => false);
return $model::create(array(), $config);
});
}