cncml手绘网

标题: PHP实现的mongoDB数据库操作类完整实例 [打印本页]

作者: admin    时间: 2019-3-9 02:49
标题: PHP实现的mongoDB数据库操作类完整实例

本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下:

最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。

众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

面向集合存储,易存储对象类型的数据。) i  z5 S% \5 B
模式自由。; Y( R6 W; {% d% s( c$ I9 ]9 Y& j9 s
支持动态查询。0 B  d$ k" p; A5 F4 A3 g) Y' @
支持完全索引,包含内部对象。4 @( r: N9 B" n  Z, G
支持查询。4 ~% ~& @& ]  I/ v
支持复制和故障恢复。
* s5 s5 g% E2 V使用高效的二进制数据存储,包括大型对象(如视频等)。  S$ _7 O4 w! r2 C& f
自动处理碎片,以支持云计算层次的扩展性
5 K% g2 Z+ U% d6 `$ R4 p支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。% X% s6 d# z! b* u( b; E' f/ H
文件存储格式为BSON(一种JSON的扩展)- C* [$ y; W" J6 n
可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB

在32位模式运行时支持的最大文件尺寸为2GB。

MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。

小编自己封装的PHP操作MongoDB数据库的数据库操作类源码如下,仅供参考。

  1. <?php
    4 G0 ~5 T0 f3 ], E) d) K
  2. /**
    ( s) v5 T+ U/ @+ |3 [7 N. Z
  3. * PHP操作mongodb数据库操作类% e9 e. a) O6 M: \& A; S
  4. */6 E! g) g* `2 l1 S1 ?
  5. class Database {
    2 Y: w3 P5 q3 I, _" \
  6.   protected $database  = '';
    5 h9 G# _* ~0 ?& \: K; r) d
  7.   protected $mo;7 ^) r0 C% @! p1 Z3 T
  8.   /**
      d+ ~# R7 A% H
  9.    * 构造方法
    1 I1 S/ p3 f8 l
  10.    */; p6 s9 Z$ D+ M9 V& [+ v! L
  11.   public function __construct() {
    : J" }& M6 ^$ k4 c  o
  12.     $server = DBSERVER;
    / o8 j  p9 E' i) z
  13.     $user = DBUSER;) Z* U* m- D6 m0 I2 |
  14.     $password = DBPASS;
    ! T5 p# d2 I8 t( y' @5 a3 |# J) {+ {' q' J
  15.     $port = DBPORT;; H4 Z" C0 a& @5 U
  16.     $database = DBNAME;' f. ~8 i7 g0 E0 c7 v
  17.     $mongo = $this->getInstance($server, $user, $password, $port);: q* I  k3 f  B! m
  18.     $this->database = $mongo->$database;1 {) c6 _$ d% \# y; R! \7 S# c
  19.   }* E' \" p) o# b3 }
  20.   /**
    : a# Y4 A9 ?( t) W9 h& Z+ Y
  21.    * 数据库单例方法& A, `. `( S8 O# ~' x# E' h4 c
  22.    * @param $server
    ! J9 R1 s7 l: {& m: r/ Y
  23.    * @param $user9 x+ M( Q4 _5 ]! a- z
  24.    * @param $password
    ! K" ]" a* R) `1 R( b
  25.    * @param $port# k  g/ Z" b3 B" ^# Q6 j
  26.    * @return Mongo! _2 L8 V  H  A- \' C
  27.    */
    * I' A5 ^4 }  ?0 W$ H( \) s3 T# [$ g% e
  28.   public function getInstance($server, $user, $password, $port) {
    ( V) g# u3 G& ]3 d- f
  29.     if (isset($this->mo)) {2 x6 v9 K9 r% A% S' a: X
  30.       return $this->mo;9 Y$ s# n% i, a7 t; S
  31.     } else {6 n9 x1 a. i2 l! W4 k$ t
  32.       if (!empty($server)) {
    2 j/ v; d: N* _: p
  33.         if (!empty($port)) {7 ?7 ^2 t6 r/ k
  34.           if (!empty($user) && !empty($password)) {, N* X5 {& |% I% V: u* v+ q
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");7 ], h) k" Y1 l$ F3 W' A4 R( J1 |5 S
  36.           } else {
    9 ]: L  {: o. H5 g* \2 U
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");7 k/ C4 @( S1 s7 s  O
  38.           }
    4 @+ i0 S. u5 c& ]: O: Q) M2 Q/ n
  39.         } else {
    ( h* [' S$ Q# K+ V) k
  40.           $this->mo = new Mongo("mongodb://{$server}");1 p: L4 S! x( X! B  }
  41.         }( n$ G1 I0 J8 b
  42.       } else {
    ( M( l3 s9 o% e$ b+ M, u7 _9 f
  43.         $this->mo = new Mongo();5 v! R* C1 U9 v# ]) I8 m5 n2 b; T
  44.       }' x' o! H' N9 w: j# u9 B6 G! ?
  45.       return $this->mo;/ B: l( f/ F  s  _; t
  46.     }; K( Z0 N! T" l" T+ ^* F: w
  47.   }2 z5 a0 j7 x4 A% w/ k& T" R  l
  48.   /**5 D& ]: C+ V+ N: p( g9 r  V1 \0 H
  49.    * 查询表中所有数据
    # A% [; t* m7 u  ]  w4 E
  50.    * @param $table
    ) d, O2 r  h4 K  B" Q; c  ^
  51.    * @param array $where
    6 b+ {8 m3 ~9 B5 ^/ f
  52.    * @param array $sort
    ' a6 {& |$ H3 _+ A; p, j6 f
  53.    * @param string $limit% d0 U9 x$ {( e% }/ j  p% ^1 r
  54.    * @param string $skip
    . }. Y' d' x( L3 ]) q/ h4 x
  55.    * @return array|int
    8 m) j( N2 S2 m2 ?
  56.    */1 b' S6 k# C1 \6 N* V
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ; _; H. h% Z5 F; T: I; C5 X7 K
  58.     if (!empty($where)) {
    ) w/ A" _; u: @5 ]
  59.       $data = $this->database->$table->find($where);
    : I$ z, Y% V: D' G# i
  60.     } else {
    4 b8 Q  J1 o( Q
  61.       $data = $this->database->$table->find();
    $ S5 l" X* g4 e+ f
  62.     }" q1 m) h- l* K+ h
  63.     if (!empty($sort)) {* r( F1 K$ |) d; r
  64.       $data = $data->sort($sort);! B) }* h; B+ j1 x! m
  65.     }
    6 K3 h- D+ c8 ^3 i9 [
  66.     if (!empty($limit)) {
    + \7 c% o. ?* m4 l. V# z2 b. Q1 U
  67.       $data = $data->limit($limit);: w: ^7 |8 u4 H& n7 T! N; g
  68.     }
    ' ?3 I. t7 `3 C
  69.     if (!empty($skip)) {, A+ ^: t* ~9 }! L- Z+ D3 _5 h
  70.       $data = $data->skip($skip);! }3 N! E3 g, \* {! x& |0 S
  71.     }, Q' W# X8 q1 t; s: B
  72.     $newData = array();
    5 |, ?# v( l: ?/ S% d
  73.     while ($data->hasNext()) {
      ]) K2 R: }: r- \
  74.       $newData[] = $data->getNext();
    ; j1 d1 R& A) v
  75.     }) Q9 k, `6 ]/ h: y3 m/ H2 M* m9 |! J
  76.     if (count($newData) == 0) {( E/ u8 V7 {5 S* m, p) ~: z
  77.       return 0;
    1 r0 H/ y' A7 J6 a2 R3 d4 _1 N  b3 a
  78.     }
    & S0 d7 [( Z3 A% O
  79.     return $newData;7 G- f; o1 T& \) W
  80.   }
    5 w) k+ @: }! d( u& l& P+ g6 v
  81.   /**8 H# h8 t, P/ E8 Y
  82.    * 查询指定一条数据) z, l) b9 R: O7 j! N0 D
  83.    * @param $table
    9 D6 a7 I. E: B, a& i
  84.    * @param array $where
    # L7 k7 V2 v/ W" H1 o3 r
  85.    * @return int& U" u/ v% {) z; Q* p
  86.    */
    & X. `6 J+ u2 f5 j% m' f) I( ~" e6 [, f
  87.   public function getOne($table, $where = array()) {) \) @2 v2 N7 W  @8 t& F
  88.     if (!empty($where)) {
    / @3 x( X. s' z2 W( D
  89.       $data = $this->database->$table->findOne($where);
    1 _9 d. a# p& {2 v
  90.     } else {- G6 z# i, |' h$ ^: Q5 Z, M5 X1 n
  91.       $data = $this->database->$table->findOne();
    0 X7 d9 B3 z  J/ R6 T
  92.     }
    ( c- n: T" ]8 Z7 W$ G+ ^; L
  93.     return $data;
    : g# k- j. z' D) I: W
  94.   }4 ]5 F- t0 b4 i$ t0 J0 U
  95.   /**& @/ Y! x/ a9 y' u
  96.    * 统计个数
    6 j: Y6 [7 x6 J  X
  97.    * @param $table
    2 i6 G: f" }% ^; b" k, b
  98.    * @param array $where
    ) |, ]6 Z( `7 o, Q# m
  99.    * @return mixed  n; r" ~. ~2 }$ T4 n
  100.    */
    * o" ^+ _  o+ k; Z9 m4 c9 O7 L/ g
  101.   public function getCount($table, $where = array()) {
    , V$ m- j+ [/ t
  102.     if (!empty($where)) {: f& B: p8 |! W
  103.       $data = $this->database->$table->find($where)->count();1 I/ N, z  l5 x% F' M/ Z' N$ D% W
  104.     } else {
    6 F  a9 I1 W$ a7 K& O
  105.       $data = $this->database->$table->find()->count();. t& E* B* g# J- v
  106.     }: d, q+ p1 e3 u. w
  107.     return $data;& d* w+ P% [# R' K& a' _
  108.   }, Z+ e0 ~' i5 B) B4 X. B
  109.   /**
    2 D5 b4 H5 @1 g, w+ C
  110.    * 直接执行mongo命令
    ' w* T% b  {: n, c- W( o( {2 Q
  111.    * @param $sql3 a( K# S. ]( C- j" m' g
  112.    * @return array3 e2 P: u" l, ?* D& {5 b8 F
  113.    */
    / H( F5 N: }  F+ n/ C9 ?
  114.   public function toExcute($sql) {; g) o1 O' V, M3 ~: C9 W$ b
  115.     $result = $this->database->execute($sql);
    $ k7 F' P6 d+ e/ s9 o( H2 L
  116.     return $result;% {0 _* K- R$ Z9 N& X1 @
  117.   }
    ! h" u  J- r+ X9 ~1 A& N$ G
  118.   /**
    : M9 q2 h: I2 T- D+ B% G# u
  119.    * 分组统计个数
    . `  M4 M- }# J( N# f; {
  120.    * @param $table! t0 O( w2 g5 C* O( X
  121.    * @param $where: n6 }( v* p6 |1 Q: l7 p2 X( E
  122.    * @param $field& w  A* t! ?+ `
  123.    */4 W# l* k& S+ ^; `* W, U2 h" S
  124.   public function groupCount($table, $where, $field) {
    ; ^; b, ?5 k" ?- ?' i' u
  125.     $cond = array(
    8 p$ h" O( w; j- Q& e0 w
  126.       array(4 o( W2 V2 m1 |+ j9 V$ N7 |( [2 L
  127.         '$match' => $where,& @, b# Y% k8 C* S9 l$ y
  128.       ),
    $ G: Z1 T% Y; O7 `5 O
  129.       array(3 z9 n$ D7 h: I
  130.         '$group' => array(
    ' @3 r% {* t/ p8 o  i. M! H, c( G
  131.           '_id' => '
    4 c) Y% m: T: D5 V4 H9 h: `

  132.   Z9 u9 }0 o' n* `3 i
  133. . $field,% V' P* r" ~: M; M( @9 M- {! l# r
  134.           'count' => array('$sum' => 1),
    ' i" j' _$ }+ G& m. p& W
  135.         ),$ ~! r$ M! b# M8 Q- O
  136.       ),
    , F) d6 b, w* U& e0 s3 s) g
  137.       array(
    ) [9 W% f, d$ O. P6 q, J9 M$ O( r1 S
  138.         '$sort' => array("count" => -1),
    8 d! H- n0 P$ u8 P/ b
  139.       ),1 ]& g% }' F- Q3 j/ R0 E
  140.     );
    . @! y  T$ A4 N) S
  141.     $this->database->$table->aggregate($cond);
    . f% x  j0 z9 ?$ k% @
  142.   }# y7 S& v; M1 T+ @
  143.   /**. P3 B3 E0 T4 T8 F$ ~
  144.    * 删除数据. P: @! G0 h6 |4 |
  145.    * @param $table9 h2 ^5 e2 E8 ~- f0 `
  146.    * @param $where
    $ T, x( a5 J8 F8 f6 `
  147.    * @return array|bool
    ' C  @# f( r# v  q& `. _; g
  148.    */+ N9 K, C+ ^5 u0 `
  149.   public function toDelete($table, $where) {9 A7 F, W( ]; K. T  b: l
  150.     $re = $this->database->$table->remove($where);* e3 u, N/ u, \) ?4 I
  151.     return $re;
    ( ^) z! @0 i/ [1 A! Z: p# W
  152.   }# K% e' N: _; D# N- I+ S# x3 t
  153.   /**
    6 p1 f+ U5 m( [. ~: c2 _
  154.    * 插入数据# I' r9 Y' ^  a5 E# D2 ]
  155.    * @param $table: y- j& j5 Y9 H7 r# j( Q- E
  156.    * @param $data
    4 i0 }( B3 e: T6 @3 j, [
  157.    * @return array|bool0 c; ~& Z& N& |6 k: K; s' n* I- ?
  158.    */
    ! C1 ~5 L  I$ b. @5 ]2 \4 _. i
  159.   public function toInsert($table, $data) {
      q8 `$ [/ b) y) }8 x- ~
  160.     $re = $this->database->$table->insert($data);
    / i" O8 F$ p' P' r
  161.     return $re;' Q2 t: Y- t# o& K: O- t9 x8 J; i
  162.   }
    2 n. P- b4 @6 t9 p+ y. O0 g4 R/ d
  163.   /**
    # p. Y6 _& l: w, x: \( e
  164.    * 更新数据( f+ i$ z8 ]) |7 ]9 X& q, s6 U6 T8 \
  165.    * @param $table2 l8 O. E+ R) }5 C2 n4 ~, K
  166.    * @param $where
    2 I" }& ]. R" j  u& W! y. }0 `5 W: `
  167.    * @param $data
    6 s( V( X0 _: |
  168.    * @return bool) f6 \" k+ O! Y
  169.    */
    2 E$ I/ Z3 N) n8 Z0 E; R7 ^/ H
  170.   public function toUpdate($table, $where, $data) {
    4 w( S) Q# v* r' P4 R
  171.     $re = $this->database->$table->update($where, array('$set' => $data));% G& x3 [8 x" z! w
  172.     return $re;! x) m' X2 x) P2 g# u  ~% W: T
  173.   }
    2 p* L0 E6 ?! j% p! W
  174.   /**
    ' y4 P1 J8 ]& c1 Y  e  X" o" ^
  175.    * 获取唯一数据+ @: Q% o3 o5 Z; p, y2 {
  176.    * @param $table0 _5 F( j6 h  q- b2 i0 C) {
  177.    * @param $key# s2 o# E6 J0 n: {/ u& R
  178.    * @return array7 T% L& @2 d" y7 C
  179.    */
    % t8 k  p3 k/ f$ \4 c% N
  180.   public function distinctData($table, $key, $query = array()) {
    $ c) _% K' X$ o- t0 H( R2 c
  181.     if (!empty($query)) {6 F! u3 b/ f9 [6 T- l6 V7 }1 q
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    $ b* t% R% o# X( V+ g9 `9 S
  183.     } else {
    + E" r# A& G" }3 B) ~
  184.       $where = array('distinct' => $table, 'key' => $key);# ?0 O" m6 _, j+ o1 A" B6 _! N* C
  185.     }
    . b9 x' ^! D$ `. p
  186.     $data = $this->database->command($where);* _: O9 g  `8 ^7 p( W
  187.     return $data['values'];
    5 K# C0 J/ ^" Z& T- y) R, \
  188.   }7 n3 P5 q" u/ q$ A; u
  189. }
    6 A# q1 a' H' C( ~' o
  190. ?>
复制代码

. F$ T5 i+ c- ^- ~5 s- v" ?+ H$ F





欢迎光临 cncml手绘网 (http://www.cncml.com/) Powered by Discuz! X3.2