<?php /** * Description of MongoUtil * MongoDB 封装类 * 参考 PHP Manual<br/> * use like this:<br/> * $mongodb = MongoUtil::init();<br/> * $mongodb->find('collection_name');<br/> * @link http://www.php.net/manual/zh/book.mongo.php<br/> * @link http://docs.mongodb.org/manual/<br/> * * @author Nomandia */ include_once __DIR__ . '/Config.php'; class MongoUtil { private static $instance; public $mongo; public $db_name; public $coll_name; public $cursor; public $auto_connect = true; public $errors; /** * 静态数据库 */ const DB_MODLUE = 'mp_module'; /** * 用户数据库 */ const DB_USERDATA = 'mp_userdata'; function __construct() { $config = Config::$MONGO_SERVER; shuffle($config['hosts']); $host = $config['hosts'][0]; // echo 'mongodb://'.$host['ip'].':'.$host['port'].'/'.self::DB_USERDATA.'<br/>'; try{ // 权限的部分暂时免了,根据需要写默认连接的数据库,否则就是self::DB_USERDATA $this->mongo = new MongoClient('mongodb://'.$host['ip'].':'.$host['port'].'/'.self::DB_USERDATA, array(connect=>$this->auto_connect)); } catch(Exception $ex){ $this->errors= $ex->getMessage(); } $this->connect(); } public static function init() { if (!self::$instance) { self::$instance = new MongoUtil(); } return self::$instance; } public function __clone() { ; } public function __destruct() { $this->mongo->close(); } // **************** 实例化后的方法 **************** public function connect() { return $this->mongo->connect(); } public function select_db($db_name){ $this->db_name = $db_name; try{ return $this->mongo->selectDB($db_name); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } } public function list_db(){ try{ return $this->mongo->listDBs(); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return null; } /** * 获取一个MongoCollection对象 * @param string 数据库名 * @param string 集合名 * @return MongoCollection MongoDB集合 */ public function select_collection($db_name, $coll_name){ $this->db_name = $db_name; $this->coll_name = $coll_name; try { return $this->mongo->selectCollection($db_name, $coll_name); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } } /** * 删除集合 * @param string 集合名 * @return bool 操作结果 */ public function drop($coll_name){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->drop(); } /** * 创建一个索引 * @param string 集合名 * @param array 字段名 * @param array array(unique=>false), unique=true时创建唯一索引 * @return bool 操作结果 */ public function create_index($coll_name, $keys, $options=array(unique=>false)) { $db_name = $this->db_name; try{ return $this->mongo->$db_name->$coll_name->createIndex($keys, $options); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return false; } /** * 执行一条命令 * @param array 命令 * @return array 执行结果 */ public function command($coll_name, $command){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->command($command); } /** * 删除集合索引 * @param string 集合名 * @param array 键 * @return bool 操作结果 */ public function delete_index($coll_name, $keys){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->deleteIndex($keys); } /** * 删除集合所有的索引 * @param string 集合名 * @return bool 操作结果 */ public function delete_all_index($coll_name){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->deleteIndexes(); } /** * 插入文档到集合(支持批量插入) * @param string 集合名 * @param array 文档 * @return bool 是否插入成功 */ public function insert($coll_name, $docs) { $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->insert($docs); } /** * 保存一个结果(如果存在此对象则更新,否则插入) * @param string 集合名 * @param array 文档 * @return bool 插入结果 */ public function save($coll_name, $neo_data){ $db_name = $this->db_name; try{ return $this->mongo->$db_name->$coll_name->save($neo_data); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return false; } /** * 更新一个文档 * @param string 集合名 * @param array 条件 * @param array 更新的文档 * @param array 选项 array(upsert=>0) upsert=1时,如果不存在符合条件的文档则将新文档插入 multiple=1时表示更新所有符合条件的记录,否则只会更新1条 * @return bool 是否插入成功 */ public function update($coll_name, $condition, $neo_data, $options = array(fsync=>0, upsert=>0, multiple=>0)) { $db_name = $this->db_name; $options['save'] = 1; if ( !isset($options['multiple'])){ $options['multiple'] = 0; } try{ return $this->mongo->$db_name->$coll_name->update($condition, $neo_data, $options); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return false; } /** * 删除集合记录 * @param string 集合名 * @param array 删除条件 * @param array 选项 array(justOne=>0) justOne=1时只删除1条记录 * @return bool 删除结果 */ public function remove($coll_name, $condition, $options = array(justOne=>0, fsync=>0)) { $db_name = $this->db_name; $options['save'] = 1; if ( !isset($options['justOne'])){ $options['justOne'] = 0; } try{ return $this->mongo->$db_name->$coll_name->remove($condition, $options); } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return false; } /** * 查询MongoDB * @param string 集合名 * @param array 查询的条件array<br/>如<i>array(col_a=>111)</i> * @param array 集合过滤器array<br/>完整的样子想这个:<i>array(sort=>array(col_a=>1,col_b=>-1), skip=>100, limit=>10, timeout=>5000, immortal=>true)</i>,这表示: * <ol> * <li>wrapped 以wrapped为封装为数组的键,默认按数组先后顺序</li> * <li>_id,默认不返回数据带有MongoID字段,如果指定了返回列的话也是一样的效果</li> * <li>sort 以col_a为ASC,col_b为DESC排序,可以多列组合</li> * <li>skip 表示从101条记录开始取数据,即跳过了前100条</li> * <li>limit 本次选取的条数</li> * <li>timeout 表示等待响应的时间(暂不使用)</li> * <li>immortal 表示是否维持链接永久有效,默认true,此时timeout失效(暂不使用)</li> * </ol> * @param array 需要返回的字段(通常只返回必要的字段可以加快响应速度) * @return mixed 查询的结果 */ public function find($coll_name, $condition=array(), $result_filter=array(wrapped=>'', with_objectId=>0, timeout=>5000, immortal=>true), $ret_fields = array() ) { $db_name = $this->db_name; $cursor = $this->mongo->$db_name->$coll_name->find($condition, $ret_fields); if ( !empty($result_filter['skip'])){ $cursor->skip($result_filter['skip']); } if ( !empty($result_filter['limit'])){ $cursor->limit($result_filter['limit']); } if ( !empty($result_filter['sort'])){ $cursor->sort($result_filter['sort']); } if ( !empty($result_filter['wrapped'])){ $wrapped = $result_filter['wrapped']; } if ( $result_filter['with_objectId']==1){ //如果指定了返回的列此项目就失效 $with_objectId = count($ret_fields) < 1; } $result = array(); $this->cursor = $cursor; try{ if ( $wrapped == '_id'){ while($ret = $cursor->getNext()){ $result[$ret['_id']->{'$id'}] = $ret; } } else if (strlen ($wrapped) ) { while($ret=$cursor->getNext()){ $result[$ret[$wrapped]] = $ret; } } else { while($ret=$cursor->getNext()){ $result[] = $ret; } } if ( !$with_objectId ){ foreach($result as $key=>$v){ unset($result[$key]['_id']); } } } catch (Exception $ex) { $this->errors = $ex->getMessage(); } return $result; } /** * 根据ID查询一条记录 * @param string 集合名 * @param string MongoId * @param mixed 指定返回的列,默认返回所有列 * @return mixed 结果 */ public function find_by_objectId($coll_name, $_id, $ret_fields=array()){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->findOne(array('_id'=>( new MongoId($_id))), $ret_fields); } /** * 查询一条记录 * @param string 集合名 * @param array 查询条件 * @param array 需要返回的字段 * @return array 查询的结果 */ public function find_one($coll_name, $condition=array(), $fields = array('_id'=>0)) { $db_name = $this->db_name; if ( is_string($condition['_id'])){ $condition['_id'] = new MongoId($condition['_id']); } return $this->mongo->$db_name->$coll_name->findOne($condition, $fields); } /** * 计算集合内指定条件文档的数量 * @param string 集合名 * @param array 查询的条件 * @param int 指定返回结果数量的上限 * @param int 统计前跳过的结果数量 * @return int 集合的数量 */ public function count($coll_name, $condition=array(), $limit=0, $skip=0){ $db_name = $this->db_name; return $this->mongo->$db_name->$coll_name->count($condition, $limit, $skip); } }
或许你看到了Config.php,其实他貌似长成这个样子:
<?php final class Config { /** * Memcache 配置 * @var mixed Memcache 配置 */ public static $MEMCACHE_SERVER = array( hosts => array( array( host => '127.0.0.1', port => 11211, weight => 100 ) ), threshold => 30000, saving => 0.2 ); /** * MongoDB 配置 * @var mixed MongoDB 配置 */ public static $MONGO_SERVER = array( hosts => array( array(ip => '127.0.0.1', port => 27017, username => 'admin', password => 'admin', is_master => true) // ,array(ip => '127.0.0.1', port => 27018, username => 'admin', password => 'admin', is_master => true) ) ); /** * MySQL 配置 * @var mixed MySQL 配置 */ public static $MYSQL_SERVER = array( host=>'127.0.0.1', user=>'root', password=>'123456', port=>3306 ); } ?>
相关推荐
本文将详细介绍一个基于PHP封装的MongoDB操作类,帮助开发者更高效地利用MongoDB。 首先,这个“php封装的mongodb操作类”是为了解决PHP与MongoDB之间的交互问题,提供一套便捷的API,使得开发人员无需深入了解...
一直稳定在用的数据库封装,使用极其简洁,查询结果转换为类不需要列出每个字段。内含范例网站。public class MongoOper { protected MongoClient m_client; protected IMongoDatabase m_db; protected ...
基于node封装的一个MongoDB操作类库 包括增删改查 分页查询 批量操作 采用单例模式大大提高性能 使用时需新建一个config.js配置数据库地址 数据库名称 const Config ={ url:'数据库地址', dbName:'数据库' } ...
在Java开发中,MongoDB是一个常用的NoSQL数据库,以其灵活性、高性能和易扩展性而备受青睐。本项目针对MongoDB进行了底层封装,旨在提供一套简洁、高效的API,使得开发人员可以更加便捷地进行数据的增删查改操作,...
近来学习了mongodb,刚好是做php开发的,随便写了php操作mongodb的封装类. <?php /** * Created by PhpStorm. * User: lee * Date: 2016/10/24 * Time: 13:49 */ namespace App\Http\Controllers\Api; use ...
本文实例讲述了PHP操作Mongodb封装类。分享给大家供大家参考,具体如下: <?php /** * Mongodb 基本操作API,支持基本类似关系统型数据库的操作接口 * * @version 1.0 * [说明] * * 1:该版本API实现了 ...
在您提供的"mongodb操作封装类"中,很显然,开发者已经创建了一个C#类库,用于简化对MongoDB的操作,便于在WPF应用程序中使用。 该"wpfMongoDbCsharp"项目可能是包含以下关键组件的: 1. **MongoDB.Driver**:这是...
这个"php Mongodb操作类"可能是对`mongodb`扩展的一个封装,它可能包含以下核心功能: - 连接:建立到MongoDB服务器的连接,可能包括设置主机名、端口、数据库名称和认证信息。 - 集合操作:选择或创建集合,相当...
MongoDB DAO层封装是数据库操作的重要一环,它在应用程序与数据库之间建立了一层抽象,使得数据访问更加简便和高效。在这个项目中,我们主要基于MongoDB 3.0版本和Spring Data 1.5进行整合,实现了DAO层的封装。下面...
构造一个 Redis 缓存层 + MongoDB 持久层的后台 Server 架构 并通过简单方便的接口供上层程序员使用,具体的数据分层处理对上层程序员是黑盒的 8. 设计并开发整套缓存层使用的 KEY 规则,方便缓存更新 结合公司的...
以下是对“mongodb的odm封装”这一主题的详细解释: 1. **ODM基本概念**: - **对象-文档映射(Object-Document Mapping)**:类似于关系型数据库中的ORM(Object-Relational Mapping),ODM是一种将数据模型转换...
Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...
整合了一套crud代码,减少sql查询,封装mysql和mongodb等操作 参数说明https://mp.csdn.net/mp_download/manage/download/UpDetailed
- 编写一个简单的PHP脚本来连接MongoDB并执行查询,通过浏览器访问以测试连接是否正常。 - 如果遇到问题,检查PHP错误日志和MongoDB的日志文件,它们通常会提供关于问题的线索。 通过以上步骤,你就可以在Windows...
MongoDB是一个高性能、开源、无模式的分布式文档型数据库,它以其灵活性和可扩展性受到青睐。而PHP作为服务器端脚本语言,因其易学易用性而广受欢迎,因此将PHP与MongoDB结合,可以构建高效的数据驱动应用。 本文档...
例如,如果我们的ER模型包含“用户”实体,那么在MongoDB中可能有一个名为"users"的集合,每个文档代表一个用户,包含如"name"、"email"和"password"等字段。 接下来,我们使用Flask创建API。Flask提供了一个简单的...
mongodb 副本集php文件样例,php连接mongodb
"php MongoDB for CI" 是一个针对CI框架的MongoDB扩展,它提供了一种简单且高效的方式来操作MongoDB数据库。 首先,MongoDB是一个流行的开源NoSQL数据库系统,它支持非结构化数据,如文档、集合和图形数据。与传统...
标题中的"php封装的mongodb操作类代码"指的是在PHP中为MongoDB数据库创建的一个自定义类,用于简化和封装MongoDB的操作。这个类通常会包含连接数据库、执行查询、插入数据、更新数据以及删除数据等常见操作的方法。...