php操作MongoDB类实例
网络编程 2021-07-05 09:09www.168986.cn编程入门
这篇文章主要介绍了php操作MongoDB类的方法,实例分析了仿照CI实现的MongoDB类及其操作技巧,需要的朋友可以参考下
本文实例讲述了php操作MongoDB类的方法。分享给大家供大家参考。具体如下
1. MyMongo.php文件
<?php / 仿写CI的MongoDB @author sparkHuang 2011-11-03 / class MyMongo { private $mongo_config = "mongo_config.php"; private $connection; private $db; private $mongo_connect_string; private $host; private $port; private $user; private $pass; private $dbname; private $persist; private $persist_key; private $selects = array(); private $wheres = array(); private $sorts = array(); private $limit = 999999; private $offset = 0; public function __construct() { if ( ! class_exists('Mongo')) { $this->log_error("The MongoDB PECL extentiosn has not been installed or enabled."); exit; } $this->connection_string(); $this->connect(); } / 更改数据库 / public function switch_db($database = '') { if (empty($database)) { $this->log_error("To switch MongoDB databases, a new database name must be specified"); exit; } $this->dbname = $database; try { $this->db = $this->connection->{$this->dbname}; return true; } catch(Exception $e) { $this->log_error("Unable to switch Mongo Databases: {$e->getMessage()}"); exit; } } / 设置select字段 / public function select($includs = array(), $excludes = array()) { if ( ! is_array($includs)) { $includs = (array)$includs; } if ( ! is_array($excludes)) { $excludes = (array)$excludes; } if ( ! empty($includs)) { foreach ($includs as $col) { $this->selects[$col] = 1; } } else { foreach ($excludes as $col) { $this->selects[$col] = 0; } } return($this); } / where条件查询判断 @usage = $this->mongo_db->where(array('foo' => 'bar'))->get('foobar'); / public function where($wheres = array()) { if ( ! is_array($wheres)) { $wheres = (array)$wheres; } if ( ! empty($wheres)) { foreach($wheres as $wh => $val) { $this->wheres[$wh] = $val; } } return($this); } / where ... in .. 条件查询判断 @usage = $this->mongo_db->where_in('foo', array('bar', 'zoo'))->get('foobar'); / public function where_in($field = '', $in = array()) { $this->where_init($field); $this->wheres[$field]['$in'] = $in; return($this); } / where ... not in .. 条件查询判断 @usage = $this->mongo_db->where_not_in('foo', array('bar', 'zoo'))->get('foobar'); / public function where_not_in($field = '', $in = array()) { $this->where_init($field); $this->wheres[$field]['$nin'] = $in; return($this); } / where ... $field > $x .. 条件查询判断 @usage = $this->mongo_db->where_gt('foo', 20)->get('foobar'); / public function where_gt($field = '', $x) { $this->where_init($field); $this->wheres[$field]['$gt'] = $x; return($this); } / where ... $field >= $x .. 条件查询判断 @usage = $this->mongo_db->where_gte('foo', 20)->get('foobar'); / public function where_gte($field = '', $x) { $this->where_init($field); $this->wheres[$field]['$gte'] = $x; return($this); } / where ... $field < $x .. 条件查询判断 @usage = $this->mongo_db->where_lt('foo', 20)->get('foobar'); / public function where_lt($field = '', $x) { $this->where_init($field); $this->wheres[$field]['$lt'] = $x; return($this); } / where ... $field <= $x .. 条件查询判断 @usage = $this->mongo_db->where_lte('foo', 20)->get('foobar'); / public function where_lte($field = '', $x) { $this->where_init($field); $this->wheres[$field]['$lte'] = $x; return($this); } / where ... $field >= $x AND $field <= $y .. 条件查询判断 @usage = $this->mongo_db->where_between('foo', 20, 30)->get('foobar'); / public function where_between($field = '', $x, $y) { $this->where_init($field); $this->wheres[$field]['$gte'] = $x; $this->wheres[$field]['$lte'] = $y; return($this); } / where ... $field > $x AND $field < $y .. 条件查询判断 @usage = $this->mongo_db->where_between_ne('foo', 20, 30)->get('foobar'); / 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 ... $field <> $x .. 条件查询判断 @usage = $this->mongo_db->where_ne('foo', 20)->get('foobar'); / public function where_ne($field = '', $x) { $this->where_init($field); $this->wheres[$field]['$ne'] = $x; return($this); } / where ... or .. 条件查询判断 @usage = $this->mongo_db->where_or('foo', array('foo', 'bar'))->get('foobar'); / public function where_or($field = '', $values) { $this->where_init($field); $this->wheres[$field]['$or'] = $values; return($this); } / where ... and .. 条件查询判断 @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 $field % $num = $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条件查询(PHP中定义MongoRegex类实现) @usage : $this->mongo_db->like('foo', 'bar', 'im', false, false)->get(); / public function like($field = "", $value = "", $flags = "i", $enable_start_wildcard = true, $enable_end_wildcard = true) { $field = (string)$field; $this->where_init($field); $value = (string)$value; $value = quotmeta($value); if (true !== $enable_start_wildcard) { $value = "^".$value; } if (true !== $enable_end_wildcard) { $value .= "$"; } $regex = "/$value/$flags"; $this->wheres[$field] = new MongoRegex($regex); return($this); } / order排序( 1 => ASC, -1 => DESC) @usage: $this->mongo_db->get_where('foo', array('name' => 'tom'))->order_by(array("age" => 1)); / 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 @usage: $this->mongo_db->get_where('foo', array('name' => 'tom'))->limit(10); / public function limit($x = 999999) { if ($x !== NULL && is_numeric($x) && $x >= 1) { $this->limit = (int)$x; } return($this); } / offset @usage: $this->mongo_db->get_where('foo', array('name' => 'tom'))->offset(10); / public function offset($x = 0) { if($x !== NULL && is_numeric($x) && $x >= 1) { $this->offset = (int) $x; } return($this); } / get_where @usage: $this->mongo_db->get_where('foo', array('bar' => 'something')); / public function get_where($collection = "", $where = array(), $limit = 999999) { return($this->where($where)->limit($limit)->get($collection)); } / get @usage: $this->mongo_db->where(array('name' => 'tom'))->get('foo'); / public function get($collection) { if (empty($collection)) { $this->log_error("In order to retreive documents from MongoDB, a collection name must be passed"); exit; } $results = array(); $results = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int)$this->limit)->skip((int)$this->offset)->sort($this->sorts); $returns = array(); foreach($results as $result) { $returns[] = $result; } $this->clear(); return($returns); } / count @usage: $this->db->get_where('foo', array('name' => 'tom'))->count('foo'); / public function count($collection) { if (empty($collection)) { $this->log_error("In order to retreive documents from MongoDB, a collection name must be passed"); exit; } $count = $this->db->{$collection}->find($this->wheres)->limit((int)$this->limit)->skip((int)$this->offset)->count(); $this->clear(); return($count); } / insert @usage: $this->mongo_db->insert('foo', array('name' => 'tom')); / public function insert($collection = "", $data = array()) { if (empty($collection)) { $this->log_error("No Mongo collection selected to delete from"); exit; } if (count($data) == 0 || ! is_array($data)) { $this->log_error("Nothing to insert into Mongo collection or insert is not an array"); exit; } try { $this->db->{$collection}->insert($data, array('fsync' => true)); if (isset($data['_id'])) { return($data['_id']); } else { return(false); } } catch(MongoCursorException $e) { $this->log_error("Insert of data into MongoDB failed: {$e->getMessage()}"); exit; } } / update : 利用MongoDB的 $set 实现 @usage : $this->mongo_db->where(array('name' => 'tom'))->update('foo', array('age' => 24)) / public function update($collection = "", $data = array()) { if (empty($collection)) { $this->log_error("No Mongo collection selected to delete from"); exit; } if (count($data) == 0 || ! is_array($data)) { $this->log_error("Nothing to update in Mongo collection or update is not an array"); exit; } try { $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => true, 'multiple' => false)); //注意: multiple为false return(true); } catch(MongoCursorException $e) { $this->log_error("Update of data into MongoDB failed: {$e->getMessage()}"); exit; } } / update_all : 利用MongoDB的 $set 实现 @usage : $this->mongo_db->where(array('name' => 'tom'))->update_all('foo', array('age' => 24)); / public function update_all($collection = "", $data = array()) { if (empty($collection)) { $this->log_error("No Mongo collection selected to delete from"); exit; } if (count($data) == 0 || ! is_array($data)) { $this->log_error("Nothing to update in Mongo collection or update is not an array"); exit; } try { $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => true, 'multiple' => true)); //注意: multiple为true return(true); } catch(MongoCursorException $e) { $this->log_error("Update of data into MongoDB failed: {$e->getMessage()}"); exit; } } / delete @usage : $this->mongo_db->where(array('name' => 'tom'))->delete('foo'); / public function delete($collection = "") { if (empty($collection)) { $this->log_error("No Mongo collection selected to delete from"); exit; } try { $this->db->{$collection}->remove($this->wheres, array('fsync' => true, 'justOne' => true)); //注意justOne为true; } catch(MongoCursorException $e) { $this->log_error("Delete of data into MongoDB failed: {$e->getMessage()}"); exit; } } / delete_all @usage : $this->mongo_db->where(array('name' => 'tom'))->delete_all('foo'); / public function delete_all($collection = "") { if (empty($collection)) { $this->log_error("No Mongo collection selected to delete from"); exit; } try { $this->db->{$collection}->remove($this->wheres, array('fsync' => true, 'justOne' => false)); //注意justOne为false; } catch(MongoCursorException $e) { $this->log_error("Delete of data into MongoDB failed: {$e->getMessage()}"); exit; } } / add_index @usage : $this->mongo_db->add_index('foo', array('first_name' => 'ASC', 'last_name' => -1), array('unique' => true))); / public function add_index($collection, $keys = array(), $options = array()) { if (empty($collection)) { $this->log_error("No Mongo collection specified to add index to"); exit; } if (empty($keys) || ! is_array($keys)) { $this->log_error("Index could not be created to MongoDB Collection because no keys were specified"); exit; } foreach($keys as $col => $val) { if ($val == -1 || $val == false || strtolower($val) == 'desc') { $keys[$col] = -1; } else { $keys[$col] = 1; } } //在此没有对$options数组的有效性进行验证 if (true == $this->db->{$collection}->ensureIndex($keys, $options)) { $this->clear(); return($this); } else { $this->log_error("An error oured when trying to add an index to MongoDB Collection"); exit; } } / remove_index @usage : $this->mongo_db->remove_index('foo', array('first_name' => 'ASC', 'last_name' => -1)) / public function remove_index($collection = "", $keys = array()) { if (empty($collection)) { $this->log_error("No Mongo collection specified to add index to"); exit; } if (empty($keys) || ! is_array($keys)) { $this->log_error("Index could not be created to MongoDB Collection because no keys were specified"); exit; } if ($this->db->{$collection}->deleteIndex($keys)) { $this->clear(); return($this); } else { $this->log_error("An error oured when trying to add an index to MongoDB Collection"); exit; } } / remove_all_index @usage : $this->mongo_db->remove_all_index('foo', array('first_name' => 'ASC', 'last_name' => -1)) / public function remove_all_index($collection = "", $keys = array()) { if (empty($collection)) { $this->log_error("No Mongo collection specified to add index to"); exit; } if (empty($keys) || ! is_array($keys)) { $this->log_error("Index could not be created to MongoDB Collection because no keys were specified"); exit; } if ($this->db->{$collection}->deleteIndexes($keys)) { $this->clear(); return($this); } else { $this->log_error("An error oured when trying to add an index to MongoDB Collection"); exit; } } / list_indexes @usage : $this->mongo_db->list_indexes('foo'); / public function list_indexes($collection = "") { if (empty($collection)) { $this->log_error("No Mongo collection specified to add index to"); exit; } return($this->db->{$collection}->getIndexInfo()); } / drop_collection @usage : $this->mongo_db->drop_collection('foo'); / public function drop_collection($collection = "") { if (empty($collection)) { $this->log_error("No Mongo collection specified to add index to"); exit; } $this->db->{$collection}->drop(); return(true); } / 生成连接MongoDB 参数字符串 / private function connection_string() { include_once($this->mongo_config); $this->host = trim($config['host']); $this->port = trim($config['port']); $this->user = trim($config['user']); $this->pass = trim($config['pass']); $this->dbname = trim($config['dbname']); $this->persist = trim($config['persist']); $this->persist_key = trim($config['persist_key']); $connection_string = "mongodb://"; if (empty($this->host)) { $this->log_error("The Host must be set to connect to MongoDB"); exit; } if (empty($this->dbname)) { $this->log_error("The Database must be set to connect to MongoDB"); exit; } 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}"; } else { $connection_string .= "{$this->host}"; } $this->connection_string = trim($connection_string); } / 连接MongoDB 获取数据库操作句柄 / private function connect() { $options = array(); if (true === $this->persist) { $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) { $this->log_error("Unable to connect to MongoDB: {$e->getMessage()}"); } } / 初始化清理部分成员变量 / private function clear() { $this->selects = array(); $this->wheres = array(); $this->limit = NULL; $this->offset = NULL; $this->sorts = array(); } / 依据字段名初始化处理$wheres数组 / private function where_init($param) { if ( ! isset($this->wheres[$param])) { $this->wheres[$param] = array(); } } / 错误记录 / private function log_error($msg) { $msg = "[Date: ".date("Y-m-i H:i:s")."] ".$msg; @file_put_contents("./error.log", print_r($msg."\n", true), FILE_APPEND); } } / End of MyMongo.php /
2. mongo_config.php配置文件
<?php $config["host"] = "localhost"; $config["user"] = ""; $config["pass"] = ""; $config["port"] = 27017; $config["dbname"] = "test"; $config['persist'] = TRUE; $config['persist_key'] = 'ci_mongo_persist'; /End of mongo_config.php/
3. MyMongoDemo.php文件
<?php include_once("MyMongo.php"); $conn = new MyMongo(); //删除所有记录 $conn->delete_all("blog"); //插入第一条记录 $value = array("name" => "狼蚁网络推广", "age" => 25, "addr" => array("country" => "中国", "province" => "广西", "city" => "桂林")); $conn->insert("blog", $value); var_dump($conn->select(array("name", "age"))->get("blog")); var_dump($conn->get("blog")); / End of MyMongoDemo.php /
希望本文所述对大家的php程序设计有所帮助。
上一篇:php准确获取文件MIME类型的方法
下一篇:PHP实现的购物车类实例
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程