- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章高效mongodb的php分页类(不使用skip)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
mongodb分页skip+limit分页要先查出所有结果再去跳过,这样如果查询页面越往后效率越低.
如果能够通过查询条件查出每页结果的最后一条记录,在用最后一条记录作为查询条件去查下一页,这样每次都查询页面size条记录,效率不会差.
具体代码如下:包含mongodb.class.php, page.class.php, test.php 。
mongodb.class.php mongodb 操作类 。
<?php function show_error($message, $status_code = 500, $heading = 'An Error Was Encountered') { echo $message, $status_code,PHP_EOL; exit; } 。
。
//MongoDB操作类 class DB { 。
private $CI; private $config_file = 'MongoDB',
private $connection; private $db; private $connection_string; private $collection = ''; private $host; private $port; private $user; private $pass; private $dbname; private $key; private $persist; private $persist_key,
private $selects = array(); private $wheres = array(); private $sorts = array(); private $page_sorts = array(),
private $limit = 999999; private $offset = 0; 。
/** * -------------------------------------------------------------------------------- * CONSTRUCTOR * -------------------------------------------------------------------------------- * * Automatically check if the Mongo PECL extension has been installed/enabled. * Generate the connection string and establish a connection to the MongoDB. */ 。
public function __construct($MONGODB_CONFIG) { if(!class_exists('Mongo')) { show_error("The MongoDB PECL extension has not been installed or enabled", 500); } /** $config['mongo_host'] = '221.234.43.144'; $config['mongo_port'] = 27017; $config['mongo_db'] = 'test'; $config['mongo_user'] = ''; $config['mongo_pass'] = ''; $config['mongo_persist'] = TRUE; * */ $this->connection_string($MONGODB_CONFIG); $this->connect(); } 。
/** * -------------------------------------------------------------------------------- * Switch_db * -------------------------------------------------------------------------------- * * Switch from default database to a different db */ 。
public function switch_db($database = '') { if(empty($database)) { show_error("To switch MongoDB databases, a new database name must be specified", 500); } $this->dbname = $database; try { $this->db = $this->connection->{$this->dbname}; return(TRUE); } catch(Exception $e) { show_error("Unable to switch Mongo Databases: {$e->getMessage()}", 500); } } 。
/** * -------------------------------------------------------------------------------- * SELECT FIELDS * -------------------------------------------------------------------------------- * * Determine which fields to include OR which to exclude during the query process. * Currently, including and excluding at the same time is not available, so the * $includes array will take precedence over the $excludes array. If you want to * only choose fields to exclude, leave $includes an empty array(). * * @usage: $this->mongo_db->select(array('foo', 'bar'))->get('foobar'); */ 。
public function select($includes = array(), $excludes = array()) { if(!is_array($includes)) { $includes = array(); } 。
if(!is_array($excludes)) { $excludes = array(); } 。
if(!empty($includes)) { foreach($includes as $col) { $this->selects[$col] = 1; } } else { foreach($excludes as $col) { $this->selects[$col] = 0; } } return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents based on these search parameters. The $wheres array should * be an associative array with the field as the key and the value as the search * criteria. * * @usage = $this->mongo_db->where(array('foo' => 'bar'))->get('foobar'); */ 。
public function where($wheres = array()) { foreach($wheres as $wh => $val) { $this->wheres[$wh] = $val; } return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE_IN PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is in a given $in array(). * * @usage = $this->mongo_db->where_in('foo', array('bar', 'zoo', 'blah'))->get('foobar'); */ 。
public function where_in($field = "", $in = array()) { $this->where_init($field); $this->wheres[$field]['$in'] = $in; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE_NOT_IN PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is not in a given $in array(). * * @usage = $this->mongo_db->where_not_in('foo', array('bar', 'zoo', 'blah'))->get('foobar'); */ 。
public function where_not_in($field = "", $in = array()) { $this->where_init($field); $this->wheres[$field]['$nin'] = $in; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE GREATER THAN PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is greater than $x * * @usage = $this->mongo_db->where_gt('foo', 20); */ 。
public function where_gt($field = "", $x) { $this->where_init($field); $this->wheres[$field]['$gt'] = $x; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE GREATER THAN OR EQUAL TO PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is greater than or equal to $x * * @usage = $this->mongo_db->where_gte('foo', 20); */ 。
public function where_gte($field = "", $x) { $this->where_init($field); $this->wheres[$field]['$gte'] = $x; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE LESS THAN PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is less than $x * * @usage = $this->mongo_db->where_lt('foo', 20); */ 。
public function where_lt($field = "", $x) { $this->where_init($field); $this->wheres[$field]['$lt'] = $x; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE LESS THAN OR EQUAL TO PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is less than or equal to $x * * @usage = $this->mongo_db->where_lte('foo', 20); */ 。
public function where_lte($field = "", $x) { $this->where_init($field); $this->wheres[$field]['$lte'] = $x; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE BETWEEN PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is between $x and $y * * @usage = $this->mongo_db->where_between('foo', 20, 30); */ 。
public function where_between($field = "", $x, $y) { $this->where_init($field); $this->wheres[$field]['$gte'] = $x; $this->wheres[$field]['$lte'] = $y; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE BETWEEN AND NOT EQUAL TO PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is between but not equal to $x and $y * * @usage = $this->mongo_db->where_between_ne('foo', 20, 30); */ 。
public function where_between_ne($field = "", $x, $y) { $this->where_init($field); $this->wheres[$field]['$gt'] = $x; $this->wheres[$field]['$lt'] = $y; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE NOT EQUAL TO PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is not equal to $x * * @usage = $this->mongo_db->where_between('foo', 20, 30); */ 。
public function where_ne($field = "", $x) { $this->where_init($field); $this->wheres[$field]['$ne'] = $x; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE OR * -------------------------------------------------------------------------------- * * Get the documents where the value of a $field is in one or more values * * @usage = $this->mongo_db->where_or('foo', array( 'foo', 'bar', 'blegh' ); */ 。
public function where_or($field = "", $values) { $this->where_init($field); $this->wheres[$field]['$or'] = $values; return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE AND * -------------------------------------------------------------------------------- * * Get the documents where the elements match the specified values * * @usage = $this->mongo_db->where_and( array ( 'foo' => 1, 'b' => 'someexample' ); */ 。
public function where_and( $elements_values = array() ) { foreach ( $elements_values as $element => $val ) { $this->wheres[$element] = $val; } return($this); } 。
/** * -------------------------------------------------------------------------------- * WHERE MOD * -------------------------------------------------------------------------------- * * Get the documents where $field % $mod = $result * * @usage = $this->mongo_db->where_mod( 'foo', 10, 1 ); */ 。
public function where_mod( $field, $num, $result ) { $this->where_init($field); $this->wheres[$field]['$mod'] = array ( $num, $result ); return($this); } 。
/** * -------------------------------------------------------------------------------- * Where size * -------------------------------------------------------------------------------- * * Get the documents where the size of a field is in a given $size int * * @usage : $this->mongo_db->where_size('foo', 1)->get('foobar'); */ 。
public function where_size($field = "", $size = "") { $this->_where_init($field); $this->wheres[$field]['$size'] = $size; return ($this); } 。
/** * -------------------------------------------------------------------------------- * LIKE PARAMETERS * -------------------------------------------------------------------------------- * * Get the documents where the (string) value of a $field is like a value. The defaults * allow for a case-insensitive search. * * @param $flags * Allows for the typical regular expression flags: * i = case insensitive * m = multiline * x = can contain comments * l = locale * s = dotall, "." matches everything, including newlines * u = match unicode * * @param $enable_start_wildcard * If set to anything other than TRUE, a starting line character "^" will be prepended * to the search value, representing only searching for a value at the start of * a new line. * * @param $enable_end_wildcard * If set to anything other than TRUE, an ending line character "$" will be appended * to the search value, representing only searching for a value at the end of * a line. * * @usage = $this->mongo_db->like('foo', 'bar', 'im', FALSE, TRUE); */ 。
public function like($field = "", $value = "", $flags = "i", $enable_start_wildcard = TRUE, $enable_end_wildcard = TRUE) { $field = (string) trim($field); $this->where_init($field); $value = (string) trim($value); $value = quotemeta($value),
if($enable_start_wildcard !== TRUE) { $value = "^" . $value; } 。
if($enable_end_wildcard !== TRUE) { $value .= "$"; } 。
$regex = "/$value/$flags"; $this->wheres[$field] = new MongoRegex($regex); return($this); } 。
/** * -------------------------------------------------------------------------------- * ORDER BY PARAMETERS * -------------------------------------------------------------------------------- * * Sort the documents based on the parameters passed. To set values to descending order, * you must pass values of either -1, FALSE, 'desc', or 'DESC', else they will be * set to 1 (ASC). * * @usage = $this->mongo_db->where_between('foo', 20, 30); */ 。
public function order_by($fields = array()) { foreach($fields as $col => $val) { if($val == -1 || $val === FALSE || strtolower($val) == 'desc') { $this->sorts[$col] = -1; } else { $this->sorts[$col] = 1; } } return($this); } 。
/** * -------------------------------------------------------------------------------- * LIMIT DOCUMENTS * -------------------------------------------------------------------------------- * * Limit the result set to $x number of documents * * @usage = $this->mongo_db->limit($x); */ 。
public function limit($x = 99999) { if($x !== NULL && is_numeric($x) && $x >= 1) { $this->limit = (int) $x; } return($this); } 。
/** * -------------------------------------------------------------------------------- * OFFSET DOCUMENTS * -------------------------------------------------------------------------------- * * Offset the result set to skip $x number of documents * * @usage = $this->mongo_db->offset($x); */ 。
public function offset($x = 0) { if($x !== NULL && is_numeric($x) && $x >= 1) { $this->offset = (int) $x; } return($this); } 。
/** * -------------------------------------------------------------------------------- * GET_WHERE * -------------------------------------------------------------------------------- * * Get the documents based upon the passed parameters * * @usage = $this->mongo_db->get_where('foo', array('bar' => 'something')); */ 。
public function get_where($collection = "", $where = array(), $limit = 99999) { return($this->where($where)->limit($limit)->get($collection)); } 。
/** * -------------------------------------------------------------------------------- * GET * -------------------------------------------------------------------------------- * * Get the documents based upon the passed parameters * * @usage = $this->mongo_db->get('foo', array('bar' => 'something')); */ 。
public function get($collection = "") { if(empty($collection)) { show_error("In order to retreive documents from MongoDB, a collection name must be passed", 500); } $results = array(); $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit)->skip((int) $this->offset)->sort($this->sorts),
$returns = array(),
foreach($documents as $doc): $returns[] = $doc; endforeach; $this->clear(); return($returns),
} 。
/** * -------------------------------------------------------------------------------- * COUNT * -------------------------------------------------------------------------------- * * Count the documents based upon the passed parameters * * @usage = $this->mongo_db->get('foo'); */ 。
public function count($collection = "") { if(empty($collection)) { show_error("In order to retreive a count of documents from MongoDB, a collection name must be passed", 500); } $count = $this->db->{$collection}->find($this->wheres)->limit((int) $this->limit)->skip((int) $this->offset)->count(); $this->clear(); return($count); } /** * 自增ID实现 * return insert_id */ private function insert_inc($table) { $update = array('$inc'=>array('id'=>1)); $query = array('table'=>$table); $command = array( 'findandmodify'=>'_increase', 'update'=>$update, 'query'=>$query, 'new'=>true, 'upsert'=>true ); $id = $this->db->command($command); return $id['value']['id']; } /** * -------------------------------------------------------------------------------- * INSERT * -------------------------------------------------------------------------------- * * Insert a new document into the passed collection * * @usage = $this->mongo_db->insert('foo', $data = array()); */ 。
public function insert($collection = "", $data = array()) { if(empty($collection)) { show_error("No Mongo collection selected to insert into", 500); } 。
if(count($data) == 0 || !is_array($data)) { show_error("Nothing to insert into Mongo collection or insert is not an array", 500); } 。
try { $inc = $this->insert_inc($collection); $data['_id'] = $inc; $result = $this->db->{$collection}->insert($data, array('fsync' => TRUE)); if($result['ok'] || $result){ return true; } else{ return false; } } catch(MongoCursorException $e) { show_error("Insert of data into MongoDB failed: {$e->getMessage()}", 500); } 。
} 。
/** * -------------------------------------------------------------------------------- * UPDATE * -------------------------------------------------------------------------------- * * Update a document into the passed collection * * @usage = $this->mongo_db->update('foo', $data = array()); */ 。
public function update($collection = "", $data = array(), $flage = false) { if(empty($collection)) { show_error("No Mongo collection selected to update", 500); } if(count($data) == 0 || !is_array($data)) { show_error("Nothing to update in Mongo collection or update is not an array", 500); } unset($data['_id']); if($flage){ $arr = $this->wheres; unset($arr['_id']); if(is_array($arr)){ foreach($arr as $key => $w){ unset($data[$key]); } } } try { $res = $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => TRUE, 'multiple' => FALSE)); $this->clear(); return $res; } catch(MongoCursorException $e) { show_error("Update of data into MongoDB failed: {$e->getMessage()}", 500); } 。
} 。
/** * -------------------------------------------------------------------------------- * UPDATE_ALL * -------------------------------------------------------------------------------- * * Insert a new document into the passed collection * * @usage = $this->mongo_db->update_all('foo', $data = array()); */ 。
public function update_all($collection = "", $data = array()) { if(empty($collection)) { show_error("No Mongo collection selected to update", 500); } 。
if(count($data) == 0 || !is_array($data)) { show_error("Nothing to update in Mongo collection or update is not an array", 500); } 。
try { $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => TRUE, 'multiple' => TRUE)); $this->clear(); return(TRUE); } catch(MongoCursorException $e) { show_error("Update of data into MongoDB failed: {$e->getMessage()}", 500); } 。
} 。
/** * -------------------------------------------------------------------------------- * DELETE * -------------------------------------------------------------------------------- * * delete document from the passed collection based upon certain criteria * * @usage = $this->mongo_db->delete('foo', $data = array()); */ 。
public function delete($collection, $where) { if(empty($collection)) { show_error("No Mongo collection selected to delete from", 500); } if(!$where){ show_error("No data input to delete", 500); } try { $this->wheres = $where; $this->db->{$collection}->remove($this->wheres); $this->clear(); return(TRUE); } catch(MongoCursorException $e) { show_error("Delete of data into MongoDB failed: {$e->getMessage()}", 500); } 。
} 。
/** * -------------------------------------------------------------------------------- * DELETE_ALL * -------------------------------------------------------------------------------- * * Delete all documents from the passed collection based upon certain criteria * * @usage = $this->mongo_db->delete_all('foo', $data = array()); */ 。
public function delete_all($collection = "") { if(empty($collection)) { show_error("No Mongo collection selected to delete from", 500); } 。
try { $this->db->{$collection}->remove($this->wheres, array('fsync' => TRUE, 'justOne' => FALSE)); $this->clear(); return(TRUE); } catch(MongoCursorException $e) { show_error("Delete of data into MongoDB failed: {$e->getMessage()}", 500); } 。
} 。
/** * -------------------------------------------------------------------------------- * ADD_INDEX * -------------------------------------------------------------------------------- * * Ensure an index of the keys in a collection with optional parameters. To set values to descending order, * you must pass values of either -1, FALSE, 'desc', or 'DESC', else they will be * set to 1 (ASC). * * @usage = $this->mongo_db->add_index($collection, array('first_name' => 'ASC', 'last_name' => -1), array('unique' => TRUE)); */ 。
public function add_index($collection = "", $keys = array(), $options = array()) { if(empty($collection)) { show_error("No Mongo collection specified to add index to", 500); } 。
if(empty($keys) || !is_array($keys)) { show_error("Index could not be created to MongoDB Collection because no keys were specified", 500); } foreach($keys as $col => $val) { if($val == -1 || $val === FALSE || strtolower($val) == 'desc') { $keys[$col] = -1; } else { $keys[$col] = 1; } } 。
if($this->db->{$collection}->ensureIndex($keys, $options) == TRUE) { $this->clear(); return($this); } else { show_error("An error occured when trying to add an index to MongoDB Collection", 500); } } 。
。
/** * -------------------------------------------------------------------------------- * REMOVE_INDEX * -------------------------------------------------------------------------------- * * Remove an index of the keys in a collection. To set values to descending order, * you must pass values of either -1, FALSE, 'desc', or 'DESC', else they will be * set to 1 (ASC). * * @usage = $this->mongo_db->remove_index($collection, array('first_name' => 'ASC', 'last_name' => -1)); */ 。
public function remove_index($collection = "", $keys = array()) { if(empty($collection)) { show_error("No Mongo collection specified to remove index from", 500); } 。
if(empty($keys) || !is_array($keys)) { show_error("Index could not be removed from MongoDB Collection because no keys were specified", 500); } 。
if($this->db->{$collection}->deleteIndex($keys, $options) == TRUE) { $this->clear(); return($this); } else { show_error("An error occured when trying to remove an index from MongoDB Collection", 500); } } 。
/** * -------------------------------------------------------------------------------- * REMOVE_ALL_INDEXES * -------------------------------------------------------------------------------- * * Remove all indexes from a collection. * * @usage = $this->mongo_db->remove_all_index($collection); */ 。
public function remove_all_indexes($collection = "") { if(empty($collection)) { show_error("No Mongo collection specified to remove all indexes from", 500); } 。
$this->db->{$collection}->deleteIndexes(); $this->clear(); return($this); } 。
/** * -------------------------------------------------------------------------------- * LIST_INDEXES * -------------------------------------------------------------------------------- * * Lists all indexes in a collection. * * @usage = $this->mongo_db->list_indexes($collection); */ public function list_indexes($collection = "") { if(empty($collection)) { show_error("No Mongo collection specified to remove all indexes from", 500); } return($this->db->{$collection}->getIndexInfo()); } 。
/** * -------------------------------------------------------------------------------- * DROP COLLECTION * -------------------------------------------------------------------------------- * * Removes the specified collection from the database. Be careful because this * can have some very large issues in production! */ 。
public function drop_collection($collection = "") { if(empty($collection)) { show_error("No Mongo collection specified to drop from database", 500); } $this->db->{$collection}->drop(); return TRUE; } 。
/** * -------------------------------------------------------------------------------- * CONNECT TO MONGODB * -------------------------------------------------------------------------------- * * Establish a connection to MongoDB using the connection string generated in * the connection_string() method. If 'mongo_persist_key' was set to true in the * config file, establish a persistent connection. We allow for only the 'persist' * option to be set because we want to establish a connection immediately. */ 。
private function connect() { $options = array(); if($this->persist === TRUE) { $options['persist'] = isset($this->persist_key) && !empty($this->persist_key) ? $this->persist_key : 'ci_mongo_persist'; } 。
try { $this->connection = new Mongo($this->connection_string, $options); $this->db = $this->connection->{$this->dbname}; return($this); } catch(MongoConnectionException $e) { show_error("Unable to connect to MongoDB: {$e->getMessage()}", 500); } } 。
/** * -------------------------------------------------------------------------------- * BUILD CONNECTION STRING * -------------------------------------------------------------------------------- * * Build the connection string from the config file. */ 。
private function connection_string($MONGODB_CONFIG) { 。
$this->host = trim($MONGODB_CONFIG['HOST']); $this->port = trim($MONGODB_CONFIG['PORT']); $this->user = trim($MONGODB_CONFIG['USER']); $this->pass = trim($MONGODB_CONFIG['PWD']); $this->dbname = trim($MONGODB_CONFIG['DATABASE']); $this->persist = trim($MONGODB_CONFIG['PERSIST']); $this->persist_key = trim($MONGODB_CONFIG['PERSIST_KEY']),
$connection_string = "mongodb://",
if(empty($this->host)) { show_error("The Host must be set to connect to MongoDB", 500); } 。
if(empty($this->dbname)) { show_error("The Database must be set to connect to MongoDB", 500); } 。
if(!empty($this->user) && !empty($this->pass)) { $connection_string .= "{$this->user}:{$this->pass}@"; } 。
if(isset($this->port) && !empty($this->port)) { $connection_string .= "{$this->host}:{$this->port}/{$this->dbname}"; } else { $connection_string .= "{$this->host}"; } 。
$this->connection_string = trim($connection_string); } 。
/** * -------------------------------------------------------------------------------- * CLEAR * -------------------------------------------------------------------------------- * * Resets the class variables to default settings */ 。
private function clear() { $this->selects = array(); $this->wheres = array(); $this->limit = NULL; $this->offset = NULL; $this->sorts = array(); } 。
/** * -------------------------------------------------------------------------------- * WHERE INITIALIZER * -------------------------------------------------------------------------------- * * Prepares parameters for insertion in $wheres array(). */ 。
private function where_init($param) { if(!isset($this->wheres[$param])) { $this->wheres[$param] = array(); } } /** * -------------------------------------------------------------------------------- * 设置表 * -------------------------------------------------------------------------------- * 参数: * $table 表名 */ public function set_table($table){ $this->collection = $table; } /** * -------------------------------------------------------------------------------- * 获取表名 * -------------------------------------------------------------------------------- */ public function get_table(){ return $this->collection; } /** * -------------------------------------------------------------------------------- * 设置表排序 * -------------------------------------------------------------------------------- * 参数: * $orderby 排序 */ public function set_orderby($orderby){ $this->page_sorts = $orderby; } /** * -------------------------------------------------------------------------------- * 获取左边结果集 * -------------------------------------------------------------------------------- * 参数: * $left 左边显示的个数 * $last 定位当前页的值 * $size 页面大小 */ public function get_left($left, $last, $size = PAGE_SIZE){ if($last){ $order = $this->nor_orderby(); if($this->page_sorts[$this->key] == -1){ $this->where_gt($this->key, $last); } else { $this->where_lt($this->key, $last); } return $this->limit($left * $size)->order_by($order)->get($this->collection); } } /** * -------------------------------------------------------------------------------- * 获取右边结果集 * -------------------------------------------------------------------------------- * 参数: * $right 右边显示的个数 * $last 定位当前页的值 * $size 页面大小 */ public function get_right($right, $last, $size = PAGE_SIZE){ if($last){ if($this->page_sorts[$this->key] == -1){ $this->where_lte($this->key, $last); } else { $this->where_gte($this->key, $last); } } return $this->limit($right * $size + 1)->order_by($this->page_sorts)->get($this->collection); } /** * -------------------------------------------------------------------------------- * 设置key * -------------------------------------------------------------------------------- * 参数: * $key 设置索引主键 */ public function set_key($key){ $this->key = $key; } /** * -------------------------------------------------------------------------------- * 求反 * -------------------------------------------------------------------------------- */ private function nor_orderby(){ foreach($this->page_sorts as $key => $order){ if($order == -1){ $orderby[$key] = 1; }else{ $orderby[$key] = -1; } } return $orderby; } /** * -------------------------------------------------------------------------------- * 获取上一页的值 * -------------------------------------------------------------------------------- * 参数: * $last 定位当前页的值 * $size 页面大小 */ public function get_prev($last, $size = PAGE_SIZE){ if($last){ if($this->page_sorts[$this->key] == 1){ $this->where_lt($this->key,$last)->order_by(array($this->key => -1)); } else { $this->where_gt($this->key,$last)->order_by(array($this->key => 1)); } $result = $this->limit($size)->get($this->collection); } return $result[$size - 1][$this->key]; } /** * -------------------------------------------------------------------------------- * 获取下一页的值 * -------------------------------------------------------------------------------- * 参数: * $last 定位当前页的值 * $size 页面大小 */ public function get_next($last, $size = PAGE_SIZE){ if($last){ if($this->page_sorts[$this->key] == 1){ $this->where_gte($this->key,$last); } else { $this->where_lte($this->key,$last); } } $result = $this->limit($size+1)->order_by($this->page_sorts)->get($this->collection); return $result[$size][$this->key]; } /** * -------------------------------------------------------------------------------- * 获取最后一页的值 * -------------------------------------------------------------------------------- * 参数: * $size 页面大小 */ public function get_last($size = PAGE_SIZE){ $res = $this->count($this->collection) % $size; $order = $this->nor_orderby(); if($res > 0){ $result = $this->limit($res)->order_by($order)->get($this->collection); return $result[$res - 1][$this->key]; }else{ $result = $this->limit($size)->order_by($order)->get($this->collection); return $result[$size - 1][$this->key]; } } /** * -------------------------------------------------------------------------------- * 分页查询 * -------------------------------------------------------------------------------- * 参数: * $last 定位当前页的值 * $size 页面大小 */ public function page_query($last, $size = PAGE_SIZE){ if($last){ if($this->page_sorts[$this->key]==1){ $this->where_gte($this->key,$last); } else { $this->where_lte($this->key,$last); } } return $this->limit($size)->order_by($this->page_sorts)->get($this->collection); } /** * 批量执行代码_插入 * @param String $collection * @param 二维数组 $code */ public function execute_insert($collection,$code){ //将二维数组分成js格式 $strcode=''; foreach($code as $k=>$v){ foreach($v as $kk=>$vv){ $strcode.='db.getCollection("'.$collection.'").insert({ "'.$kk.'":"'.$vv.'" });'; } } // retrun array([ok]=>1); return $this->db->execute($code); } 。
} ?> 。
page.class.php mongodb分页逻辑类 。
<?php db = $DB; $this->count = $this->db->count($this->db->get_table()); $url = SITE_ROOT.strtolower(CLASS_NAME).'/'.METHOD_NAME; $this->url = $this->url ? $this->url : $url; $set = $set ? $set : 5; $this->set = $set; $size = $size ? $size : PAGE_SIZE; $this->size = $size; $this->last = $last; $this->prev = $DB->get_prev($this->last); $this->next = $DB->get_next($this->last); //$this->page = GET::UINT('page'); $this->page = $this->page ? $this->page : 1; $this->total = @ceil($this->count / $this->size); $this->key = $key; $this->orderby = $orderby; } //输出分页链接 public function get_link(){ if($this->total != 1){ $this->get_first(); $this->get_prev(); $this->get_center(); $this->get_next(); $this->get_last(); $this->get_turnto(); } if($this->link){ $this->link = $this->turnto.$this->link.'共'.number_format($this->total).'页 '.number_format($this->count).'条记录'; } if($this->turnto){ $this->link .= ''; } return $this->link; } //获取左边显示的个数 public function get_left(){ return $this->left = ($this->set - $this->page >= 0) ? ($this->page - 1) : $this->set; } //获取右边显示的个数 public function get_right(){ return $this->right = ($this->total - $this->page > $this->set) ? $this->set : ($this->total - $this->page); } //设置左边的结果集 public function set_left_result($left_result){ $this->leftresult = $left_result; } //设置右边的结果集 public function set_right_result($right_result){ $this->rightresult = $right_result; } //设置排序条件 public function set_orderby($orderby){ $this->orderby = $orderby; } //设置最后一页 public function set_last($last){ $this->lastd = $last; } //设置中间显示页码个数 public function set($set){ $this->set = $set; } //获取首页 private function get_first(){ if($this->page != 1){ if($this->total > 0){ $this->link.='首页'; } } } //获取上一页 private function get_prev(){ if($this->prev){ $this->link.='上一页'; } } //中间显示 private function get_center(){ $start = ($this->page - $this->set) <= 0 ? 1 : ($this->page - $this->set); $end = ($this->page + $this->set + 1 >= $this->total) ? $this->total + 1 : ($this->page + $this->set + 1),
。
$ii = $this->left; $iii = 0; //显示左边的 for($i = $start; $i < $end; $i++, $ii--, $iii++){ if($this->page == $i){ $this->link.=''.$i.''; }else{ $the_id = $ii * $this->size - 1; if($the_id > 0){ $this->link.=''.$i.''; }else{ $the_id = ($iii - $this->left) * $this->size; $this->link.=''.$i.''; } } } } 。
//获取下一页 private function get_next(){ if($this->next){ $this->link.='下一页'; } } //获取尾页 private function get_last(){ if($this->page != $this->total){ $this->link.='尾页'; } } //跳转到 private function get_turnto(){ $this->turnto = ' 转到第 <input type="text" name="p" style="width:25px;text-align:center"> 页'; } //求反 public function nor_orderby(){ foreach($this->orderby as $key => $order){ if($order==-1){ $orderby[$key] = 1; }else{ $orderby[$key] = -1; } } return $orderby; } //设置key public function set_key($key){ $this->key = $key; } //分页操作 public function show(){ $this->set_key($this->key); $this->set_orderby($this->orderby); $left = $this->get_left(); $right = $this->get_right(); $leftresult = $this->db->get_left($left, $this->last); $rightresult = $this->db->get_right($right, $this->last); $this->set_left_result($leftresult); $this->set_right_result($rightresult); $last = $this->db->get_last(); $this->set_last($last); return $this->get_link(); } } /* 调用例子rockmongo global $DB; $lastid = GET::UINT('id'); $table = 'log'; $key = '_id'; $orderby = array($key => -1); $DB->set_table($table); $DB->set_key($key); $DB->set_orderby($orderby); $log = $DB->page_query($lastid),
$page = new Page($lastid, $key, $orderby); $pager = $page->show(); */ 。
?> 。
test.php 测试代码 。
<?php include "page.class.php"; include "mongodb.class.php"; define(PAGE_SIZE, 5);//每页大小 $config['HOST'] = '127.0.0.1'; $config['PORT'] = 20081; //mongodb端口 $config['DATABASE'] = 'domain';//mongodb数据库名 $config['USER'] = ''; $config['PWD'] = ''; $config['PERSIST'] = TRUE,
。
$DB = new DB($config),
$table = 'whois'; //mongodb collection名 $key = '_id'; $orderby = array($key => -1),
$DB->set_table($table); $DB->set_key($key); $DB->set_orderby($orderby),
$log = $DB->page_query($lastid,5),
$page = new Page($lastid, $key, $orderby),
echo $pager = $page->show(),
?> 。
。
最后此篇关于高效mongodb的php分页类(不使用skip)的文章就讲到这里了,如果你想了解更多关于高效mongodb的php分页类(不使用skip)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!