ホームページ  >  記事  >  バックエンド開発  >  PHP でカプセル化された mongodb 操作クラス

PHP でカプセル化された mongodb 操作クラス

WBOY
WBOYオリジナル
2016-07-25 08:43:17827ブラウズ
  1. /*
  2. * このテンプレートを変更するには、[ツール] | [ツール] を選択します。テンプレート
  3. * エディタでテンプレートを開きます。
  4. */
  5. class mongo_db {
  6. private $config;
  7. プライベート $connection;
  8. プライベート $db;
  9. プライベート $connection_string;
  10. プライベート $host;
  11. プライベート $ポート;
  12. プライベート $user;
  13. プライベート$パス;
  14. プライベート $dbname;
  15. プライベート $persist;
  16. プライベート $persist_key;
  17. プライベート $selects = array();
  18. プライベート $wheres = array();
  19. プライベート $sorts = array();
  20. プライベート $limit = 999999;
  21. プライベート $offset = 0;
  22. プライベート $timeout = 200;
  23. プライベート $key = 0;
  24. /*** -------------------------------------------------- ----------------------------- * コンストラクター * ---------------- -------------------------------------------------- -------------- * * Mongo PECL 拡張機能がインストール/有効化されているかどうかを自動的に確認します。 * 接続文字列を生成し、MongoDB への接続を確立します。*/
  25. public function __construct() {
  26. if((IS_NOSQL != 1)){
  27. return;
  28. }
  29. if (!class_exists('Mongo')) {
  30. //$this->error("MongoDB PECL 拡張機能がインストールされていないか、有効になっていません", 500);
  31. }
  32. $configs =wxcity_base::load_config("cache","mongo_db");
  33. $num = count($configs['connect']);
  34. $this->timeout = trim($configs['timeout']);
  35. $keys = wxcity_base::load_config('double');
  36. $this->key = $keys['mongo_db'];
  37. $this->config = $configs['connect'][$this->key];
  38. $status = $this->connect();
  39. if($status == false)
  40. {
  41. for($i = 1; $i < $num; $i++)
  42. {
  43. $n = $this->key + $i;
  44. $key = $n >= $num ? $n - $num : $n;
  45. $this->config = $configs['connect'][$key];
  46. $status = $this->connect();
  47. if($status!=false)
  48. {
  49. $keys['mongo_db'] = $key ;
  50. $this->key = $key;
  51. $data = "";
  52. file_put_contents(WHTY_PATH.'configs/double.php', $data, LOCK_EX);
  53. 休憩;
  54. }
  55. }
  56. }
  57. if($status==false)
  58. {
  59. die('mongoDB not connect');
  60. }
  61. }
  62. function __destruct() {
  63. if((IS_NOSQL != 1)){
  64. return;
  65. }
  66. if($this->connection)
  67. {
  68. $this->connection->close();
  69. }
  70. }
  71. /*** -------------------------------------------------- ----------------------------- * MONGODB に接続します * -------------- -------------------------------------------------- ---------------- * * connection_string() メソッドで生成された接続文字列を使用して、 * MongoDB への接続を確立します。 * config ファイルで 'mongo_persist_key' が true に設定されている場合は、永続的な接続を確立します。 すぐに接続を確立したいため、「persist」 * オプションのみを設定できます。*/
  72. プライベート関数 connect() {
  73. $this->connection_string();
  74. $options = array('connect'=>true,'timeout'=>$this->timeout);
  75. {
  76. $this->connection = new Mongo($this->connection_string, $options); を試してください。
  77. $this->db = $this->接続->{$this->dbname};
  78. return($this);
  79. } catch (MongoConnectionException $e) {
  80. false を返します。
  81. }
  82. }
  83. /*** -------------------------------------------------- ----------------------------- * 接続文字列の構築 * -------------- -------------------------------------------------- ---------------- * * 構成ファイルから接続文字列を構築します。*/
  84. プライベート関数 connection_string() {
  85. $this->host = トリム($this->config['hostname']);
  86. $this->port = トリム($this->config['port']);
  87. $this->user = trim($this->config['username']);
  88. $this->pass = トリム($this->config['パスワード']);
  89. $this->dbname = トリム($this->config['データベース']);
  90. $this->persist = trim($this->config['autoconnect']);
  91. $this->persist_key = トリム($this->config['mongo_persist_key']);
  92. $connection_string = "mongodb://";
  93. if (emptyempty($this->host)) {
  94. $this->error("MongoDB に接続するにはホストを設定する必要があります", 500);
  95. } if (emptyempty($this->dbname)) {
  96. $this->error("データベースは MongoDB に接続するように設定する必要があります", 500);
  97. } if (!emptyempty($this->user) && !emptyempty($this->pass)) {
  98. $connection_string .= "{$this->user}:{$this->pass} @";
  99. } if (isset($this->port) && !emptyempty($this->port)) {
  100. $connection_string .= "{$this->host}:{$this->port}" ;
  101. } else {
  102. $connection_string .= "{$this->host}";
  103. } $this->接続文字列 = トリム($接続_文字列);
  104. }
  105. /*** -------------------------------------------------- ----------------------------- * Switch_db * ---------------- -------------------------------------------------- -------------- * * デフォルトのデータベースから別のデータベースに切り替えます*/
  106. public function switch_db($database = '') {
  107. if (emptyempty($database)) {
  108. $this->error("MongoDB データベースを切り替えるには、新しいデータベース名を指定する必要があります", 500);
  109. } $this->dbname = $database;
  110. {
  111. $this->db = $this->接続->{$this->dbname}; を試してください。
  112. 戻り値(TRUE);
  113. } catch (Exception $e) {
  114. $this->error("Mongo データベースを切り替えることができません: {$e->getMessage()}", 500);
  115. }
  116. }
  117. /*** -------------------------------------------------- ----------------------------- * フィールドを選択 * --------------- -------------------------------------------------- --------------- * * クエリ プロセス中にどのフィールドを含めるか、またはどのフィールドを除外するかを決定します。 * 現在、包含と除外を同時に行うことはできないため、 * $includes 配列が $excludes 配列よりも優先されます。 * 除外するフィールドのみを選択したい場合は、$includes を空の array() のままにしておきます。 * * @usage: $this->mongo_db->select(array('foo', 'bar'))->get('foobar');*/
  118. public function select($includes = array(), $excludes = array()) {
  119. if (!is_array($includes)) {
  120. $includes = array ();
  121. }
  122. if (!is_array($excludes)) {
  123. $excludes = array();
  124. }
  125. if (!emptyempty($includes)) {
  126. foreach ($includes as $col) {
  127. $this->selects[$col] = 1;
  128. }
  129. } else {
  130. foreach ($excludes as $col) {
  131. $this->selects[$col] = 0;
  132. }
  133. } return($this);
  134. }
  135. /*** -------------------------------------------------- ----------------------------- * WHERE パラメータ * --------------- -------------------------------------------------- --------------- * * これらの検索パラメータに基づいてドキュメントを取得します。 $wheres 配列は、 * フィールドをキーとし、 * 値を検索条件とする連想配列である必要があります。 * * @usage = $this->mongo_db->where(array('foo' =>'bar'))->get('foobar');*/
  136. public function where($wheres = array()) {
  137. foreach ((array)$wheres as $wh =>$val) {
  138. $this->wheres [$wh] = $val;
  139. } return($this);
  140. }
  141. /*** -------------------------------------------------- ----------------------------- * WHERE_IN パラメータ * --------------- -------------------------------------------------- --------------- * * $field の値が指定された $in array() にあるドキュメントを取得します。 * * @usage = $this->mongo_db->where_in('foo', array('bar', 'zoo', 'blah'))->get('foobar');*/
  142. public function where_in($field = "", $in = array()) {
  143. $this->where_init($field);
  144. $this->wheres[$field]['$in'] = $in;
  145. return($this);
  146. }
  147. /*** -------------------------------------------------- ----------------------------- * WHERE_NOT_IN パラメータ * --------------- -------------------------------------------------- --------------- * * $field の値が指定された $in array() にないドキュメントを取得します。 * * @usage = $this->mongo_db->where_not_in('foo', array('bar', 'zoo', 'blah'))->get('foobar');*/
  148. public function where_not_in($field = "", $in = array()) {
  149. $this->where_init($field);
  150. $this->wheres[$field]['$nin'] = $in;
  151. return($this);
  152. }
  153. /*** -------------------------------------------------- ----------------------------- * パラメータより大きい場合 * ------------- -------------------------------------------------- ----------------- * * $field の値が $x より大きいドキュメントを取得します * * @usage = $this->mongo_db->where_gt( 「フー」、20);*/
  154. public function where_gt($field = "", $x) {
  155. $this->where_init($field);
  156. $this->wheres[$field]['$gt'] = $x;
  157. return($this);
  158. }
  159. /*** -------------------------------------------------- ----------------------------- * パラメータ以上の場合 * ---------- -------------------------------------------------- -------------------- * * $field の値が $x 以上であるドキュメントを取得します * * @usage = $this-> mongo_db->where_gte('foo', 20);*/
  160. public function where_gte($field = "", $x) {
  161. $this->where_init($field);
  162. $this->wheres[$field]['$gte'] = $x;
  163. return($this);
  164. }
  165. /*** -------------------------------------------------- ----------------------------- * パラメータ未満の場合 * ------------- -------------------------------------------------- ----------------- * * $field の値が $x より小さいドキュメントを取得します * * @usage = $this->mongo_db->where_lt( 「フー」、20);*/
  166. public function where_lt($field = "", $x) {
  167. $this->where_init($field);
  168. $this->wheres[$field]['$lt'] = $x;
  169. return($this);
  170. }
  171. /*** -------------------------------------------------- ----------------------------- * パラメータ以下の場合 * ---------- -------------------------------------------------- -------------------- * * $field の値が $x 以下のドキュメントを取得します * * @usage = $this-> mongo_db->where_lte('foo', 20);*/
  172. public function where_lte($field = "", $x) {
  173. $this->where_init($field);
  174. $this->wheres[$field]['$lte'] = $x;
  175. return($this);
  176. }
  177. /*** -------------------------------------------------- ----------------------------- * パラメータの間の場所 * -------------- -------------------------------------------------- ---------------- * * $field の値が $x と $y の間にあるドキュメントを取得します * * @usage = $this->mongo_db->where_between ('foo'、20、30);*/
  178. public function where_between($field = "", $x, $y) {
  179. $this->where_init($field);
  180. $this->wheres[$field]['$gte'] = $x;
  181. $this->wheres[$field]['$lte'] = $y;
  182. return($this);
  183. }
  184. /*** -------------------------------------------------- ----------------------------- * パラメータの間および等しくない場合 * ---------- -------------------------------------------------- -------------------- * * $field の値が $x と $y の間にあるが等しくないドキュメントを取得します * * @usage = $this ->mongo_db->where_between_ne('foo', 20, 30);*/
  185. public function where_between_ne($field = "", $x, $y) {
  186. $this->where_init($field);
  187. $this->wheres[$field]['$gt'] = $x;
  188. $this->wheres[$field]['$lt'] = $y;
  189. return($this);
  190. }
  191. /*** -------------------------------------------------- ----------------------------- * パラメーターと等しくない場合 * ------------ -------------------------------------------------- ------------------ * * $field の値が $x と等しくないドキュメントを取得します * * @usage = $this->mongo_db-> where_between('foo', 20, 30);*/
  192. public function where_ne($field = "", $x) {
  193. $this->where_init($field);
  194. $this->wheres[$field]['$ne'] = $x;
  195. return($this);
  196. }
  197. /*** -------------------------------------------------- ----------------------------- * どこまたは * --------------- -------------------------------------------------- --------------- * * $field の値が 1 つ以上の値に含まれるドキュメントを取得します * * @usage = $this->mongo_db->where_or(' foo', array( 'foo', 'bar', 'blegh' );*/
  198. public function where_or($field = "", $values) {
  199. $this->where_init($field);
  200. $this->wheres[$field]['$or'] = $values;
  201. return($this);
  202. }
  203. /*** -------------------------------------------------- ----------------------------- * どこで * --------------- -------------------------------------------------- --------------- * * 要素が指定された値と一致するドキュメントを取得します * * @usage = $this->mongo_db->where_and( array ( 'foo' => ; 1, 'b' => 'いくつかの例' );*/
  204. public function where_and($elements_values = array()) {
  205. foreach ((array)$elements_values as $element =>$val) {
  206. $this->wheres [$要素] = $val;
  207. } return($this);
  208. }
  209. /*** -------------------------------------------------- ----------------------------- * WHERE MOD * --------------- -------------------------------------------------- --------------- * * ドキュメントを取得します。 where $field % $mod = $result * * @usage = $this->mongo_db->where_mod( 'foo', 10 、1);*/
  210. public function where_mod($field, $num, $result) {
  211. $this->where_init($field);
  212. $this->wheres[$field]['$mod'] = array($num, $result);
  213. return($this);
  214. }
  215. /*** -------------------------------------------------- ----------------------------- * サイズの場所 * --------------- -------------------------------------------------- --------------- * * フィールドのサイズが指定された $size int にあるドキュメントを取得します * * @usage : $this->mongo_db->where_size(' foo', 1)->get('foobar');*/
  216. public function where_size($field = "", $size = "") {
  217. $this->_where_init($field);
  218. $this->wheres[$field]['$size'] = $size;
  219. リターン ($this);
  220. }
  221. /*** -------------------------------------------------- ----------------------------- * パラメータのようなもの * --------------- -------------------------------------------------- --------------- * * $field の (文字列) 値が値に似ているドキュメントを取得します。デフォルトでは * 大文字と小文字を区別しない検索が可能です。 * * @param $flags * 一般的な正規表現フラグを許可します。 * i = 大文字と小文字を区別しない * m = 複数行 * x = コメントを含めることができます * l = ロケール * s = dotall、"."改行を含むすべてに一致します * u = unicode に一致します * * @param $enable_start_wildcard * TRUE 以外に設定すると、開始行文字 "^" が検索値の前に * 追加され、先頭の値の検索のみを表します* 新しい行。 * * @param $enable_end_wildcard * TRUE 以外に設定すると、終了行文字「$」が * 検索値に追加され、 * 行末の値のみを検索することを表します。 * * @usage = $this->mongo_db->like('foo', 'bar', 'im', FALSE, TRUE);*/
  222. public function like($field = "", $value = "", $flags = "i", $enable_start_wildcard = TRUE, $enable_end_wildcard = TRUE) {
  223. $field = (文字列) トリム($field);
  224. $this->where_init($field);
  225. $value = (文字列) トリム($value);
  226. $value = quotemeta($value);
  227. if ($enable_start_wildcard !== TRUE) {
  228. $value = "^" . $値;
  229. } if ($enable_end_wildcard !== TRUE) {
  230. $value .= "$";
  231. } $regex = "/$value/$flags";
  232. $this->wheres[$field] = new MongoRegex($regex);
  233. return($this);
  234. }
  235. public function wheres($where){
  236. $this->wheres = $where;
  237. }
  238. /*** -------------------------------------------------- ----------------------------- * パラメータによる順序 * -------------- -------------------------------------------------- ---------------- * * 渡されたパラメータに基づいてドキュメントを並べ替えます。値を降順に設定するには、 * -1、FALSE、'desc'、または 'DESC' のいずれかの値を渡す必要があります。それ以外の場合、値は * 1 (ASC) に設定されます。 * * @usage = $this->mongo_db->where_between('foo', 20, 30);*/
  239. public function order_by($fields = array()) {
  240. if (!is_array($fields) || !count($fields)) return ;
  241. foreach ($fields as $col => $val) {
  242. if ($val == -1 || $val === FALSE || strto lower($val) == 'desc') {
  243. $this- > ソート[$col] = -1;
  244. } else {
  245. $this->sorts[$col] = 1;
  246. }
  247. } return($this);
  248. }
  249. /*** -------------------------------------------------- ----------------------------- * 書類の制限 * --------------- -------------------------------------------------- --------------- * * 結果セットを $x 個のドキュメントに制限します * * @usage = $this->mongo_db->limit($x);*/
  250. public function limit($x = 99999) {
  251. if ($x !== NULL && is_numeric($x) && $x >= 1) {
  252. $this ->limit = (int) $x;
  253. } return($this);
  254. }
  255. /*** -------------------------------------------------- ----------------------------- * オフセット書類 * --------------- -------------------------------------------------- --------------- * * $x 個のドキュメントをスキップするために結果セットをオフセットします * * @usage = $this->mongo_db->offset($x);*/
  256. public function offset($x = 0) {
  257. if ($x !== NULL && is_numeric($x) && $x >= 1) {
  258. $this ->オフセット = (int) $x;
  259. } return($this);
  260. }
  261. /*** -------------------------------------------------- ----------------------------- * GET_WHERE * -------------- -------------------------------------------------- -------------- * * 渡されたパラメータに基づいてドキュメントを取得します * * @usage = $this->mongo_db->get_where('foo', array('bar' = >「何か」));*/
  262. public function get_where($collection = "", $where = array(), $limit = 99999, $orderby=array()) {
  263. if (is_array($orderby) ) || !emptyempty($orderby)) {
  264. $order_by = $this->order_by($order_by);
  265. }
  266. return($this->where($where)->limit($limit)->get($collection));
  267. }
  268. public function selectA($collection = "", $limit = 99999, $orderby=array()) {
  269. if(intval($limit) $limit = 999999;
  270. }
  271. $order_by = $this->order_by($orderby);
  272. $re = $this->limit($limit)->get($collection);
  273. $this->clear();
  274. return (配列)$re;
  275. }
  276. public function listinfo($collection = "", $orderby=array(), $page=1, $pagesize=12) {
  277. $page = max(intval($page), 1);
  278. $offset = $pagesize * ($page - 1);
  279. $pagesizes = $offset + $pagesize;
  280. $this->offset($offset);
  281. $order_by = $this->order_by($orderby);
  282. $re = $this->limit($pagesize)->get($collection);
  283. $this->limit(999999);
  284. $count = $this->count($collection);
  285. $this->pages = ページ($count, $page, $pagesize);
  286. return (配列)$re;
  287. }
  288. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * 得る * - - - - - - - - -------------------------------------------------- -------------- * * 渡されたパラメータに基づいてドキュメントを取得します * * @usage = $this->mongo_db->get('foo', array('bar' = >「何か」));*/
  289. public function get($collection = "") {
  290. if (emptyempty($collection)) {
  291. $this->error("MongoDB からドキュメントを取得するため、コレクション名を渡す必要があります", 500);
  292. } $results = array();
  293. $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit )->skip((int) $this->offset)->sort($this->sorts);
  294. $returns = array();
  295. foreach ($documents as $doc): $returns[] = $doc;
  296. エンドフォーリーチ;
  297. return($returns);
  298. }
  299. public function getMy($collection = "") {
  300. if (emptyempty($collection)) {
  301. $this->error("MongoDB からドキュメントを取得するには、コレクション名を渡す必要があります", 500);
  302. } $results = array();
  303. $documents = $this->db->{$collection}->find($this->wheres, $this->selects)->limit((int) $this->limit )->skip((int) $this->offset)->sort($this->sorts);
  304. $returns = array();
  305. foreach ($documents as $doc): $returns[] = $doc;
  306. エンドフォーリーチ;
  307. $this ->クリア();
  308. return($returns);
  309. }
  310. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * カウント * - - - - - - - - -------------------------------------------------- -------------- * * 渡されたパラメータに基づいてドキュメントをカウントします * * @usage = $this->mongo_db->get('foo');*/
  311. public function count($collection = "") {
  312. if (emptyempty($collection)) {
  313. $this->error(" MongoDB からのドキュメント、コレクション名を渡す必要があります", 500);
  314. } $count = $this->db->{$collection}->find($this->wheres)->limit((int) $this->limit)->skip( (int) $this->offset)->count();
  315. $this->clear();
  316. return($count);
  317. }
  318. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * 入れる * - - - - - - - - -------------------------------------------------- -------------- * * 渡されたコレクションに新しいドキュメントを挿入します * * @usage = $this->mongo_db->insert('foo', $data = array() );*/
  319. public function insert($collection = "", $data = array(), $name='ID') {
  320. if (emptyempty($collection)) {
  321. $ this->error("挿入する Mongo コレクションが選択されていません", 500);
  322. } if (count($data) == 0 || !is_array($data)) {
  323. $this->error("Mongo コレクションに挿入するもの、または挿入するものが配列ではありません", 500);
  324. } try {
  325. /**
  326. wxcity_base::load_sys_class('whtysqs','',0);
  327. $mongoseq_class = new whtysqs('creaseidsqs');
  328. $re = $mongoseq_class->query("?name=" . $collection . "&opt=put&data=1");
  329. **/
  330. $re = put_sqs('list_mongo_creaseidsqs','1');
  331. if(is_numeric($re)){
  332. $re++;
  333. $data[$name] = intval($re);
  334. }else{
  335. $data[$name] = intval(time());
  336. //die('mongosqs エラー');
  337. }
  338. $this->db->{$collection}->insert($data, array('fsync' => TRUE));
  339. $this->clear();
  340. $data[$name] を返します;
  341. } catch (MongoCursorException $e) {
  342. $this->error("MongoDB へのデータの挿入に失敗しました: {$e->getMessage()}", 500);
  343. }
  344. }
  345. public function insertWithId($collection = "", $data = array()) {
  346. if (emptyempty($collection)) {
  347. $this->error("挿入する Mongo コレクションが選択されていません"、500);
  348. } if (count($data) == 0 || !is_array($data)) {
  349. $this->error("Mongo コレクションに挿入するもの、または挿入するものが配列ではありません", 500);
  350. } try {
  351. $this->db->{$collection}->insert($data, array('fsync' => TRUE));
  352. $this->clear();
  353. 1 を返します。
  354. } catch (MongoCursorException $e) {
  355. $this->error("MongoDB へのデータの挿入に失敗しました: {$e->getMessage()}", 500);
  356. }
  357. }
  358. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * アップデート * - - - - - - - - -------------------------------------------------- -------------- * * 渡されたコレクションにドキュメントを更新します * * @usage = $this->mongo_db->update('foo', $data = array()) ;*/
  359. public function update($collection = "", $data = array()) {
  360. if (emptyempty($collection)) {
  361. $this->error( 「更新する Mongo コレクションが選択されていません」、500);
  362. } if (count($data) == 0 || !is_array($data)) {
  363. $this->error("Mongo コレクションに更新するものがない、または更新するものが配列ではありません", 500);
  364. } try {
  365. $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' =>) ; TRUE、「複数」 => FALSE);
  366. $this->clear();
  367. 戻り値(TRUE);
  368. } catch (MongoCursorException $e) {
  369. $this->error("MongoDB へのデータの更新に失敗しました: {$e->getMessage()}", 500);
  370. }
  371. }
  372. /*** -------------------------------------------------- ----------------------------- * UPDATE_ALL * ---------------- -------------------------------------------------- -------------- * * 渡されたコレクションに新しいドキュメントを挿入します * * @usage = $this->mongo_db->update_all('foo', $data = array() );*/
  373. public function update_all($collection = "", $data = array()) {
  374. if (emptyempty($collection)) {
  375. $this->error (「更新する Mongo コレクションが選択されていません」、500);
  376. } if (count($data) == 0 || !is_array($data)) {
  377. $this->error("Mongo コレクションに更新するものがない、または更新するものが配列ではありません", 500);
  378. } try {
  379. $this->db->{$collection}->update($this->wheres, array('$set' => $data), array('fsync' =>) ; TRUE、'複数' =>
  380. 戻り値(TRUE);
  381. } catch (MongoCursorException $e) {
  382. $this->error("MongoDB へのデータの更新に失敗しました: {$e->getMessage()}", 500);
  383. }
  384. }
  385. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * 消去 * - - - - - - - - -------------------------------------------------- -------------- * * 特定の基準に基づいて、渡されたコレクションからドキュメントを削除します * * @usage = $this->mongo_db->delete('foo', $data = array ());*/
  386. public function delete($collection = "") {
  387. if (emptyempty($collection)) {
  388. $this->error("Mongo コレクションが選択されていませんから削除", 500);
  389. } try {
  390. $this->db->{$collection}->remove($this->wheres, array('fsync' => TRUE, 'justOne' => TRUE));
  391. $this->clear();
  392. 戻り値(TRUE);
  393. } catch (MongoCursorException $e) {
  394. $this->error("MongoDB へのデータの削除に失敗しました: {$e->getMessage()}", 500);
  395. }
  396. }
  397. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * すべて削除 * - - - - - - - - -------------------------------------------------- -------------- * * 特定の基準に基づいて、渡されたコレクションからすべてのドキュメントを削除します * * @usage = $this->mongo_db->delete_all('foo', $data =配列());*/
  398. public function delete_all($collection = "") {
  399. if (emptyempty($collection)) {
  400. $this->error("削除する Mongo コレクションが選択されていません", 500);
  401. } try {
  402. $this->db->{$collection}->remove($this->wheres, array('fsync' => TRUE, 'justOne' => FALSE));
  403. 戻り値(TRUE);
  404. } catch (MongoCursorException $e) {
  405. $this->error("MongoDB へのデータの削除に失敗しました: {$e->getMessage()}", 500);
  406. }
  407. }
  408. /*** -------------------------------------------------- ----------------------------- * ADD_INDEX * -------------- -------------------------------------------------- -------------- * * オプションのパラメーターを使用して、コレクション内のキーのインデックスを確保します。値を降順に設定するには、 * -1、FALSE、'desc'、または 'DESC' のいずれかの値を渡す必要があります。そうしないと、 * 1 (ASC) に設定されます。 * * @usage = $this->mongo_db->add_index($collection, array('first_name' => 'ASC', 'last_name' => -1), array('unique' => TRUE ));*/
  409. public function add_index($collection = "", $keys = array(), $options = array()) {
  410. if (emptyempty($collection)) {
  411. $this->error("インデックスを追加する Mongo コレクションが指定されていません", 500);
  412. } if (emptyempty($keys) || !is_array($keys)) {
  413. $this->error("キーが指定されていないため、MongoDB コレクションにインデックスを作成できませんでした", 500);
  414. } foreach ($keys as $col => $val) {
  415. if ($val == -1 || $val === FALSE || strto lower($val) == 'desc') {
  416. $keys [$col] = -1;
  417. } else {
  418. $keys[$col] = 1;
  419. }
  420. } if ($this->db->gt;{$collection}->ensureIndex($keys, $options) == TRUE) {
  421. $this->clear();
  422. return($this);
  423. } else {
  424. $this->error("MongoDB コレクションにインデックスを追加しようとしたときにエラーが発生しました", 500);
  425. }
  426. }
  427. /*** -------------------------------------------------- ----------------------------- * REMOVE_INDEX * ---------------- -------------------------------------------------- -------------- * * コレクション内のキーのインデックスを削除します。値を降順に設定するには、 * -1、FALSE、'desc'、または 'DESC' のいずれかの値を渡す必要があります。それ以外の場合、値は * 1 (ASC) に設定されます。 * * @usage = $this->mongo_db->remove_index($collection, array('first_name' => 'ASC', 'last_name' => -1));*/
  428. public function Remove_index($collection = "", $keys = array()) {
  429. if (emptyempty($collection)) {
  430. $this->error ("インデックスを削除する Mongo コレクションが指定されていません", 500);
  431. } if (emptyempty($keys) || !is_array($keys)) {
  432. $this->error("キーが指定されていないため、MongoDB コレクションからインデックスを削除できませんでした", 500);
  433. } if ($this->db->{$collection}->deleteIndex($keys, $options) == TRUE) {
  434. $this->clear();
  435. return($this);
  436. } else {
  437. $this->error("MongoDB コレクションからインデックスを削除しようとしたときにエラーが発生しました", 500);
  438. }
  439. }
  440. /*** -------------------------------------------------- ----------------------------- * REMOVE_ALL_INDEXES * ---------------- -------------------------------------------------- -------------- * * コレクションからすべてのインデックスを削除します。 * * @usage = $this->mongo_db->remove_all_index($collection);*/
  441. public function Remove_all_indexes($collection = "") {
  442. if (emptyempty($collection)) {
  443. $this->error("Mongo コレクションが指定されていませんすべてのインデックスを削除します", 500);
  444. } $this->db->{$collection}->deleteIndexes();
  445. $this->clear();
  446. return($this);
  447. }
  448. /*** -------------------------------------------------- ----------------------------- * LIST_INDEXES * -------------- -------------------------------------------------- -------------- * * コレクション内のすべてのインデックスをリストします。 * * @usage = $this->mongo_db->list_indexes($collection);*/
  449. public function list_indexes($collection = "") {
  450. if (emptyempty($collection)) {
  451. $this->error("すべてのインデックスを削除するための Mongo コレクションが指定されていません"、500);
  452. } return($this->db->{$collection}->getIndexInfo());
  453. }
  454. /*** -------------------------------------------------- ----------------------------- *ドロップコレクション* --------------- -------------------------------------------------- --------------- * * 指定されたコレクションをデータベースから削除します。 * これは実稼働環境で非常に大きな問題を引き起こす可能性があるため、注意してください。*/
  455. public function drop_collection($collection = "") {
  456. if (emptyempty($collection)) {
  457. $this->error("ドロップ元の Mongo コレクションが指定されていませんデータベース」、500);
  458. } $this->db->{$collection}->drop();
  459. TRUE を返します。
  460. }
  461. /*** -------------------------------------------------- - - - - - - - - - - - - - - - - * クリア * - - - - - - - - -------------------------------------------------- -------------- * * クラス変数をデフォルト設定にリセットします*/
  462. プライベート関数 clear() {
  463. $this->selects = array();
  464. $this->wheres = array();
  465. $this->limit = NULL;
  466. $this->オフセット = NULL;
  467. $this->sorts = array();
  468. }
  469. /*** -------------------------------------------------- ----------------------------- * WHERE Initializer * --------------- -------------------------------------------------- --------------- * * $wheres array() に挿入するパラメータを準備します。*/
  470. プライベート関数 where_init($param) {
  471. if (!isset($this->wheres[$param])) {
  472. $this->wheres[$param] ] = 配列();
  473. }
  474. }
  475. public function error($str, $t) {
  476. echo $str;
  477. 終了;
  478. }
  479. }
  480. ?>
复制代

使用例
  1. $table_name=trim(strto lower($this->table_name));
  2. $this->mongo_db->where($where);
  3. $order=!emptyempty($order)?array('AID'=>'DESC'):array('AID'=>'ASC');//升序降順
  4. $infos=$this-> mongo_db->listinfo($table_name,$order,$page,$pagesize);
复制代

php、mongodb


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。