来源:http://www.itokit.com/2012/0427/73656.html

  1. <?php
  2. /*** Mongodb类** examples:
  3. * $mongo = new HMongodb("127.0.0.1:11223");
  4. * $mongo->selectDb("test_db");
  5. * 创建索引
  6. * $mongo->ensureIndex("test_table", array("id"=>1), array('unique'=>true));
  7. * 获取表的记录
  8. * $mongo->count("test_table");
  9. * 插入记录
  10. * $mongo->insert("test_table", array("id"=>2, "title"=>"asdqw"));
  11. * 更新记录
  12. * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"));
  13. * 更新记录-存在时更新,不存在时添加-相当于set
  14. * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"),array("upsert"=>1));
  15. * 查找记录
  16. * $mongo->find("c", array("title"=>"asdqw"), array("start"=>2,"limit"=>2,"sort"=>array("id"=>1)))
  17. * 查找一条记录
  18. * $mongo->findOne("$mongo->findOne("ttt", array("id"=>1))", array("id"=>1));
  19. * 删除记录
  20. * $mongo->remove("ttt", array("title"=>"bbb"));
  21. * 仅删除一条记录
  22. * $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1));
  23. * 获取Mongo操作的错误信息
  24. * $mongo->getError();
  25. */
  26. class HMongodb {
  27. //Mongodb连接
  28. var $mongo;
  29. var $curr_db_name;
  30. var $curr_table_name;
  31. var $error;
  32. /**
  33. * 构造函数
  34. * 支持传入多个mongo_server(1.一个出问题时连接其它的server 2.自动将查询均匀分发到不同server)
  35. *
  36. * 参数:
  37. * $mongo_server:数组或字符串-array("127.0.0.1:1111", "127.0.0.1:2222")-"127.0.0.1:1111"
  38. * $connect:初始化mongo对象时是否连接,默认连接
  39. * $auto_balance:是否自动做负载均衡,默认是
  40. *
  41. * 返回值:
  42. * 成功:mongo object
  43. * 失败:false
  44. */
  45. function __construct($mongo_server, $connect=true, $auto_balance=true)
  46. {
  47. if (is_array($mongo_server))
  48. {
  49. $mongo_server_num = count($mongo_server);
  50. if ($mongo_server_num > 1 && $auto_balance)
  51. {
  52. $prior_server_num = rand(1, $mongo_server_num);
  53. $rand_keys = array_rand($mongo_server,$mongo_server_num);
  54. $mongo_server_str = $mongo_server[$prior_server_num-1];
  55. foreach ($rand_keys as $key)
  56. {
  57. if ($key != $prior_server_num - 1)
  58. {
  59. $mongo_server_str .= ',' . $mongo_server[$key];
  60. }
  61. }
  62. }
  63. else
  64. {
  65. $mongo_server_str = implode(',', $mongo_server);
  66. }                  }
  67. else
  68. {
  69. $mongo_server_str = $mongo_server;
  70. }
  71. try {
  72. $this->mongo = new Mongo($mongo_server, array('connect'=>$connect));
  73. }
  74. catch (MongoConnectionException $e)
  75. {
  76. $this->error = $e->getMessage();
  77. return false;
  78. }
  79. }
  80. function getInstance($mongo_server, $flag=array())
  81. {
  82. static $mongodb_arr;
  83. if (emptyempty($flag['tag']))
  84. {
  85. $flag['tag'] = 'default';          }
  86. if (isset($flag['force']) && $flag['force'] == true)
  87. {
  88. $mongo = new HMongodb($mongo_server);
  89. if (emptyempty($mongodb_arr[$flag['tag']]))
  90. {
  91. $mongodb_arr[$flag['tag']] = $mongo;
  92. }
  93. return $mongo;
  94. }
  95. else if (isset($mongodb_arr[$flag['tag']]) && is_resource($mongodb_arr[$flag['tag']]))
  96. {
  97. return $mongodb_arr[$flag['tag']];
  98. }
  99. else
  100. {
  101. $mongo = new HMongodb($mongo_server);
  102. $mongodb_arr[$flag['tag']] = $mongo;
  103. return $mongo;                  }          }
  104. /**
  105. * 连接mongodb server
  106. *
  107. * 参数:无
  108. *
  109. * 返回值:
  110. * 成功:true
  111. * 失败:false
  112. */
  113. function connect()
  114. {
  115. try {
  116. $this->mongo->connect();
  117. return true;
  118. }
  119. catch (MongoConnectionException $e)
  120. {
  121. $this->error = $e->getMessage();
  122. return false;
  123. }
  124. }
  125. /**
  126. * select db
  127. *
  128. * 参数:$dbname
  129. *
  130. * 返回值:无
  131. */
  132. function selectDb($dbname)
  133. {
  134. $this->curr_db_name = $dbname;
  135. }
  136. /**
  137. * 创建索引:如索引已存在,则返回。
  138. *
  139. * 参数:
  140. * $table_name:表名
  141. * $index:索引-array("id"=>1)-在id字段建立升序索引
  142. * $index_param:其它条件-是否唯一索引等
  143. *
  144. * 返回值:
  145. * 成功:true
  146. * 失败:false
  147. */
  148. function ensureIndex($table_name, $index, $index_param=array())
  149. {
  150. $dbname = $this->curr_db_name;
  151. $index_param['safe'] = 1;
  152. try {
  153. $this->mongo->$dbname->$table_name->ensureIndex($index, $index_param);
  154. return true;
  155. }
  156. catch (MongoCursorException $e)
  157. {
  158. $this->error = $e->getMessage();
  159. return false;
  160. }
  161. }
  162. /**
  163. * 插入记录
  164. *
  165. * 参数:
  166. * $table_name:表名
  167. * $record:记录
  168. *
  169. * 返回值:
  170. * 成功:true
  171. * 失败:false
  172. */
  173. function insert($table_name, $record)
  174. {
  175. $dbname = $this->curr_db_name;
  176. try {
  177. $this->mongo->$dbname->$table_name->insert($record, array('safe'=>true));
  178. return true;
  179. }
  180. catch (MongoCursorException $e)
  181. {
  182. $this->error = $e->getMessage();
  183. return false;
  184. }
  185. }
  186. /**
  187. * 查询表的记录数
  188. *
  189. * 参数:
  190. * $table_name:表名
  191. *
  192. * 返回值:表的记录数
  193. */
  194. function count($table_name)
  195. {
  196. $dbname = $this->curr_db_name;
  197. return $this->mongo->$dbname->$table_name->count();
  198. }
  199. /**
  200. * 更新记录
  201. *
  202. * 参数:
  203. * $table_name:表名
  204. * $condition:更新条件
  205. * $newdata:新的数据记录
  206. * $options:更新选择-upsert/multiple
  207. *
  208. * 返回值:
  209. * 成功:true
  210. * 失败:false
  211. */
  212. function update($table_name, $condition, $newdata, $options=array())
  213. {
  214. $dbname = $this->curr_db_name;
  215. $options['safe'] = 1;
  216. if (!isset($options['multiple']))
  217. {
  218. $options['multiple'] = 0;          }
  219. try {
  220. $this->mongo->$dbname->$table_name->update($condition, $newdata, $options);
  221. return true;
  222. }
  223. catch (MongoCursorException $e)
  224. {
  225. $this->error = $e->getMessage();
  226. return false;
  227. }          }
  228. /**
  229. * 删除记录
  230. *
  231. * 参数:
  232. * $table_name:表名
  233. * $condition:删除条件
  234. * $options:删除选择-justOne
  235. *
  236. * 返回值:
  237. * 成功:true
  238. * 失败:false
  239. */
  240. function remove($table_name, $condition, $options=array())
  241. {
  242. $dbname = $this->curr_db_name;
  243. $options['safe'] = 1;
  244. try {
  245. $this->mongo->$dbname->$table_name->remove($condition, $options);
  246. return true;
  247. }
  248. catch (MongoCursorException $e)
  249. {
  250. $this->error = $e->getMessage();
  251. return false;
  252. }          }
  253. /**
  254. * 查找记录
  255. *
  256. * 参数:
  257. * $table_name:表名
  258. * $query_condition:字段查找条件
  259. * $result_condition:查询结果限制条件-limit/sort等
  260. * $fields:获取字段
  261. *
  262. * 返回值:
  263. * 成功:记录集
  264. * 失败:false
  265. */
  266. function find($table_name, $query_condition, $result_condition=array(), $fields=array())
  267. {
  268. $dbname = $this->curr_db_name;
  269. $cursor = $this->mongo->$dbname->$table_name->find($query_condition, $fields);
  270. if (!emptyempty($result_condition['start']))
  271. {
  272. $cursor->skip($result_condition['start']);
  273. }
  274. if (!emptyempty($result_condition['limit']))
  275. {
  276. $cursor->limit($result_condition['limit']);
  277. }
  278. if (!emptyempty($result_condition['sort']))
  279. {
  280. $cursor->sort($result_condition['sort']);
  281. }
  282. $result = array();
  283. try {
  284. while ($cursor->hasNext())
  285. {
  286. $result[] = $cursor->getNext();
  287. }
  288. }
  289. catch (MongoConnectionException $e)
  290. {
  291. $this->error = $e->getMessage();
  292. return false;
  293. }
  294. catch (MongoCursorTimeoutException $e)
  295. {
  296. $this->error = $e->getMessage();
  297. return false;
  298. }
  299. return $result;
  300. }
  301. /**
  302. * 查找一条记录
  303. *
  304. * 参数:
  305. * $table_name:表名
  306. * $condition:查找条件
  307. * $fields:获取字段
  308. *
  309. * 返回值:
  310. * 成功:一条记录
  311. * 失败:false
  312. */
  313. function findOne($table_name, $condition, $fields=array())
  314. {
  315. $dbname = $this->curr_db_name;
  316. return $this->mongo->$dbname->$table_name->findOne($condition, $fields);
  317. }
  318. /**
  319. * 获取当前错误信息
  320. *
  321. * 参数:无
  322. *
  323. * 返回值:当前错误信息
  324. */
  325. function getError()
  326. {
  327. return $this->error;
  328. }
  329. }
  330. ?>

转载于:https://www.cnblogs.com/hasayaki/archive/2013/06/07/3124136.html

PHP操作Mongodb API 及使用类 封装好的MongoDB操作类相关推荐

  1. java类成员和实例成员,面向对象Java实验:实验二 类封装,实例成员与类成员,包...

    面向对象Java实验:实验二 类封装,实例成员与类成员,包 程序1: class Trangle { double sideA,sideB,sideC,area,length; boolean boo ...

  2. azure api 管理_Azure Cosmos DB和MongoDB API入门

    azure api 管理 In the previous article on Azure Cosmos DB, we reviewed NoSQL concepts and how to integ ...

  3. AD——如何进行IC类封装创建?

    *写在前面: 本文使用AD2018,同时本文案例中的说明书可直接下载. 点击下载(百度网盘,提取码xwla) 首先介绍一下IC类封装的概念. IC类封装: IC封装,就是指把硅片上的电路管脚,用导线接 ...

  4. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  5. thinkphp mysql类_PHP封装类似thinkphp连贯操作数据库的Db类(简单版)

    为了方便操作Mysql数据库, 封装类似thinkphp连贯操作数据库的Db类<?php header("Content-Type:text/html;charset=utf-8&qu ...

  6. php操作mysql的封装类_PHP封装的mysqli数据库操作类示例

    本文实例讲述了PHP封装的mysqli数据库操作类.分享给大家供大家参考,具体如下: 由于PHPMySQL操作在PHP5.4以下被弃用而推荐使用mysqli(MySQL Improvement),这里 ...

  7. php db类 应用实例,PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例

    本文实例讲述了PHP封装类似thinkphp连贯操作数据库Db类与简单应用.分享给大家供大家参考,具体如下: header("Content-Type:text/html;charset=u ...

  8. QT 操作excel 类封装(转载)

    QT 操作excel 类封装(转载) 原链接:http://blog.csdn.net/liliming1234/article/details/7054941 pro file [plain]  v ...

  9. Spring Boot神操作-多个数据源Service层封装

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:@pdai pdai.tech/md/spring/spri ...

最新文章

  1. C和C++安全编码笔记:整数安全
  2. pandas使用read_csv读取文件数据、设置converters参数将百分比字符串转换为数字
  3. Java核心技术笔记 语言基础
  4. iOS中 动态启动图GIF的简单设置 韩俊强的博客
  5. 生命html文档,Web前端第一季(HTML)
  6. 手机吃鸡登显示服务器繁忙,国际版吃鸡登录一直显示服务器繁忙 | 手游网游页游攻略大全...
  7. linux 安装_Linux安装JDK
  8. NVIDIA历史驱动下载
  9. 2022年大厂中秋礼盒大赏,卷的就是创意!
  10. “我培训完JAVA,进了美团,美团氛围特别好,就是送餐特别累”
  11. 1.python程序图标制作
  12. PMU 精密测量单元
  13. 对大学三年学习生活的总结与反思
  14. Sources for ‘Android API 32 Platform’ not found
  15. 【记录贴】联想笔记本小新进入BIOS的方法
  16. 如何写一封稍微像样的求职邮件
  17. 招商银行信用卡使用说明
  18. 学人工智能电脑主机八大件配置选择指南
  19. 05 高等数学专题——无穷级数
  20. java简单通讯录实现

热门文章

  1. Flutter中使用友盟统计
  2. VC++判断文件或文件夹是否存在(转)
  3. Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set
  4. sweetalert 1.0多次回调函数bug
  5. C语言实现二叉树-04版
  6. iOS中创建,使用动态库(dylib)
  7. 如何在程序中打开PDF文件 -C#文章(.net)
  8. Elementui 自定义loading
  9. IE overflow:hidden失效的解决方法:
  10. JS-数组-声明方式-读写添加删除-遍历