首页 > 开发 > PHP > 正文

php实现的mongodb操作类实例

2024-05-04 23:33:53
字体:
来源:转载
供稿:网友

这篇文章主要介绍了php实现的mongodb操作类,较为详细的分析了php针对mongodb数据库操作的各种常用技巧,并将其封装进一个完整的类文件中以便于调用,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了php实现的mongodb操作类。分享给大家供大家参考。具体如下:

  1. <?php  
  2. /* 
  3. * To change this template, choose Tools | Templates 
  4. * and open the template in the editor. 
  5. */ 
  6. class mongo_db {  
  7. private $config;  
  8. private $connection;  
  9. private $db;  
  10. private $connection_string;  
  11. private $host;  
  12. private $port;  
  13. private $user;  
  14. private $pass;  
  15. private $dbname;  
  16. private $persist;  
  17. private $persist_key;  
  18. private $selects = array();  
  19. private $wheres = array();  
  20. private $sorts = array();  
  21. private $limit = 999999;  
  22. private $offset = 0;  
  23. private $timeout = 200;  
  24. private $key = 0;  
  25. /** 
  26. * 
  27. * CONSTRUCTOR * 
  28. * 
  29. * Automatically check if the Mongo PECL extension has been 
  30. installed/enabled. 
  31. * Generate the connection string and establish a connection 
  32. to the MongoDB. 
  33. */ 
  34. public function __construct() {  
  35. if((IS_NOSQL != 1)){  
  36. return;  
  37. }  
  38. if (!class_exists('Mongo')) {  
  39. //$this->error("The MongoDB PECL extension has not been installed or enabled", 500);  
  40. }  
  41. $configs =wxcity_base::load_config("cache","mongo_db");  
  42. $num = count($configs['connect']);  
  43. $this->timeout = trim($configs['timeout']);  
  44. $keys = wxcity_base::load_config('double');  
  45. $this->key = $keys['mongo_db'];  
  46. $this->config = $configs['connect'][$this->key];  
  47. $status = $this->connect();  
  48. if($status == false)  
  49. {  
  50. for($i = 1; $i < $num$i++)  
  51. {  
  52. $n = $this->key + $i;  
  53. $key = $n >= $num ? $n - $num : $n;  
  54. $this->config = $configs['connect'][$key];  
  55. $status = $this->connect();  
  56. if($status!=false)  
  57. {  
  58. $keys['mongo_db'] = $key ;  
  59. $this->key = $key;  
  60. $data = "<?php/nreturn ".var_export($keys, true).";/n?>";  
  61. file_put_contents(WHTY_PATH.'configs/double.php'$data, LOCK_EX);  
  62. break;  
  63. }  
  64. }  
  65. }  
  66. if($status==false)  
  67. {  
  68. die('mongoDB not connect');  
  69. }  
  70. }  
  71. function __destruct() {  
  72. if((IS_NOSQL != 1)){  
  73. return;  
  74. }  
  75. if($this->connection)  
  76. {  
  77. $this->connection->close();  
  78. }  
  79. }  
  80. /** 
  81. * 
  82. * CONNECT TO MONGODB * 
  83. * 
  84. * Establish a connection to MongoDB using 
  85. the connection string generated in 
  86. * the connection_string() method. 
  87. If 'mongo_persist_key' was set to true in the  
  88. * config file, establish a persistent connection. 
  89. We allow for only the 'persist' 
  90. * option to be set because we want to  
  91. establish a connection immediately. 
  92. */ 
  93. private function connect() {  
  94. $this->connection_string();  
  95. $options = array('connect'=>true,'timeout'=>$this->timeout);  
  96. try {  
  97. $this->connection = new Mongo($this->connection_string, $options);  
  98. $this->db = $this->connection->{$this->dbname};  
  99. return($this);  
  100. } catch (MongoConnectionException $e) {  
  101. return false;  
  102. }  
  103. }  
  104. /** 
  105. * 
  106. * BUILD CONNECTION STRING * 
  107. * 
  108. * Build the connection string from the config file. 
  109. */ 
  110. private function connection_string() {  
  111. $this->host = trim($this->config['hostname']);  
  112. $this->port = trim($this->config['port']);  
  113. $this->user = trim($this->config['username']);  
  114. $this->pass = trim($this->config['password']);  
  115. $this->dbname = trim($this->config['database']);  
  116. $this->persist = trim($this->config['autoconnect']);  
  117. $this->persist_key = trim($this->config['mongo_persist_key']);  
  118. $connection_string = "mongodb://";  
  119. if (emptyempty($this->host)) {  
  120. $this->error("The Host must be set to connect to MongoDB", 500);  
  121. if (emptyempty($this->dbname)) {  
  122. $this->error("The Database must be set to connect to MongoDB", 500);  
  123. if (!emptyempty($this->user) && !emptyempty($this->pass)) {  
  124. $connection_string .= "{$this->user}:{$this->pass}@";  
  125. if (isset($this->port) && !emptyempty($this->port)) {  
  126. $connection_string .= "{$this->host}:{$this->port}";  
  127. else {  
  128. $connection_string .= "{$this->host}";  
  129. $this->connection_string = trim($connection_string);  
  130. }  
  131. /** 
  132. * 
  133. * Switch_db * 
  134. * 
  135. * Switch from default database to a different db 
  136. */ 
  137. public function switch_db($database = '') {  
  138. if (emptyempty($database)) {  
  139. $this->error("To switch MongoDB databases, a new database name must be specified", 500);  
  140. $this->dbname = $database;  
  141. try {  
  142. $this->db = $this->connection->{$this->dbname};  
  143. return(TRUE);  
  144. } catch (Exception $e) {  
  145. $this->error("Unable to switch Mongo Databases: {$e->getMessage()}", 500);  
  146. }  
  147. }  
  148. /** 
  149. * 
  150. * SELECT FIELDS * 
  151. * 
  152. * Determine which fields to include OR which to 
  153. exclude during the query process. 
  154. * Currently, including and excluding at  
  155. the same time is not available, so the 
  156. * $includes array will take precedence over 
  157. the $excludes array. 
  158. If you want to 
  159. * only choose fields to exclude, 
  160. leave $includes an empty array(). 
  161. * 
  162. * @usage: $this->mongo_db->select(array('foo', 'bar'))->get('foobar'); 
  163. */ 
  164. public function select($includes = array(), $excludes = array()) {  
  165. if (!is_array($includes)) {  
  166. $includes = array();  
  167. }  
  168. if (!is_array($excludes)) {  
  169. $excludes = array();  
  170. }  
  171. if (!emptyempty($includes)) {  
  172. foreach ($includes as $col) {  
  173. $this->selects[$col] = 1;  
  174. }  
  175. else {  
  176. foreach ($excludes as $col) {  
  177. $this->selects[$col] = 0;  
  178. }  
  179. return($this);  
  180. }  
  181. /** 
  182. * 
  183. * WHERE PARAMETERS * 
  184. * 
  185. * Get the documents based on these 
  186. search parameters. The $wheres array should 
  187. * be an associative array with the field  
  188. as the key and the value as the search 
  189. * criteria. * 
  190. * @usage = $this->mongo_db->where(array('foo' => 'bar'))->get('foobar'); 
  191. */ 
  192. public function where($wheres = array()) {  
  193. foreach ((array)$wheres as $wh => $val) {  
  194. $this->wheres[$wh] = $val;  
  195. return($this);  
  196. }  
  197. /** 
  198. * 
  199. * WHERE_IN PARAMETERS * 
  200. * 
  201. * Get the documents where the value  
  202. of a $field is in a given $in array(). 
  203. * 
  204. * @usage = $this->mongo_db->where_in('foo', array('bar', 'zoo', 'blah'))->get('foobar'); 
  205. */ 
  206. public function where_in($field = ""$in = array()) {  
  207. $this->where_init($field);  
  208. $this->wheres[$field]['$in'] = $in;  
  209. return($this);  
  210. }  
  211. /** 
  212. * 
  213. * WHERE_NOT_IN PARAMETERS * 
  214. * 
  215. * Get the documents where the value of  
  216. a $field is not in a given $in array(). 
  217. * 
  218. * @usage = $this->mongo_db->where_not_in('foo', array('bar', 'zoo', 'blah'))->get('foobar'); 
  219. */ 
  220. public function where_not_in($field = ""$in = array()) {  
  221. $this->where_init($field);  
  222. $this->wheres[$field]['$nin'] = $in;  
  223. return($this);  
  224. }  
  225. /** 
  226. * 
  227. * WHERE GREATER THAN PARAMETERS * 
  228. * 
  229. * Get the documents where the value of  
  230. a $field is greater than $x 
  231.  
  232. * @usage = $this->mongo_db->where_gt('foo', 20); 
  233. */ 
  234. public function where_gt($field = ""$x) {  
  235. $this->where_init($field);  
  236. $this->wheres[$field]['$gt'] = $x;  
  237. return($this);  
  238. }  
  239. /** 
  240. * 
  241. * WHERE GREATER THAN OR EQUAL TO PARAMETERS * 
  242. * 
  243. * Get the documents where the value of a $field is greater than or equal to $x 
  244. * 
  245. * @usage = $this->mongo_db->where_gte('foo', 20); 
  246. */ 
  247. public function where_gte($field = ""$x) {  
  248. $this->where_init($field);  
  249. $this->wheres[$field]['$gte'] = $x;  
  250. return($this);  
  251. }  
  252. /** 
  253. * 
  254. * WHERE LESS THAN PARAMETERS * 
  255. * 
  256. * Get the documents where the value of 
  257. a $field is less than $x 
  258. * 
  259. * @usage = $this->mongo_db->where_lt('foo', 20); 
  260. */ 
  261. public function where_lt($field = ""$x) {  
  262. $this->where_init($field);  
  263. $this->wheres[$field]['$lt'] = $x;  
  264. return($this);  
  265. }  
  266. /** 
  267. * 
  268. * WHERE LESS THAN OR EQUAL TO PARAMETERS * 
  269. * 
  270. * Get the documents where the value of  
  271. a $field is less than or equal to $x 
  272. * 
  273. * @usage = $this->mongo_db->where_lte('foo', 20); 
  274. */ 
  275. public function where_lte($field = ""$x) {  
  276. $this->where_init($field);  
  277. $this->wheres[$field]['$lte'] = $x;  
  278. return($this);  
  279. }  
  280. /** 
  281. * 
  282. * WHERE BETWEEN PARAMETERS * 
  283. * 
  284. * Get the documents where the value of 
  285. a $field is between $x and $y 
  286. * 
  287. * @usage = $this->mongo_db->where_between('foo', 20, 30); 
  288. */ 
  289. public function where_between($field = ""$x$y) {  
  290. $this->where_init($field);  
  291. $this->wheres[$field]['$gte'] = $x;  
  292. $this->wheres[$field]['$lte'] = $y;  
  293. return($this);  
  294. }  
  295. /** 
  296. * 
  297. * WHERE BETWEEN AND NOT EQUAL TO PARAMETERS * 
  298. * 
  299. * Get the documents where the value of  
  300. a $field is between but not equal to $x and $y 
  301. * 
  302. * @usage = $this->mongo_db->where_between_ne('foo', 20, 30); 
  303. */ 
  304. public function where_between_ne($field = ""$x$y) {  
  305. $this->where_init($field);  
  306. $this->wheres[$field]['$gt'] = $x;  
  307. $this->wheres[$field]['$lt'] = $y;  
  308. return($this);  
  309. }  
  310. /** 
  311. * 
  312. * WHERE NOT EQUAL TO PARAMETERS * 
  313. * 
  314. * Get the documents where the value of  
  315. a $field is not equal to $x 
  316. * 
  317. * @usage = $this->mongo_db->where_between('foo', 20, 30); 
  318. */ 
  319. public function where_ne($field = ""$x) {  
  320. $this->where_init($field);  
  321. $this->wheres[$field]['$ne'] = $x;  
  322. return($this);  
  323. }  
  324. /** 
  325. * 
  326. * WHERE OR * 
  327. * 
  328. * Get the documents where the value of  
  329. a $field is in one or more values  
  330. * 
  331. * @usage = $this->mongo_db->where_or('foo', array( 'foo', 'bar', 'blegh' ); 
  332. */ 
  333. public function where_or($field = ""$values) {  
  334. $this->where_init($field);  
  335. $this->wheres[$field]['$or'] = $values;  
  336. return($this);  
  337. }  
  338. /** 
  339. * 
  340. * WHERE AND * 
  341. * 
  342. * Get the documents where the elements match  
  343. the specified values * 
  344. * @usage = $this->mongo_db->where_and( array ( 'foo' => 1, 'b' => 'someexample' ); 
  345. */ 
  346. public function where_and($elements_values = array()) {  
  347. foreach ((array)$elements_values as $element => $val) {  
  348. $this->wheres[$element] = $val;  
  349. return($this);  
  350. }  
  351. /** 
  352. * 
  353. * WHERE MOD * 
  354. * 
  355. * Get the documents where $field % $mod = $result * 
  356. * @usage = $this->mongo_db->where_mod( 'foo', 10, 1 ); 
  357. */ 
  358. public function where_mod($field$num$result) {  
  359. $this->where_init($field);  
  360. $this->wheres[$field]['$mod'] = array($num$result);  
  361. return($this);  
  362. }  
  363. /** * * 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'); */ 
  364. public function where_size($field = ""$size = "") {  
  365. $this->_where_init($field);  
  366. $this->wheres[$field]['$size'] = $size;  
  367. return ($this);  
  368. }  
  369. /** 
  370. * 
  371. * LIKE PARAMETERS * 
  372. * 
  373. * Get the documents where the (string) value of  
  374. a $field is like a value. The defaults 
  375. * allow for a case-insensitive search. * 
  376. * @param $flags  
  377. * Allows for the typical regular expression flags: 
  378. * i = case insensitive 
  379. * m = multiline 
  380. * x = can contain comments 
  381. * l = locale  
  382. * s = dotall, "." matches everything, including newlines 
  383. * u = match unicode 
  384. * 
  385. * @param $enable_start_wildcard 
  386. * If set to anything other than TRUE, a starting line character "^" will be prepended 
  387. * to the search value, representing only searching for a value at the start of 
  388. * a new line. 
  389. * * @param $enable_end_wildcard  
  390. * If set to anything other than TRUE, an ending line character "$" will be appended 
  391. * to the search value, representing only searching for a value at the end of 
  392. * a line. 
  393.  
  394. * @usage = $this->mongo_db->like('foo', 'bar', 'im', FALSE, TRUE); 
  395. */ 
  396. public function like($field = ""$value = ""$flags = "i"$enable_start_wildcard = TRUE, $enable_end_wildcard = TRUE) {  
  397. $field = (string) trim($field);  
  398. $this->where_init($field);  
  399. $value = (string) trim($value);  
  400. $value = quotemeta($value);  
  401. if ($enable_start_wildcard !== TRUE) {  
  402. $value = "^" . $value;  
  403. if ($enable_end_wildcard !== TRUE) {  
  404. $value .= "$";  
  405. $regex = "/$value/$flags";  
  406. $this->wheres[$field] = new MongoRegex($regex);  
  407. return($this);  
  408. }  
  409. public function wheres($where){  
  410. $this->wheres = $where;  
  411. }  
  412. /** 
  413. * 
  414. * ORDER BY PARAMETERS * 
  415. * 
  416. * Sort the documents based on the parameters passed. 
  417. To set values to descending order, 
  418. * you must pass values of either -1, FALSE, 
  419. 'desc', or 'DESC', else they will be 
  420. * set to 1 (ASC). 
  421. * 
  422. * @usage = $this->mongo_db->where_between('foo', 20, 30); 
  423. */ 
  424. public function order_by($fields = array()) {  
  425. if (!is_array($fields) || !count($fields)) return ;  
  426. foreach ($fields as $col => $val) {  
  427. if ($val == -1 || $val === FALSE || strtolower($val) == 'desc') {  
  428. $this->sorts[$col] = -1;  
  429. else {  
  430. $this->sorts[$col] = 1;  
  431. }  
  432. return($this);  
  433. }  
  434. /** 
  435. * 
  436. * LIMIT DOCUMENTS * 
  437. * 
  438. * Limit the result set to $x number of documents * 
  439. * @usage = $this->mongo_db->limit($x); 
  440. */ 
  441. public function limit($x = 99999) {  
  442. if ($x !== NULL && is_numeric($x) && $x >= 1) {  
  443. $this->limit = (int) $x;  
  444. return($this);  
  445. }  
  446. /** 
  447. * 
  448. * OFFSET DOCUMENTS * 
  449. * 
  450. * Offset the result set to skip $x number of documents 
  451. * 
  452. * @usage = $this->mongo_db->offset($x); 
  453. */ 
  454. public function offset($x = 0) {  
  455. if ($x !== NULL && is_numeric($x) && $x >= 1) {  
  456. $this->offset = (int) $x;  
  457. return($this);  
  458. }  
  459. /** 
  460. * 
  461. * GET_WHERE * 
  462.  
  463. * Get the documents based upon the passed parameters * 
  464. * @usage = $this->mongo_db->get_where('foo', array('bar' => 'something')); 
  465. */ 
  466. public function get_where($collection = ""$where = array(), $limit = 99999, $orderby=array()) {  
  467. if (is_array($orderby) || !emptyempty($orderby)) {  
  468. $order_by = $this->order_by($order_by);  
  469. }  
  470. return($this->where($where)->limit($limit)->get($collection));  
  471. }  
  472. public function selectA($collection = ""$limit = 99999, $orderby=array()) {  
  473. if(intval($limit)<1){  
  474. $limit = 999999;  
  475. }  
  476. $order_by = $this->order_by($orderby);  
  477. $re = $this->limit($limit)->get($collection);  
  478. $this->clear();  
  479. return (array)$re;  
  480. }  
  481. public function listinfo($collection = ""$orderby=array(), $page=1, $pagesize=12) {  
  482. $page = max(intval($page), 1);  
  483. $offset = $pagesize * ($page - 1);  
  484. $pagesizes = $offset + $pagesize;  
  485. $this->offset($offset);  
  486. $order_by = $this->order_by($orderby);  
  487. $re = $this->limit($pagesize)->get($collection);  
  488. $this->limit(999999);  
  489. $count = $this->count($collection);  
  490. $this->pages = pages($count$page$pagesize);  
  491. return (array)$re;  
  492. }  
  493. /** 
  494. * 
  495. * GET * 
  496. * 
  497. * Get the documents based upon the passed parameters * 
  498. * @usage = $this->mongo_db->get('foo', array('bar' => 'something')); 
  499. */ 
  500. public function get($collection = "") {  
  501. if (emptyempty($collection)) {  
  502. $this->error("In order to retreive documents from MongoDB, a collection name must be passed", 500);  
  503. $results = array();  
  504. $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit)->skip((int) $this->offset)->sort($this->sorts);  
  505. $returns = array();  
  506. foreach ($documents as $doc): $returns[] = $doc;  
  507. endforeach;  
  508. return($returns);  
  509. }  
  510. public function getMy($collection = "") {  
  511. if (emptyempty($collection)) {  
  512. $this->error("In order to retreive documents from MongoDB, a collection name must be passed", 500);  
  513. $results = array();  
  514. $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit)->skip((int) $this->offset)->sort($this->sorts);  
  515. $returns = array();  
  516. foreach ($documents as $doc): $returns[] = $doc;  
  517. endforeach;  
  518. $this -> clear();  
  519. return($returns);  
  520. }  
  521. /** 
  522. * 
  523. * COUNT * 
  524. * 
  525. * Count the documents based upon the passed parameters * 
  526. * @usage = $this->mongo_db->get('foo'); 
  527. */ 
  528. public function count($collection = "") {  
  529. if (emptyempty($collection)) {  
  530. $this->error("In order to retreive a count of documents from MongoDB, a collection name must be passed", 500);  
  531. $count = $this->db->{$collection}->find($this->wheres)->limit((int) $this->limit)->skip((int) $this->offset)->count();  
  532. $this->clear();  
  533. return($count);  
  534. }  
  535. /** 
  536. * 
  537. * INSERT * 
  538. * 
  539. * Insert a new document into the passed collection * 
  540. * @usage = $this->mongo_db->insert('foo', $data = array()); 
  541. */ 
  542. public function insert($collection = ""$data = array(), $name='ID') {  
  543. if (emptyempty($collection)) {  
  544. $this->error("No Mongo collection selected to insert into", 500);  
  545. if (count($data) == 0 || !is_array($data)) {  
  546. $this->error("Nothing to insert into Mongo collection or insert is not an array", 500);  
  547. } try {  
  548. /** 
  549. wxcity_base::load_sys_class('whtysqs','',0);  
  550. $mongoseq_class = new whtysqs('creaseidsqs'); 
  551. $re = $mongoseq_class->query("?name=" . $collection . "&opt=put&data=1"); 
  552. **/ 
  553. $re = put_sqs('list_mongo_creaseidsqs','1');  
  554. if(is_numeric($re)){  
  555. $re++;  
  556. $data[$name] = intval($re);  
  557. }else{  
  558. $data[$name] = intval(time());  
  559. //die('mongosqs error');  
  560. }  
  561. $this->db->{$collection}->insert($dataarray('fsync' => TRUE));  
  562. $this->clear();  
  563. return $data[$name];  
  564. } catch (MongoCursorException $e) {  
  565. $this->error("Insert of data into MongoDB failed: {$e->getMessage()}", 500);  
  566. }  
  567. }  
  568. public function insertWithId($collection = ""$data = array()) {  
  569. if (emptyempty($collection)) {  
  570. $this->error("No Mongo collection selected to insert into", 500);  
  571. if (count($data) == 0 || !is_array($data)) {  
  572. $this->error("Nothing to insert into Mongo collection or insert is not an array", 500);  
  573. } try {  
  574. $this->db->{$collection}->insert($dataarray('fsync' => TRUE));  
  575. $this->clear();  
  576. return 1;  
  577. } catch (MongoCursorException $e) {  
  578. $this->error("Insert of data into MongoDB failed: {$e->getMessage()}", 500);  
  579. }  
  580. }  
  581. /** 
  582. * 
  583. * UPDATE * 
  584. * 
  585. * Update a document into the passed collection * 
  586. * @usage = $this->mongo_db->update('foo', $data = array()); 
  587. */ 
  588. public function update($collection = ""$data = array()) {  
  589. if (emptyempty($collection)) {  
  590. $this->error("No Mongo collection selected to update", 500);  
  591. if (count($data) == 0 || !is_array($data)) {  
  592. $this->error("Nothing to update in Mongo collection or update is not an array", 500);  
  593. } try {  
  594. $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => TRUE, 'multiple' => FALSE));  
  595. $this->clear();  
  596. return(TRUE);  
  597. } catch (MongoCursorException $e) {  
  598. $this->error("Update of data into MongoDB failed: {$e->getMessage()}", 500);  
  599. }  
  600. }  
  601. /** 
  602. * 
  603. * UPDATE_ALL * 
  604. * 
  605. * Insert a new document into the passed collection * 
  606. * @usage = $this->mongo_db->update_all('foo', $data = array()); 
  607. */ 
  608. public function update_all($collection = ""$data = array()) {  
  609. if (emptyempty($collection)) {  
  610. $this->error("No Mongo collection selected to update", 500);  
  611. if (count($data) == 0 || !is_array($data)) {  
  612. $this->error("Nothing to update in Mongo collection or update is not an array", 500);  
  613. } try {  
  614. $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' => TRUE, 'multiple' => TRUE));  
  615. return(TRUE);  
  616. } catch (MongoCursorException $e) {  
  617. $this->error("Update of data into MongoDB failed: {$e->getMessage()}", 500);  
  618. }  
  619. }  
  620. /** 
  621. * 
  622. * DELETE * 
  623. * 
  624. * delete document from the passed collection based upon certain criteria * 
  625. * @usage = $this->mongo_db->delete('foo', $data = array()); 
  626. */ 
  627. public function delete($collection = "") {  
  628. if (emptyempty($collection)) {  
  629. $this->error("No Mongo collection selected to delete from", 500);  
  630. } try {  
  631. $this->db->{$collection}->remove($this->wheres, array('fsync' => TRUE, 'justOne' => TRUE));  
  632. $this->clear();  
  633. return(TRUE);  
  634. } catch (MongoCursorException $e) {  
  635. $this->error("Delete of data into MongoDB failed: {$e->getMessage()}", 500);  
  636. }  
  637. }  
  638. /** 
  639. * 
  640. * DELETE_ALL * 
  641. * 
  642. * Delete all documents from the passed collection based upon certain criteria 
  643. * 
  644. * @usage = $this->mongo_db->delete_all('foo', $data = array()); 
  645. */ 
  646. public function delete_all($collection = "") {  
  647. if (emptyempty($collection)) {  
  648. $this->error("No Mongo collection selected to delete from", 500);  
  649. } try {  
  650. $this->db->{$collection}->remove($this->wheres, array('fsync' => TRUE, 'justOne' => FALSE));  
  651. return(TRUE);  
  652. } catch (MongoCursorException $e) {  
  653. $this->error("Delete of data into MongoDB failed: {$e->getMessage()}", 500);  
  654. }  
  655. }  
  656. /** 
  657. * 
  658. * ADD_INDEX * 
  659. * 
  660. * Ensure an index of the keys in a collection with optional parameters. 
  661. To set values to descending order, 
  662. * you must pass values of either -1, FALSE, 'desc', or 'DESC', else they will be 
  663. * set to 1 (ASC). * 
  664. * @usage = $this->mongo_db->add_index($collection, array('first_name' => 'ASC', 'last_name' => -1), array('unique' => TRUE)); 
  665. */ 
  666. public function add_index($collection = ""$keys = array(), $options = array()) {  
  667. if (emptyempty($collection)) {  
  668. $this->error("No Mongo collection specified to add index to", 500);  
  669. if (emptyempty($keys) || !is_array($keys)) {  
  670. $this->error("Index could not be created to MongoDB Collection because no keys were specified", 500);  
  671. foreach ($keys as $col => $val) {  
  672. if ($val == -1 || $val === FALSE || strtolower($val) == 'desc') {  
  673. $keys[$col] = -1;  
  674. else {  
  675. $keys[$col] = 1;  
  676. }  
  677. if ($this->db->{$collection}->ensureIndex($keys$options) == TRUE) {  
  678. $this->clear();  
  679. return($this);  
  680. else {  
  681. $this->error("An error occured when trying to add an index to MongoDB Collection", 500);  
  682. }  
  683. }  
  684. /** 
  685. * 
  686. * REMOVE_INDEX * 
  687. * 
  688. * Remove an index of the keys in a collection. 
  689. To set values to descending order, 
  690. * you must pass values of either -1, FALSE, 'desc', or 'DESC', else they will be 
  691. * set to 1 (ASC). * 
  692. * @usage = $this->mongo_db->remove_index($collection, array('first_name' => 'ASC', 'last_name' => -1)); 
  693. */ 
  694. public function remove_index($collection = ""$keys = array()) {  
  695. if (emptyempty($collection)) {  
  696. $this->error("No Mongo collection specified to remove index from", 500);  
  697. if (emptyempty($keys) || !is_array($keys)) {  
  698. $this->error("Index could not be removed from MongoDB Collection because no keys were specified", 500);  
  699. if ($this->db->{$collection}->deleteIndex($keys$options) == TRUE) {  
  700. $this->clear();  
  701. return($this);  
  702. else {  
  703. $this->error("An error occured when trying to remove an index from MongoDB Collection", 500);  
  704. }  
  705. }  
  706. /** 
  707. * 
  708. * REMOVE_ALL_INDEXES * 
  709. * 
  710. * Remove all indexes from a collection. * 
  711. * @usage = $this->mongo_db->remove_all_index($collection); 
  712. */ 
  713. public function remove_all_indexes($collection = "") {  
  714. if (emptyempty($collection)) {  
  715. $this->error("No Mongo collection specified to remove all indexes from", 500);  
  716. $this->db->{$collection}->deleteIndexes();  
  717. $this->clear();  
  718. return($this);  
  719. }  
  720. /** 
  721. * 
  722. * LIST_INDEXES * 
  723. * 
  724. * Lists all indexes in a collection. * 
  725. * @usage = $this->mongo_db->list_indexes($collection); 
  726. */ 
  727. public function list_indexes($collection = "") {  
  728. if (emptyempty($collection)) {  
  729. $this->error("No Mongo collection specified to remove all indexes from", 500);  
  730. return($this->db->{$collection}->getIndexInfo());  
  731. }  
  732. /** 
  733. * 
  734. * DROP COLLECTION * 
  735. * 
  736. * Removes the specified collection from the database. 
  737. Be careful because this 
  738. * can have some very large issues in production! 
  739. */ 
  740. public function drop_collection($collection = "") {  
  741. if (emptyempty($collection)) {  
  742. $this->error("No Mongo collection specified to drop from database", 500);  
  743. $this->db->{$collection}->drop();  
  744. return TRUE;  
  745. }  
  746. /** 
  747. * 
  748. * CLEAR * 
  749. * 
  750. * Resets the class variables to default settings 
  751. */ 
  752. private function clear() {  
  753. $this->selects = array();  
  754. $this->wheres = array();  
  755. $this->limit = NULL;  
  756. $this->offset = NULL;  
  757. $this->sorts = array();  
  758. }  
  759. /** 
  760. * 
  761. * WHERE INITIALIZER * 
  762. * 
  763. * Prepares parameters for insertion in $wheres array(). 
  764. */ 
  765. private function where_init($param) {  
  766. if (!isset($this->wheres[$param])) {  
  767. $this->wheres[$param] = array();  
  768. }  
  769. }  
  770. public function error($str$t) {  
  771. echo $str;  
  772. exit;  
  773. }  
  774. }  
  775. ?> 



使用范例:

 

 
  1. $table_name=trim(strtolower($this->table_name));  
  2. $this->mongo_db->where($where);  
  3. $order=!emptyempty($order)?array('AID'=>'DESC'):array('AID'=>'ASC'); 
  4. //升序降序  
  5. $infos=$this->mongo_db->listinfo($table_name,$order,$page,$pagesize); 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表