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 = []) {
$defaults = [
'readPreference' => $this->_config['uriOptions']['readPreference'],
'readPreferenceTags' => $this->_config['uriOptions']['readPreferenceTags'],
'return' => 'resource'
];
$options += $defaults;
$params = compact('query', 'options');
return Filters::run($this, __FUNCTION__, $params, function($params) {
$query = $params['query'];
$options = $params['options'];
$args = $query->export($this);
$source = $args['source'];
$model = $query->model();
if ($group = $args['group']) {
$result = $this->_group($group, $args, $options);
$config = ['class' => 'set', 'defaults' => false] + compact('query') + $result;
return $model::create($config['data'], $config);
}
$readQuery = new Query($args['conditions'], [
'projection' => $args['fields'],
'sort' => $args['order'],
'limit' => $args['limit'],
'skip' => $args['offset']
]);
$readPreference = new ReadPreference($options['readPreference'], $options['readPreferenceTags']);
$resource = $this->manager->executeQuery("{$this->_config['database']}.{$source}", $readQuery, $readPreference);
$result = Libraries::instance(null, 'result', compact('resource'), $this->_classes);
$config = compact('result', 'query') + ['class' => 'set', 'defaults' => false];
$collection = $model::create([], $config);
if (is_object($query) && $query->with()) {
$model::embed($collection, $query->with());
}
return $collection;
});
}