lithium\data\source\MongoDb::read()

public method

Read from document

Parameters

  • string $query
  • array $options

Returns

object

Filter

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;
		});
	}