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 j' O! G$ l( F  M) K& F& C7 p1 l# h2 c模式自由。% _& b* }5 u0 h& O4 R- c
支持动态查询。
6 }* x$ R. K6 _3 ^! f* m( G1 l支持完全索引,包含内部对象。
- H) M4 `. N) @) K5 x: n' Q6 Q( d$ Z支持查询。# b1 e- @, j9 |4 K$ l! E* v& s
支持复制和故障恢复。; |# Y' ~4 r9 |/ C3 D
使用高效的二进制数据存储,包括大型对象(如视频等)。! S% G4 K# e6 [, K
自动处理碎片,以支持云计算层次的扩展性4 e. p! a; S: k1 k5 V. v
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
) b# p% N' |, t' l" K% q文件存储格式为BSON(一种JSON的扩展)
) _1 E& A8 x) {  G/ ?. U7 X可通过网络访问

所谓“面向集合”(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+ K9 w8 Z. p) B6 [
  2. /**& u. r0 v+ T& J- D1 ~' b$ t
  3. * PHP操作mongodb数据库操作类
    3 k, d; I) `  M7 Q& u
  4. */
    ' V( q2 H# c8 |3 v- N9 J
  5. class Database {
    . t1 k8 D8 D3 _' @( ~0 z: T
  6.   protected $database  = '';3 h6 C1 @1 n: W4 J$ ~& f
  7.   protected $mo;" p. U6 g2 y, l* z* s" U/ f
  8.   /**. F6 ^+ T" D5 F: S. m. `  Z, ]
  9.    * 构造方法
    5 {! ^- e8 A, B$ G6 b0 t* v
  10.    */
    4 ~% U5 Z. ]! ~+ u5 `) H0 D
  11.   public function __construct() {. |1 J, p! g, ~+ J7 o0 b. N
  12.     $server = DBSERVER;
    9 M4 L3 M' \0 e0 }( z' U
  13.     $user = DBUSER;
      b. ]& t" x' R" P# C
  14.     $password = DBPASS;" x# u+ x6 M6 }6 S8 [" ], A
  15.     $port = DBPORT;
    3 p; f5 w; g" l2 U1 u  I; j9 ]/ V7 |3 `
  16.     $database = DBNAME;6 A, l1 p4 j5 w# O" ^% D  U- g
  17.     $mongo = $this->getInstance($server, $user, $password, $port);7 b, J( i; F) B# ]
  18.     $this->database = $mongo->$database;
    " r0 k$ I. B, n5 F
  19.   }' }3 N" E9 Z/ @8 f* R6 Z
  20.   /**2 F* s: f& [* D
  21.    * 数据库单例方法
      [! B: h- i5 p1 U1 G( v$ K
  22.    * @param $server
    8 Y% e& |/ o1 e9 M$ M9 @( L
  23.    * @param $user$ w4 |; w  W1 \, @( I2 l. s9 s
  24.    * @param $password
    # c8 B: s5 o9 |6 `5 L
  25.    * @param $port
    ; t" H. ^+ V% _5 j# B0 y3 @
  26.    * @return Mongo
    3 _  p) O- c0 }5 i6 |+ l. _) A; p9 c- a% ~
  27.    */
    . F! _/ g& R0 Q
  28.   public function getInstance($server, $user, $password, $port) {* L2 h$ D1 t& f' E
  29.     if (isset($this->mo)) {7 e" E& X& x! y  Q; T+ z2 W2 B
  30.       return $this->mo;
    ! F! g, L0 K1 e
  31.     } else {
    4 O% N! M! W0 H' b6 F
  32.       if (!empty($server)) {
    $ ?9 _! f6 C3 n) k2 h# b
  33.         if (!empty($port)) {- T* c& z2 I! @4 Z
  34.           if (!empty($user) && !empty($password)) {
      o) W( N* x/ H" S  a" U- r1 Q. Z
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");& ?5 B" w1 Y+ H' V
  36.           } else {8 ?& }* s8 `* z1 L$ L
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    9 P/ D, b$ W3 \3 p  k' \% Q0 E: a
  38.           }  X+ X2 \; ^7 l
  39.         } else {
    8 |/ K7 f% L5 G$ l
  40.           $this->mo = new Mongo("mongodb://{$server}");
    . c5 q" q, I) P9 Y+ F& e& a& _
  41.         }
    , }  p5 w7 s* B! f- Y
  42.       } else {, U4 z* z6 \/ e* \
  43.         $this->mo = new Mongo();
    ' K0 b! t! U8 l; A5 w
  44.       }4 I2 D* C  R, U' H4 E' e
  45.       return $this->mo;( w4 `, \0 M4 ^# z5 Q* O  P
  46.     }
    / c  o$ d6 @; y1 I4 Z* }( `) f* G
  47.   }
    / V4 M$ y7 b) o$ k* i4 G3 H
  48.   /**( b* \1 d, [; q) x/ B2 U* z! m
  49.    * 查询表中所有数据
    5 Z0 z/ l) G4 X, f  R
  50.    * @param $table/ d' Q: v# i' x5 w9 J
  51.    * @param array $where
    ; q) O  z9 G# \: P% Z
  52.    * @param array $sort( T/ Z. _1 o& ?! M2 M7 d
  53.    * @param string $limit
    % X/ M' S& O" F0 S0 m
  54.    * @param string $skip; l. m( [" R: l1 S/ A$ c
  55.    * @return array|int
    # `9 n1 R( h/ `. B( Y- s0 M+ c" x# Y# X: N
  56.    */0 @( N4 ?$ p  y6 G  U
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
      D& u8 s5 k" `1 e3 R
  58.     if (!empty($where)) {( T* i& p7 I% V1 {
  59.       $data = $this->database->$table->find($where);
    5 u+ S6 g: B  B0 [- ^7 O2 {- z
  60.     } else {% t# d' Z# e0 h6 M! R3 b
  61.       $data = $this->database->$table->find();" Z5 R2 S4 H  Y! z, C
  62.     }% m$ x3 X" X3 g5 U
  63.     if (!empty($sort)) {. T( s1 X' }, }$ S" p
  64.       $data = $data->sort($sort);* K: Z0 x: @# ^
  65.     }1 Z$ T( @/ B9 @( L1 {( F0 K8 x5 c# c
  66.     if (!empty($limit)) {
    ! T: r6 }/ U) P8 s2 H
  67.       $data = $data->limit($limit);7 O, ^2 E% B9 }
  68.     }
    1 V/ T7 ~* }. P8 L1 y' @4 @6 F4 d& M# l
  69.     if (!empty($skip)) {
    6 y* e, k$ y8 l% V
  70.       $data = $data->skip($skip);
    $ H$ e4 p$ B; s6 }! g
  71.     }! V; C9 M5 w* q$ K
  72.     $newData = array();4 e& ~: ?' y, I( g1 z
  73.     while ($data->hasNext()) {  E! t' T0 f) t* f# F$ G& w
  74.       $newData[] = $data->getNext();
    5 h5 \" N% D) p
  75.     }
    8 R6 Y* P; b+ `2 c
  76.     if (count($newData) == 0) {
    . }3 O; r" N# A
  77.       return 0;% y; Q& a, k. c: P7 i. C
  78.     }1 _: P2 U1 V  W
  79.     return $newData;
    7 A. O% `( M( z( [5 ~
  80.   }" @5 \. v+ g4 K1 Y
  81.   /**
    8 {$ d5 H3 T% B  o) _4 g/ v  {) @
  82.    * 查询指定一条数据
    2 B5 w; a8 k5 Y/ |% j
  83.    * @param $table; V, p. G6 m0 ^
  84.    * @param array $where- g( s! e( i" _6 y" S
  85.    * @return int
    - E& X0 |9 K  w0 L1 }7 V& o: K
  86.    */& G. q4 c9 c+ B! ?! c6 ^$ f
  87.   public function getOne($table, $where = array()) {
    . d! L( v4 X# T8 d  Y1 W
  88.     if (!empty($where)) {
    $ A% \8 f$ V1 z9 g
  89.       $data = $this->database->$table->findOne($where);6 q& S# N6 t& j) ^* ?. z5 L
  90.     } else {
    + |) ]" ~/ P. v, L0 i1 n
  91.       $data = $this->database->$table->findOne();) x) i% E- d! ]3 e% `# I
  92.     }" Y. y6 Y. ^% M' }
  93.     return $data;0 Z  Z" M6 J- m% G
  94.   }7 X% E- z0 z9 W" c$ m
  95.   /**! A  J) x, W6 T- c! `; [3 n5 `' m
  96.    * 统计个数0 L( n1 d, W" f9 U7 R7 s
  97.    * @param $table
    ( {8 \! @7 T$ s3 N
  98.    * @param array $where) J' T, G- P% S3 {- M8 c& w
  99.    * @return mixed
    0 D. N* o) P8 Q- x
  100.    */
    8 @( t' p- p6 I' O. D7 Y: U
  101.   public function getCount($table, $where = array()) {
    - l# u1 J# @/ r% ~  Z
  102.     if (!empty($where)) {
    " M2 P5 S7 V9 ?( A9 c& v
  103.       $data = $this->database->$table->find($where)->count();2 v8 _, M4 C( o9 t) h; G
  104.     } else {1 Y& E: }( \  F2 j* F
  105.       $data = $this->database->$table->find()->count();( h; k2 W! Q# F1 G; v9 @
  106.     }) @+ ~) g3 x6 d/ W
  107.     return $data;
    ' Q) H# r# G" Z& ^0 ?. j5 R
  108.   }( L. o% `& ~/ u  J/ {. V
  109.   /**
    ( s, `2 r, ~! y/ |4 t9 |$ a4 P7 L  r
  110.    * 直接执行mongo命令
    / ?5 y7 |  E# _7 r9 q
  111.    * @param $sql
    ! W$ b8 r2 o" M7 C+ A/ y5 u; y
  112.    * @return array- C8 e( `8 O( X1 I* D
  113.    */
    + [) Y/ S5 @; c1 p; {/ l
  114.   public function toExcute($sql) {  P* z# b% c" c& l) i
  115.     $result = $this->database->execute($sql);
    7 j/ a' h! t; h, h
  116.     return $result;/ k: g6 G9 c+ {' n+ k' j' B, U6 i
  117.   }7 [4 y! A$ t- k1 w) d
  118.   /**9 {+ ?$ `8 Q+ y5 h
  119.    * 分组统计个数" J+ ]5 m8 H. o5 b5 [" ^
  120.    * @param $table+ m% I* i  P! M9 P$ t
  121.    * @param $where
    ; g! I: C! n& I  W. i0 C2 q: n4 D
  122.    * @param $field4 P1 V  A% v) d* s3 G1 z9 Y0 c
  123.    */
    ' ?+ W; |) J- ~/ B" @  ^
  124.   public function groupCount($table, $where, $field) {8 @/ J% O* d) \, R. p: b; n
  125.     $cond = array(( d3 y2 q3 b% I4 e8 J- Q
  126.       array(! y# X; X- j2 L# X' ^9 x
  127.         '$match' => $where,
    . U% V8 N% o1 T8 Z' H! `
  128.       ),3 F" e9 H% m* e
  129.       array(9 }* W; O) P/ v7 H9 K
  130.         '$group' => array(" P2 J, C: G- q; z% [
  131.           '_id' => '1 p4 ]7 I! Q0 W$ w- E, W
  132. $ Q7 i+ [0 @/ A# j' V! M4 ]8 d
  133. . $field,+ p& V" }% G1 G) T
  134.           'count' => array('$sum' => 1),
    0 E6 N' L* b- z' F5 A" M- B, R. y
  135.         ),- ~6 t8 J6 @6 o, Q, }9 ]; N
  136.       ),
    0 R( E4 z  N7 U- H) ?# l% d$ H
  137.       array(
      [' E2 D* y& e8 B  ?
  138.         '$sort' => array("count" => -1),, [8 m. J  A! X% R
  139.       ),, T! K) n+ v# P# Y: K6 H" x
  140.     );+ f" h% ^+ w# O
  141.     $this->database->$table->aggregate($cond);
    # E1 |7 G+ U; {
  142.   }4 @# d) o9 m9 ^5 q. R
  143.   /**# Z& H, f9 K" I8 U3 r" P0 ^( X' ?
  144.    * 删除数据) A& P+ o6 V' F
  145.    * @param $table) c- f$ n$ r: y: ~
  146.    * @param $where) A3 L6 A9 O5 U: v* @
  147.    * @return array|bool# C% j  k' ]' h3 O- n5 U* t
  148.    */# X6 B# S0 K) z4 j4 i! u* g
  149.   public function toDelete($table, $where) {
    6 a- j% G$ b" `! C0 X, _4 R9 Z' H2 e
  150.     $re = $this->database->$table->remove($where);. S8 \. C8 p$ @
  151.     return $re;% u0 l6 h9 T' A5 e. K  x. D
  152.   }  p1 D5 v3 n* O1 i5 o2 t' L
  153.   /**3 {9 ^* ~: f) _. c: e
  154.    * 插入数据
    # E- S5 ^' Q1 @% X$ z' t) o# x; C
  155.    * @param $table  E* n" t  O$ e1 P/ l" C
  156.    * @param $data
    * B& k# R# h& K( W' |3 p. l
  157.    * @return array|bool
    & s0 E( ~3 l/ ~; M
  158.    */
    ) Z, |$ W4 H% h6 |, a' S
  159.   public function toInsert($table, $data) {/ \' C& D4 ]' l$ e1 {
  160.     $re = $this->database->$table->insert($data);6 V5 H" T+ h- A
  161.     return $re;+ X$ ~0 Z! f# ^+ j" \4 I
  162.   }, ?6 n- o2 x5 d4 e5 |$ w
  163.   /**
    1 ?+ b7 n& w% I' S) f$ l4 r+ z$ Z
  164.    * 更新数据: o$ C; U' v5 E# t
  165.    * @param $table
    ' a6 [0 a& K  }1 a. i
  166.    * @param $where  U- \/ F6 L; m0 _9 m9 u
  167.    * @param $data# c1 j! T9 u( F9 i* ?& Q
  168.    * @return bool
    : i* G& q9 h  [3 e9 e
  169.    */
    2 p; N9 P. |1 A2 Y/ W0 g/ o1 w
  170.   public function toUpdate($table, $where, $data) {6 v) [1 `: w* f; B
  171.     $re = $this->database->$table->update($where, array('$set' => $data));0 v( }, h, L% R9 U2 ?$ i
  172.     return $re;
    8 M( i$ f0 g$ a8 Y2 H* V0 w! I
  173.   }2 l- D* x7 v& B8 `7 x0 I$ M
  174.   /**" ^- R+ Z+ _/ ^& u3 H$ w2 H6 M
  175.    * 获取唯一数据' p# e4 R; A- X( p8 z( l3 J0 V
  176.    * @param $table* N4 L4 c2 d+ j
  177.    * @param $key- f& _: h1 _% o& f- D/ l! [
  178.    * @return array
    2 \6 k: X$ C: S# o/ E! H( ]- V
  179.    */! g3 z+ x+ F5 ]. S9 s
  180.   public function distinctData($table, $key, $query = array()) {
    " t9 V5 p4 n, A* N% T/ n1 j, v
  181.     if (!empty($query)) {% t- i" u: T3 d7 Y/ {4 |9 u
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 b7 z+ g# F7 b4 e& b2 c6 y# B
  183.     } else {5 e0 P4 \5 {+ `1 J  X% |- N2 H3 Z
  184.       $where = array('distinct' => $table, 'key' => $key);& ~' q5 P: X! f
  185.     }
    2 x. u$ }+ F! _) g* D
  186.     $data = $this->database->command($where);
    " e. Y" _. R7 E- D! I& U5 C2 E; s/ L
  187.     return $data['values'];$ k% i' M, W( {' z7 z
  188.   }
    ! U) w8 l4 I- v( @1 w
  189. }& N! J- o1 Z- f6 I9 C
  190. ?>
复制代码
: S- }' b$ w& |# j

% S+ f6 W6 H3 |% V' x




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