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

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

面向集合存储,易存储对象类型的数据。3 W9 N. D/ b, K4 Q
模式自由。: G. F* R, r$ u" @- d4 [3 T
支持动态查询。
2 A! k7 R. d% Q# E支持完全索引,包含内部对象。
; w7 W; I+ s0 n2 a3 n支持查询。
5 f& u  s" y# q  m2 {1 u支持复制和故障恢复。9 l' `+ K. I3 {4 b% ]4 i  `
使用高效的二进制数据存储,包括大型对象(如视频等)。% |( f0 U2 d0 I4 v: ]
自动处理碎片,以支持云计算层次的扩展性
6 v- B6 T$ m: g' U; r% j支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
% g1 o% g( I, k) `! J9 e9 h/ K9 z文件存储格式为BSON(一种JSON的扩展)- D, N2 ?# C% I
可通过网络访问

所谓“面向集合”(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# G5 ~) M4 ?1 w6 ~2 u$ w1 T: I; h+ P
  2. /**
    0 E( ]- a& X; o3 `, `+ l$ C
  3. * PHP操作mongodb数据库操作类& _1 W0 R$ b7 {3 W  T. U
  4. */
    : H& D% f6 H7 k
  5. class Database {
    1 l7 G. C' N: Y% k+ X' O
  6.   protected $database  = '';: L, M" V+ W) v  a4 u& |8 j
  7.   protected $mo;. g6 C5 F# R, L9 ]5 h$ u0 H8 z
  8.   /**$ M9 ]7 O) R. u- \1 Q3 m
  9.    * 构造方法6 m; N1 U# B9 E  o
  10.    */& K, Q+ O2 O3 y& g0 i
  11.   public function __construct() {
    ; F% o2 P6 Q' E. j- {, C' o
  12.     $server = DBSERVER;* B7 ]( a$ i% H+ U' K, f8 B
  13.     $user = DBUSER;
    0 P7 H. I$ ~% m, z! O
  14.     $password = DBPASS;' f8 S* U7 E. r; G
  15.     $port = DBPORT;
    & n) {3 O! t9 `" \, G8 n" c3 b
  16.     $database = DBNAME;
    , p% L3 N$ p4 @( U6 c
  17.     $mongo = $this->getInstance($server, $user, $password, $port);! R2 e6 S; j; u" D9 D& q7 I" |
  18.     $this->database = $mongo->$database;
    ; P1 e) M  D1 W, l) ~
  19.   }& D  i8 {4 D* e2 ?
  20.   /**6 F# C6 q& G2 w
  21.    * 数据库单例方法
    ; v7 L6 F  P( Z; L) B. G
  22.    * @param $server
    0 R( J+ @1 p8 f) [) _
  23.    * @param $user: ~* d% _& y2 d; b/ ^
  24.    * @param $password
    8 G0 M# K: o  C8 H
  25.    * @param $port
    + [9 z% f. E& \+ [
  26.    * @return Mongo
    & [1 [  p: A- R6 B# y
  27.    */
    5 X( ^. Y- G9 }# b
  28.   public function getInstance($server, $user, $password, $port) {
    - Z- M+ E/ C/ p8 r, ^' p
  29.     if (isset($this->mo)) {
    / d$ v& _5 F: o9 [( B9 c7 c
  30.       return $this->mo;
    * B9 c& ?" H; W; b7 F4 Z
  31.     } else {
    # C: D& ~  l& {* Q' ^
  32.       if (!empty($server)) {
    3 Z: C, p" f/ c2 z
  33.         if (!empty($port)) {) J9 D& }5 `0 \* n! S: c* W  m
  34.           if (!empty($user) && !empty($password)) {
    8 t6 U( }8 Q1 E( l) \7 T
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");! }8 g+ H# L' a& ^. \; w
  36.           } else {$ m; _4 b( R! Y& e; X$ o- \
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");9 g. u. g/ L, e9 f$ q
  38.           }/ q2 ~9 [( b$ C  S5 `1 s
  39.         } else {
    0 K) j, D3 e. S8 t- k
  40.           $this->mo = new Mongo("mongodb://{$server}");# d3 b* g" k' A: Z4 Y. c& o* H
  41.         }2 v& A) y' s- U/ q1 Q9 n1 x9 T. g% B
  42.       } else {( N6 ^" n5 A1 G; I8 _4 @
  43.         $this->mo = new Mongo();
    ( T: P/ z1 S& M% _& m& J# _  Z1 x
  44.       }
    * p- [) n2 a3 X8 Q
  45.       return $this->mo;9 u6 K4 A; r- W" ]
  46.     }
    6 c0 x  z, \; w6 _
  47.   }
    7 m* c3 ~4 U  m# [
  48.   /**
    9 W5 C) u/ w9 L! D+ Y, T. @' c
  49.    * 查询表中所有数据
    , F/ {( J7 h, @, x0 T! [6 V8 {
  50.    * @param $table
    ; F, J8 V2 m. R2 w5 B
  51.    * @param array $where
    : ]2 p9 v) u. `& l2 q3 u$ Q# Z
  52.    * @param array $sort
    # l( {% K  W) b( t: z
  53.    * @param string $limit
    / c* f3 W/ y3 w6 a% K3 P8 k) D
  54.    * @param string $skip
    $ {# Y7 ]0 h! M: t8 j; x
  55.    * @return array|int
    6 j& v% g! R/ }2 M6 [
  56.    */
    $ I4 Y! p# @% M' A
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {$ Y7 s, M3 x5 o% p! C6 p0 c
  58.     if (!empty($where)) {
    8 U; X# n" z7 p2 f& @$ s
  59.       $data = $this->database->$table->find($where);
    - }" K5 v5 Y/ }! X7 r2 H1 T
  60.     } else {
    ! ]+ l( @! g" f& W& W
  61.       $data = $this->database->$table->find();; U  p7 x+ D8 D/ M1 y4 J
  62.     }5 r: m/ q( k: S3 M3 u
  63.     if (!empty($sort)) {
    * X. \, o3 G: s- f0 N  R
  64.       $data = $data->sort($sort);
    " ^) |  c& x8 Z) A4 ?" m
  65.     }
    + b8 d1 U( w! F! p. _, H* I5 k
  66.     if (!empty($limit)) {) t( O+ n  G& Y. q4 c
  67.       $data = $data->limit($limit);/ R* j" u8 ?& ?) m- l
  68.     }9 w$ }# N7 J# F
  69.     if (!empty($skip)) {& w4 {( e/ v$ g4 Y# Q  i
  70.       $data = $data->skip($skip);9 ^. t4 P9 c  g: S, e
  71.     }& Y- o' e& E0 q% k" X- W4 Q$ h
  72.     $newData = array();) z* B3 T* V- o( k. Y1 {
  73.     while ($data->hasNext()) {
    1 F# s( l. p5 M3 ?7 q- Z/ z" |1 \
  74.       $newData[] = $data->getNext();3 e# M/ F* m3 r( v
  75.     }, I& J2 [( f7 Z- d: X
  76.     if (count($newData) == 0) {/ B$ S8 w( Y, U  s) P
  77.       return 0;
    , Q8 Z/ q: C6 |. R& @
  78.     }
    8 s) l) z! V1 H8 A9 ^$ @
  79.     return $newData;' p& x3 a7 {3 H1 @6 M9 |5 I
  80.   }
    + D0 Q( @; N9 t8 `' P
  81.   /**
    $ ^6 T# w. G/ W. _9 i% x
  82.    * 查询指定一条数据+ e1 ^% U- _9 O& [3 r
  83.    * @param $table! t$ M. O2 X  v$ j) h$ _" z" r$ T: h" F
  84.    * @param array $where( W& a0 _. Y9 ]; M: z* o
  85.    * @return int2 u% p, I6 Q+ F" C
  86.    */
    / f8 A7 L. q, G, ~! ~  Y. _
  87.   public function getOne($table, $where = array()) {
    , t3 h  a  u1 J. q8 h
  88.     if (!empty($where)) {
    ' J" P+ l. N1 L6 t9 r* i. H1 H
  89.       $data = $this->database->$table->findOne($where);3 N7 K1 S4 u5 T$ n" _/ A/ R
  90.     } else {4 [4 y7 B5 r0 l
  91.       $data = $this->database->$table->findOne();, ^, X2 p* a3 W) W5 U: r& f7 S
  92.     }8 p; p0 L' R4 K7 w: [
  93.     return $data;
    - M! R  r; D  \2 p# u0 k& r
  94.   }/ n" m+ S; M$ `
  95.   /**: M3 n3 L( M0 c- l2 r2 t' d
  96.    * 统计个数  X" s! ]: w9 c6 |1 T; }
  97.    * @param $table" K8 T. y. Y  X- K' n/ h
  98.    * @param array $where
    9 l$ x( @  Q( _; F" R. y
  99.    * @return mixed7 L7 H" C6 T( r: t# L
  100.    */
    6 P1 J; P" O! K
  101.   public function getCount($table, $where = array()) {2 o! `6 X* g+ x; N8 j
  102.     if (!empty($where)) {$ o- q( x1 A' c- i
  103.       $data = $this->database->$table->find($where)->count();1 `! r$ d* K* V$ C7 S
  104.     } else {
    # W5 `) ?9 K! H) k# Z
  105.       $data = $this->database->$table->find()->count();
    8 D$ \, p  T. b7 `3 X4 N
  106.     }
    - D9 r% K* j9 q' r9 n5 ?
  107.     return $data;
    ' T. H  A# l1 }7 g2 L
  108.   }
    $ x- Z$ t2 F( B- e8 d: S
  109.   /**1 B: w, v/ O/ ~
  110.    * 直接执行mongo命令
    7 P) v, Q' J( r0 I% }. d
  111.    * @param $sql
    2 [9 Z4 n8 d0 M. o9 r. t! T# ]5 }
  112.    * @return array. |, C5 l: {$ u% D1 s; P. S0 \
  113.    */! D+ Y9 o1 g3 O. t  s/ e
  114.   public function toExcute($sql) {2 g' h& D1 e7 V2 u- G$ |
  115.     $result = $this->database->execute($sql);3 U) h$ {# j" }" K& B) B* j  D- K
  116.     return $result;; E0 k% N$ M& q2 s! |
  117.   }
    7 {$ G5 V( U$ v3 z& ?. m, H# o
  118.   /**7 o. ~8 c0 a$ @) W5 @
  119.    * 分组统计个数3 X7 D" X% _$ F: l
  120.    * @param $table3 d. m/ }3 S5 I( l' G3 {
  121.    * @param $where+ b7 H7 d& J9 `6 d- u) q" u
  122.    * @param $field: c! z7 M1 v: K' ^" m1 j- S8 B
  123.    */) i3 m4 X. X& P  l% G6 E8 `
  124.   public function groupCount($table, $where, $field) {
    0 X7 d& h* `7 P. K% V
  125.     $cond = array(
    7 ^! F( Z* w0 x% ]
  126.       array(% [7 X4 h  X& `+ m- v" a
  127.         '$match' => $where,
      H, p7 u! B  e7 f0 D9 o' _
  128.       )," [5 G* |( s0 q8 @2 e: D
  129.       array(
    % |- z9 y5 n  ?# z9 M! F( m+ O+ K  [- Y
  130.         '$group' => array(
    ' x2 s  S& c- ?% ]0 v
  131.           '_id' => '
    6 ?( K, |* Z% u

  132. ! C/ C. o( }; p5 ~3 P: n7 ]
  133. . $field,
    " F7 I2 C: |9 ?
  134.           'count' => array('$sum' => 1),) Q& s* f7 h- t
  135.         ),
    1 H  B2 d4 y0 p- Y5 A
  136.       ),
    8 Q. f. N$ l& E% ^) n
  137.       array(* ]3 y& `& u! T" Q8 @5 T
  138.         '$sort' => array("count" => -1),
    ( y- X% z, x% l" Z9 X
  139.       ),
      B+ l4 |. q; b& I
  140.     );; p; D8 X& K6 k
  141.     $this->database->$table->aggregate($cond);
    $ f) n0 P. o3 [3 e% _0 T
  142.   }
    8 m) `2 @( C9 M
  143.   /**3 A. _9 s6 X, o, F9 b
  144.    * 删除数据
    # H# n0 f' t/ h% W- N1 s3 s: ^* r2 u
  145.    * @param $table( ^% H; n' m, X! T$ K
  146.    * @param $where0 \, G' P+ B  O+ V* ?7 q
  147.    * @return array|bool
    5 F2 i& T5 D7 g- E3 E
  148.    */
    " p1 d: K$ s9 \2 S
  149.   public function toDelete($table, $where) {  S: }( @* C& f! y1 v+ s
  150.     $re = $this->database->$table->remove($where);8 @$ z: ?( w# w
  151.     return $re;
    ; d$ |3 \: x8 ?! i4 m* \
  152.   }6 ^9 ]7 T/ _9 |1 F( e
  153.   /**2 z9 v( x6 v5 a# ?5 u6 x
  154.    * 插入数据
    % k0 a6 G2 n6 O) S9 w
  155.    * @param $table
    * j( N& N: k! N. A0 s
  156.    * @param $data
    " O% U  e9 y- i" g
  157.    * @return array|bool
    , @" ?/ d' {/ O9 S9 U+ C! f1 Q
  158.    */
    7 P. d2 J* ?( F4 h  R
  159.   public function toInsert($table, $data) {& R9 \, p. `5 o  R$ J( A8 e
  160.     $re = $this->database->$table->insert($data);( m. a1 K9 f+ I7 `1 ~
  161.     return $re;
    ' P, U/ q1 t% U( m; }7 R5 r
  162.   }2 r4 s- H; j: [3 P9 \% O' O0 r
  163.   /**/ B' l9 o( }( B# {* r
  164.    * 更新数据
    8 h. z* v/ t* M# u
  165.    * @param $table
    & D6 v/ j7 a. T, T( n
  166.    * @param $where! J. L7 b5 I/ B& ^2 s3 ?; m2 s; x
  167.    * @param $data4 W) z$ W6 c$ }: s: X
  168.    * @return bool
      s1 t" B- |" `5 n5 ]
  169.    */* J0 u0 o: e' {( e* y# {& B
  170.   public function toUpdate($table, $where, $data) {5 d1 B0 x% ?& t, J
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    : e, F) H8 `) O
  172.     return $re;
    ) q) N5 X- |, X  H; {$ d( x& U
  173.   }5 x" e! E2 k$ X
  174.   /**
    5 x' b3 g- v& m. D
  175.    * 获取唯一数据( K# F3 u- ^: O: J, l: m9 v
  176.    * @param $table* O4 j/ u! |* ?$ m- T
  177.    * @param $key8 N* M( V. h$ j8 R- A1 u/ [& \
  178.    * @return array- [' t/ X5 T. H& x* \
  179.    */
    - j' L7 a6 O; a8 J! ?: D
  180.   public function distinctData($table, $key, $query = array()) {" S0 k" J4 b: }' s9 S
  181.     if (!empty($query)) {
    * }1 V* v; r; x$ B9 `$ |
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    1 I- m1 B% x% |2 e3 ~! B# W5 }
  183.     } else {
    5 |# j5 Z) `! h
  184.       $where = array('distinct' => $table, 'key' => $key);
    ) k) Z1 @# \7 ^4 D
  185.     }
    , w" [5 j9 `* k6 H! T0 a, R1 n5 j; |
  186.     $data = $this->database->command($where);; i+ r( E9 c9 z, X& R- U
  187.     return $data['values'];
    4 J/ H& t9 _6 M2 C2 i6 |9 N
  188.   }
    ) ~) d# q& p: T: J! x. O5 ]
  189. }1 o2 z6 p; [) `, |- }6 k/ }
  190. ?>
复制代码

* }, V  R! X  c5 Z+ {" m' f( ~, I1 T
% Q4 d" |, X. b& [




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