<?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 ); } ?>
相关推荐
【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目源码
人脸识别项目实战
人工智能-人脸识别代码,采用cnn的架构识别代码
汽车配件制造业企业信息化整体解决方案
短期风速预测模型,IDBO-BiTCN-BiGRU-Multihead-Attention IDBO是,网上复现 评价指标:R方、MAE、MAPE、RMSE 附带测试数据集运行(风速数据) 提示:在MATLAB2024a上测试正常 ,短期风速预测模型; IDBO-BiTCN-BiGRU-Multihead-Attention; 评价指标: R方、MAE、MAPE、RMSE; 复现; 测试数据集; MATLAB 2024a,短期风速预测模型:IDBO-BiTCN-BiGRU-Attention集成模型
手势识别项目实战
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
相亲交友系统源码 V10.5支持婚恋相亲、媒婆返利、红娘系统、商城系统等等 这款交友系统功能太多了,适合婚恋相亲,还有媒婆婚庆等等支持 PC和 H5还有小程序,可封装红年、APP,里面带安装教程
本资源《单片机也能玩双核之你想不到的C技巧系列——嵌入式实战》涵盖 双核单片机开发、C语言高级技巧、嵌入式系统优化 等核心内容,结合 实战案例与视频教程,帮助开发者深入理解并掌握高效编程技巧。 适用人群: 适合 嵌入式开发工程师、单片机开发者、电子信息相关专业学生,以及希望提升 C语言编程能力 和 嵌入式项目经验 的技术人员。 能学到什么: 双核单片机开发思路,提高并行处理能力。 C语言高级技巧,提升代码优化与执行效率。 嵌入式系统调试方法,掌握实际项目中的调试策略。 实战案例解析,学习如何在实际工程中应用双核技术。 阅读建议: 建议 先学习基础知识,再结合 示例代码与视频教程 进行实操,重点关注 代码优化、调试技巧与双核应用模式,通过实战演练提高嵌入式开发能力。
人脸识别项目源码实战
人脸识别项目源码实战
c语言学习
红外光伏缺陷目标检测模型,YOLOv8模型 基于红外光伏缺陷目标检测数据集训练,做了必要的数据增强处理,以达到缺陷类别间的平衡 可检测大面积热斑,单一热斑,二极管短路和异常低温四类缺陷 测试集指标如图所示 ,核心关键词:红外光伏缺陷目标检测模型; YOLOv8模型; 数据增强处理; 缺陷类别平衡; 大面积热斑; 单一热斑; 二极管短路; 异常低温。,基于YOLOv8的红外光伏缺陷检测模型
基于PLC的自动浇花控制系统 西门子1200PLC博途仿真,提供HMI画面,接线图,IO分配表,演示视频,简单讲解视频 博图15.1及以上版本均可使用 ,核心关键词: PLC自动浇花控制系统; 西门子1200PLC博途仿真; HMI画面; 接线图; IO分配表; 演示视频; 简单讲解视频; 博图15.1及以上版本。,基于PLC的自动浇花系统:西门子1200PLC博途仿真实践教程
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
大型集团用户画像系统化标准化数字化用户主数据管理项目规划方案
基于STM32的水质 浊度检测仪设计与实现(详细设计说明书+ 10008-基于STM32的水质 浊度检测仪设计与实现(详细设计说明书+原理图PCB工程+源码工程+实物照片) 本次设计是设计一款水质检测设备,实现温度检查、水质检测的功能,将检测到的数据显示到显示器中,并实时记录系统的参数 本次系统需要对温度检测,使用的传感器为DS18B20,通过单总线的方式来完成系统温度检测 使用水质检测模块检查水的质量 通过传感器检测到的数据计算后的值实时刷新到显示器中,主要的功能包括以下几点: ①可以对温度实时检测; ②可以对水质实际值实时检测; ③水质浑浊预警 主要特点: 1.以STM32单片机为核心,配合水质模块; 2.主要完成系统的 功能控制、状态显示、信息检测以及报警硬件组建所单片机和传感器等元器件的选择; 3.完成系统控制的软件设计编程; 4.实现对水质检测、温度检查、预警的功能 内容包含: 1、原理图工程 2、PCB工程 3、源码工程 4、实物照片 5、详细介绍说明书-22531字 6、实物照片 7、浊度传感器资料
人脸识别项目实战
华中科技大学计算机科学研究生复试上机测试题.zip
YOLOv8部署到web上(Django+html)