php mongodb 聚合分页,高效mongodb的php分页类(不使用skip)

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

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值