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