/**
* The cursor constructor
* @param string|EMongoDocument $modelClass - The class name for the active record
* @param array|MongoCursor|EMongoCriteria $criteria - Either a condition array (without sort,limit and skip) or a MongoCursor Object
* @param array $fields
*/
public function __construct($modelClass, $criteria = array(), $fields = array())
{
// If $fields has something in it
if (!empty($fields)) {
$this->partial = true;
}
if (is_string($modelClass)) {
$this->modelClass = $modelClass;
$this->model = EMongoDocument::model($this->modelClass);
} elseif ($modelClass instanceof EMongoDocument) {
$this->modelClass = get_class($modelClass);
$this->model = $modelClass;
}
if ($criteria instanceof MongoCursor) {
$this->cursor = $criteria;
$this->cursor->reset();
} elseif ($criteria instanceof EMongoCriteria) {
$this->criteria = $criteria;
$this->cursor = $this->model->getCollection()->find($criteria->condition, $criteria->project)->sort($criteria->sort);
if ($criteria->skip > 0) {
$this->cursor->skip($criteria->skip);
}
if ($criteria->limit > 0) {
$this->cursor->limit($criteria->limit);
}
} else {
// Then we are doing an active query
$this->criteria = $criteria;
$this->cursor = $this->model->getCollection()->find($criteria, $fields);
}
}