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最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

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

面向集合存储,易存储对象类型的数据。2 F' p! L/ J* \
模式自由。- K- c0 I7 b( q7 b, i! R: W
支持动态查询。
3 s2 S& a% ]$ T& @6 J支持完全索引,包含内部对象。1 y2 t5 F# r$ e
支持查询。
7 m6 R" E: o& L4 Y6 P8 z支持复制和故障恢复。9 i9 F  q9 v4 o* U! w  ]6 B
使用高效的二进制数据存储,包括大型对象(如视频等)。" x9 D! c+ q9 R1 }
自动处理碎片,以支持云计算层次的扩展性& P. Y+ l* @2 u8 S" t' I6 |
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
0 z& G$ s. I5 h文件存储格式为BSON(一种JSON的扩展)3 b* p! ^, j9 d
可通过网络访问

所谓“面向集合”(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  d" H- k+ l/ ?( R- o% u  |; i7 I
  2. /**; K  h5 O9 R( q
  3. * PHP操作mongodb数据库操作类
    + |( q% ?3 M5 G5 r9 a7 g' F
  4. */
    6 H" s4 f# A' X  m4 U( e
  5. class Database {% L% ]4 {$ G$ w% V4 j3 Y- _2 ]" ~* X
  6.   protected $database  = '';: S4 m0 \+ a6 H8 a8 R$ c
  7.   protected $mo;9 l6 [& [  g/ V* p- U: J' n. {
  8.   /**0 N, B+ f) {; Y3 C- t) {
  9.    * 构造方法! _, H7 U: s. e/ d# w3 g! [5 S
  10.    */. }( w2 \$ Q2 @7 o$ S; J, p; V
  11.   public function __construct() {  b7 f& v2 ~3 B! v$ L! F
  12.     $server = DBSERVER;
    . V# w! c4 K! e3 h9 d
  13.     $user = DBUSER;. Y2 M5 N: M1 @: e' J+ j6 H8 s
  14.     $password = DBPASS;
      a! O2 Z! D" H+ d
  15.     $port = DBPORT;1 n- ]* A1 M( K' q  g2 F& x
  16.     $database = DBNAME;
    , {4 g+ f& {5 K1 |0 V4 {/ |
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ' u9 t* `" Q4 ^' d% i
  18.     $this->database = $mongo->$database;
    / c% |( S% Q- o6 f
  19.   }% s+ k  K1 K2 H/ B
  20.   /**$ R6 X) [" x* K* K! V" ^, R
  21.    * 数据库单例方法+ T7 _" r, @2 O1 ?/ q3 v- q* Q0 p+ B
  22.    * @param $server2 J/ M# t; I/ B: _& z4 V3 c& z
  23.    * @param $user
    : o4 _' w  d: t, T
  24.    * @param $password+ k0 N% L1 a$ }7 n
  25.    * @param $port- o7 x: o5 s6 i# n2 K6 [
  26.    * @return Mongo6 Z6 S" b! [! o3 f: J5 J! n
  27.    */
    2 h- ]1 J5 H; z
  28.   public function getInstance($server, $user, $password, $port) {
    * s0 V* A9 W$ d0 j' L( K" O6 I! M
  29.     if (isset($this->mo)) {
    ! ~4 E' x4 ^& S5 O7 S% T
  30.       return $this->mo;
    1 V3 R1 a2 S. q  |' M
  31.     } else {
    # l3 n6 \. F7 z/ ~2 `. K
  32.       if (!empty($server)) {
    $ b7 N& v! q8 V2 c4 b4 A
  33.         if (!empty($port)) {# m: q: Q& u7 s  s/ G$ p
  34.           if (!empty($user) && !empty($password)) {
    # }. {: O5 t# U5 @2 L6 E3 a
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    + J( [$ ~$ v- j7 Q% c5 @" P
  36.           } else {
    ( W  @1 X8 ^: W* Z: c& n# d0 P
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");  |) `6 Q# E7 h, {5 n
  38.           }
    * G3 `) C2 K3 f
  39.         } else {
    7 L& ~9 X' o3 |% Q4 g
  40.           $this->mo = new Mongo("mongodb://{$server}");
    3 H0 W7 d2 \7 b" [/ l
  41.         }: Q: L. [( _, x
  42.       } else {& t" u& d* E8 Z& _; J
  43.         $this->mo = new Mongo();( ?+ {6 ~9 i/ [6 `/ I$ `) J
  44.       }2 |, c/ G6 M& W; A
  45.       return $this->mo;9 Z: V1 B# m1 `( T
  46.     }" A3 E. {  Q9 Y- [( a
  47.   }
    7 K6 v* N& o8 O7 [; D0 g
  48.   /**% P* d/ I" c) k5 M: U  E& j5 l
  49.    * 查询表中所有数据
    3 {! q. [# u- n( P
  50.    * @param $table% W8 e0 c( C; z5 [1 b
  51.    * @param array $where
    2 E9 d0 ~" J$ L  G
  52.    * @param array $sort
    % ?* {0 c1 ~$ D: o7 e% ]2 g3 d& r8 D  V
  53.    * @param string $limit" B8 U' Z1 M0 N0 t1 w1 G6 F2 l" I
  54.    * @param string $skip
    8 g% q1 r7 [6 w. j2 m  J
  55.    * @return array|int3 N& G( v0 W. L0 z+ u7 G2 i& E
  56.    */. p; a. s, q  Z6 S: J
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {; C$ h2 Y$ k+ K6 P* @
  58.     if (!empty($where)) {
    0 x+ f; o9 r. @
  59.       $data = $this->database->$table->find($where);
    - K6 x, T) [; X3 v- Y; q3 P. v3 a
  60.     } else {) J3 ^( L7 S3 d9 X  n
  61.       $data = $this->database->$table->find();
    " I6 Y: g4 O3 ^3 T- E! j
  62.     }# y  m( u( |  |2 x' \, _" y4 f* k5 S6 p
  63.     if (!empty($sort)) {
    $ i* t! r1 D- n9 x
  64.       $data = $data->sort($sort);  x, p' R+ T7 D5 V/ z  s0 f
  65.     }1 }- l9 g& k. u
  66.     if (!empty($limit)) {! F' Y1 y, M; L
  67.       $data = $data->limit($limit);
    $ }2 E5 X% k7 j; g
  68.     }
    % v. @3 w: p" L" n8 G( N
  69.     if (!empty($skip)) {  n: ?; ~3 ?+ b/ P6 f# i
  70.       $data = $data->skip($skip);
    / l2 e! P$ }. j
  71.     }* ?0 x" A- c# T6 ^3 |* A
  72.     $newData = array();
    $ i3 I; z0 y! E+ K1 x  v* `3 u
  73.     while ($data->hasNext()) {
    ' {# u* P# ]% P2 t. s
  74.       $newData[] = $data->getNext();
    ) B5 W: h9 v' Q1 f
  75.     }
    ! ^1 F) I  b. P3 `3 n* M
  76.     if (count($newData) == 0) {) M; g8 x, u, o  ]9 s3 Y% h- l
  77.       return 0;
    : X" M9 M# }1 F0 Z
  78.     }8 A) [" q1 J" D8 e% B
  79.     return $newData;, o) q/ L- U2 p! p
  80.   }
    % \9 k: H* i' ?5 _
  81.   /**  J1 e; R" \7 |; o) g. c
  82.    * 查询指定一条数据
    5 i/ i/ A0 {+ `
  83.    * @param $table
    3 g( P# o6 p- K% \! n/ d
  84.    * @param array $where
    ' }0 b' Z/ _$ g% Y# S: d
  85.    * @return int0 U; ?) ]* j6 {2 r7 |: S
  86.    */
    0 M  R( P! a* G6 }
  87.   public function getOne($table, $where = array()) {- l4 m+ c* A+ T
  88.     if (!empty($where)) {  \# M: A2 w( I) y$ E3 E
  89.       $data = $this->database->$table->findOne($where);% z2 ~7 F8 A' X" D* n
  90.     } else {
    ' V- h1 l% [; a" D( \5 W
  91.       $data = $this->database->$table->findOne();+ i* _) r/ Q7 {5 j* z- M8 Q
  92.     }7 Y- R) f4 P6 l2 Z$ p
  93.     return $data;
    , O6 A/ q1 J2 A) F
  94.   }
    + x6 v  x- N7 |7 v
  95.   /**8 K; F; |& g+ E) u7 C; k: V7 |
  96.    * 统计个数
    7 z; X1 @& T6 c& h
  97.    * @param $table
    6 N1 _4 E% D1 c2 h" |# T4 S
  98.    * @param array $where* _7 \" B6 v- M" @# @
  99.    * @return mixed
    " H. t  ~+ L( v  P2 l& O
  100.    */
    6 _! f1 E6 r+ S/ I  a: T4 V0 u
  101.   public function getCount($table, $where = array()) {
    / T2 _( J6 m+ C, @6 J) T- D
  102.     if (!empty($where)) {- y$ \$ h0 O" S* g  k  L! l
  103.       $data = $this->database->$table->find($where)->count();/ a5 R; c' V% z3 S/ R. |
  104.     } else {( K, n: m' c0 B  }/ I; h, G
  105.       $data = $this->database->$table->find()->count();
    9 Z$ C2 X5 ]9 A9 W* G' O* K7 Z
  106.     }& q! [& {+ h9 l! Z1 d  S
  107.     return $data;/ |) Y) H0 E4 V4 s, g9 z
  108.   }  }$ x( M, S) C+ |% t
  109.   /**
    ! A) V7 X# d& {- |, A1 b3 x% M
  110.    * 直接执行mongo命令
    * e; s7 K/ o3 b9 d6 j( u9 }* w
  111.    * @param $sql
    / S0 F8 \: W5 t! c% V
  112.    * @return array, {! [1 p) h8 h/ ^; o6 ^
  113.    */
    1 R) r6 ~  C$ `3 N0 y1 G$ G
  114.   public function toExcute($sql) {8 T) C5 G( B: Q* ~4 m6 k
  115.     $result = $this->database->execute($sql);2 I+ f) W4 a9 i, J5 _6 l
  116.     return $result;
    , P; a( |' F; m9 ~8 G1 F
  117.   }6 n7 g. X6 A5 ]# j3 @8 ?" Y, J
  118.   /**9 [8 i  z4 g3 e2 v9 a% N: G
  119.    * 分组统计个数
    & S7 W3 W5 `: t* ^: U
  120.    * @param $table
    5 O7 w1 Y# K/ K
  121.    * @param $where
    / j8 F$ f/ A) s
  122.    * @param $field
    5 f5 e, b& @+ n3 g  @/ P; ?
  123.    */. k+ b& K3 Y9 C6 k# ^
  124.   public function groupCount($table, $where, $field) {9 `+ {- w4 _: r* g% L. C
  125.     $cond = array(: z  Z! I; h2 w- g  Y
  126.       array(
    ) |& n8 _7 W7 q6 V+ M; X- v( L
  127.         '$match' => $where,8 j- k9 G- Y# S  H, x, X3 f
  128.       ),# W5 e' U% P$ u9 m
  129.       array(7 v# @, b( C# B$ o: a9 q. W
  130.         '$group' => array(9 A4 M) h/ B+ ^7 E
  131.           '_id' => '* W, b( w& p- L: V. m7 o+ `
  132. # B" @: z7 `* b- u+ Z! [! L6 o
  133. . $field,# Z' B$ K9 u, @: ~
  134.           'count' => array('$sum' => 1),0 Z) K6 _/ x5 ~6 }; i( x
  135.         ),
    - l+ @8 t# u( y" D, F* p: p
  136.       ),
    + Z, _( X, f' y. E
  137.       array(
    , c1 b( S- `/ ?4 Z9 [2 m' a% T
  138.         '$sort' => array("count" => -1),' S4 l. T5 L9 J2 r9 w4 W/ d
  139.       ),
    ) J  L9 B% C& A. Y, N6 c
  140.     );9 P. \" H$ v$ j# T  r4 f1 c
  141.     $this->database->$table->aggregate($cond);+ H% \) {) f4 [4 ]! l0 a
  142.   }
    + i; ?( y! I" H
  143.   /**
    2 p/ H' ~5 A( J# _! v( w4 S
  144.    * 删除数据  r2 T! S5 A7 f2 C; w. S
  145.    * @param $table1 U8 S" Y  ~3 u+ p; D5 t) _
  146.    * @param $where
    8 Y* X$ e0 @6 R* v8 i8 e
  147.    * @return array|bool
    . A% U* ?8 o; M& `# U; ~7 P
  148.    */
    ; w' z6 J+ u) b
  149.   public function toDelete($table, $where) {
    9 F- t/ c( [$ y. A9 z3 k
  150.     $re = $this->database->$table->remove($where);  x- ?( I. K$ S7 l3 M/ n
  151.     return $re;! g3 b4 s4 _' U% k* u* k, L
  152.   }
    " Q1 K2 G( Q2 Y0 D( A: w" ?
  153.   /**
      Y7 X! J1 J4 z# K; L
  154.    * 插入数据
    1 l, ^" o$ s2 Z1 F" v. P
  155.    * @param $table
    ; s! j$ Z( }; l! @! C
  156.    * @param $data) x2 X/ I7 F) E* y3 l
  157.    * @return array|bool2 O3 I: F9 B9 H
  158.    */" p: A, F+ S( Y/ I
  159.   public function toInsert($table, $data) {4 E3 l: X8 f% Y& J! o  ?: |2 z
  160.     $re = $this->database->$table->insert($data);
    6 R8 R2 M' {' n
  161.     return $re;. C+ Z+ e. x4 j/ F" h
  162.   }
    9 M1 f# A" @( P6 E7 _. z
  163.   /**6 m& @3 P6 Z* H, }) K) y  I4 u0 _
  164.    * 更新数据
      V& y5 o  ~- I* c8 a3 J
  165.    * @param $table
    / x2 S, b' y7 T2 F# e
  166.    * @param $where
    2 M7 r! O2 p, M" _& d& I+ f
  167.    * @param $data
    6 f) g9 D- w! |& t% t% g
  168.    * @return bool
    ; t) |$ C* r, W! d& T. {% o
  169.    */
    2 O" Z8 S; Q* o9 l1 r
  170.   public function toUpdate($table, $where, $data) {: t% r$ l* U! o) r. t1 O+ n
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    - U2 Q. f- z( R% g5 A
  172.     return $re;
    - C$ U3 W/ S4 o  ?4 c
  173.   }
    , g+ W. J  Y4 |2 ]! d' w: U. j
  174.   /**
    9 d' r7 W! ]/ X
  175.    * 获取唯一数据% g4 K3 b7 Y5 y+ _$ j) D# g3 G, _; ]/ v
  176.    * @param $table' f" C4 m, m1 y1 H  V
  177.    * @param $key
    $ {6 T2 b' D% s$ S' C0 a( ?
  178.    * @return array/ S' f; }3 x  Z; K) t8 e# _
  179.    */
    # a, W/ X8 G' _: X; M
  180.   public function distinctData($table, $key, $query = array()) {
    1 J' v$ O( m5 i" H# D* K* X
  181.     if (!empty($query)) {- k! p( O- ?4 X
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);7 I3 S6 q' X8 A" K
  183.     } else {
    % J/ S* E0 q1 g7 P
  184.       $where = array('distinct' => $table, 'key' => $key);
    3 R! [; B6 Q# I
  185.     }
    ) W* d! l% p) B+ B
  186.     $data = $this->database->command($where);
    ) d7 _' ^; \" L* A: m9 f
  187.     return $data['values'];
    3 t  [/ F* y: y6 I: f
  188.   }
    1 V- ]: }! k  r4 k  L
  189. }. n( d6 b7 \- @+ i, e$ u0 u
  190. ?>
复制代码

' B( M4 A/ {8 l' ^5 a- d, x4 t; S' r4 N9 R% M& `( w





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