/** * @see CActiveDataProvider::fetchData() * @return array */ public function fetchData() { $criteria = $this->getCriteria(); // I have not refactored this line considering that the condition may have changed from total item count to here, maybe. $this->_builder = new EMongoQueryBuilder($this->model, isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : [], isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : []); $this->options['condition'] = isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : []; $this->options['projection'] = isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : []; // If we have sort and limit and skip setup within the incoming criteria let's set it if (isset($criteria['sort']) && is_array($criteria['sort'])) { $this->_builder->sort($criteria['sort']); } if (isset($criteria['skip']) && is_int($criteria['skip'])) { $this->_builder->skip($criteria['skip']); } if (isset($criteria['limit']) && is_int($criteria['limit'])) { $this->_builder->limit($criteria['limit']); } if (isset($criteria['hint']) && (is_array($criteria['hint']) || is_string($criteria['hint']))) { $this->_builder->hint($criteria['hint']); } if (($pagination = $this->getPagination()) !== false) { $pagination->setItemCount($this->getTotalItemCount()); $this->_builder->limit($pagination->getLimit()); $this->_builder->skip($pagination->getOffset()); } if (($sort = $this->getSort()) !== false) { $sort = $sort->getOrderBy(); if (count($sort) > 0) { $this->_builder->sort($sort); } } // var_dump(iterator_to_array($this->_builder->find()));die; return $this->_builder->queryAll(true); }
/** * @see CActiveDataProvider::fetchData() * @return array */ public function fetchData() { $criteria = $this->getCriteria(); // I have not refactored this line considering that the condition may have changed from total item count to here, maybe. $this->_cursor = $this->model->find(isset($criteria['condition']) && is_array($criteria['condition']) ? $criteria['condition'] : array(), isset($criteria['project']) && !empty($criteria['project']) ? $criteria['project'] : array()); // If we have sort and limit and skip setup within the incoming criteria let's set it if (isset($criteria['sort']) && is_array($criteria['sort'])) { $this->_cursor->sort($criteria['sort']); } if (isset($criteria['skip']) && is_int($criteria['skip'])) { $this->_cursor->skip($criteria['skip']); } if (isset($criteria['limit']) && is_int($criteria['limit'])) { $this->_cursor->limit($criteria['limit']); } if (isset($criteria['hint']) && (is_array($criteria['hint']) || is_string($criteria['hint']))) { $this->_cursor->hint($criteria['hint']); } if (($pagination = $this->getPagination()) !== false) { $pagination->setItemCount($this->getTotalItemCount()); $this->_cursor->limit($pagination->getLimit()); $this->_cursor->skip($pagination->getOffset()); } if (($sort = $this->getSort()) !== false) { $sort = $sort->getOrderBy(); if (count($sort) > 0) { $this->_cursor->sort($sort); } } return iterator_to_array($this->_cursor, false); }
/** * Recreates the internal MongoCursor. */ public function recreate() { $this->mongoCursor = $this->collection->getMongoCollection()->find($this->query, $this->fields); if ($this->hint !== null) { $this->mongoCursor->hint($this->hint); } if ($this->immortal !== null) { $this->mongoCursor->immortal($this->immortal); } foreach ($this->options as $key => $value) { $this->mongoCursor->addOption($key, $value); } if ($this->batchSize !== null) { $this->mongoCursor->batchSize($this->batchSize); } if ($this->limit !== null) { $this->mongoCursor->limit($this->limit); } if ($this->skip !== null) { $this->mongoCursor->skip($this->skip); } if ($this->slaveOkay !== null) { $this->setMongoCursorSlaveOkay($this->slaveOkay); } // Set read preferences after slaveOkay, since they may be more specific if ($this->readPreference !== null) { if ($this->readPreferenceTags !== null) { $this->mongoCursor->setReadPreference($this->readPreference, $this->readPreferenceTags); } else { $this->mongoCursor->setReadPreference($this->readPreference); } } if ($this->snapshot) { $this->mongoCursor->snapshot(); } if ($this->sort !== null) { $this->mongoCursor->sort($this->sort); } if ($this->tailable !== null) { $this->mongoCursor->tailable($this->tailable); } if ($this->timeout !== null) { $this->mongoCursor->timeout($this->timeout); } if ($this->maxTimeMS !== null) { $this->mongoCursor->addOption('$maxTimeMS', $this->maxTimeMS); } }
/** * * @return \MongoCursor */ private function getCursor() { if ($this->cursor) { return $this->cursor; } $this->cursor = $this->collection->getMongoCollection()->find($this->expression->toArray(), $this->fields); if ($this->skip) { $this->cursor->skip($this->skip); } if ($this->limit) { $this->cursor->limit($this->limit); } if ($this->options['batchSize']) { $this->cursor->batchSize($this->options['batchSize']); } if ($this->options['clientTimeout']) { $this->cursor->timeout($this->options['clientTimeout']); } if ($this->options['serverTimeout']) { $this->cursor->maxTimeMS($this->options['clientTimeout']); } if ($this->sort) { $this->cursor->sort($this->sort); } if ($this->hint) { $this->cursor->hint($this->hint); } // log request if ($this->client->hasLogger()) { $this->client->getLogger()->debug(get_called_class() . ': ' . json_encode(array('collection' => $this->collection->getName(), 'query' => $this->expression->toArray(), 'project' => $this->fields, 'sort' => $this->sort))); } $this->cursor->rewind(); // define read preferences if ($this->readPreference) { $this->cursor->setReadPreference($this->readPreference['type'], $this->readPreference['tagsets']); } return $this->cursor; }
/** * @param array $hintoptions * @returns Result */ public function hint(array $hintoptions) { $this->myResultCursor = $this->myResultCursor->hint($hintoptions); return $this; }
public function hint($index) { parent::hint($index); return $this; }
/** * 对该查询给一些辅助索引的提示 * @param Array $key_pattern 索引名 * @return muMongoCursor */ public function hint($key_pattern) { $this->oMongoCursor->hint($key_pattern); return $this; }