您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15763|回复: 0
打印 上一主题 下一主题

[php学习资料] PHP实现的mongoDB数据库操作类完整实例

[复制链接]
跳转到指定楼层
楼主
发表于 2019-3-9 02:49:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
" ~! ~' y1 t$ @% Y8 e模式自由。4 G; @2 @, ^9 r7 G
支持动态查询。
9 ?5 B% W, \  V. X% T5 B支持完全索引,包含内部对象。
9 i$ e: k" J# [6 K1 ~3 [支持查询。$ @9 p8 T: o& p- w8 [$ |
支持复制和故障恢复。8 h# b$ y7 d8 m) V
使用高效的二进制数据存储,包括大型对象(如视频等)。
) N( {1 K: q6 V7 |1 n) G; C自动处理碎片,以支持云计算层次的扩展性7 X, M4 ^& c6 b& B: O
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  H, O; K7 B4 k! V( f文件存储格式为BSON(一种JSON的扩展)% d3 R, t7 L8 k6 `
可通过网络访问

所谓“面向集合”(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
    ) @1 _5 _( r9 _" u$ N# h# u
  2. /**; X$ e- B  a" Z) X5 q
  3. * PHP操作mongodb数据库操作类
    # {: T/ @) `8 f: c1 a
  4. */
    7 C5 ]! B/ g6 `# D' P; {" B
  5. class Database {* p& _+ e& f. D: k1 E. s# q) |
  6.   protected $database  = '';
    : Z) L& D) Q7 |, O- p
  7.   protected $mo;
    + w. O) |* N- f  I8 ~
  8.   /**
    & x- x. M/ g1 k+ \
  9.    * 构造方法
    , U* K* r3 p; F3 ]7 f
  10.    */$ z0 o: q8 c$ j4 ^0 a6 h
  11.   public function __construct() {3 _. i' U. O: X# U; \3 {
  12.     $server = DBSERVER;
    " k! X/ T0 i2 f: A% P2 ^
  13.     $user = DBUSER;1 z) q& V# f" @# p
  14.     $password = DBPASS;
    " [& _6 p! U, D- ^
  15.     $port = DBPORT;2 H  t: h. t$ X. \$ p
  16.     $database = DBNAME;
    / o5 \7 F% y4 M2 S
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ' T" V) U5 u% z) i
  18.     $this->database = $mongo->$database;' x- ~' F- Z4 @; u8 R8 i
  19.   }
    3 V( Y) r, y' [* ?% T% _
  20.   /**+ S3 H3 |( y5 i& G8 m8 P
  21.    * 数据库单例方法, C" ?2 Z5 V: i( _3 m/ p5 d
  22.    * @param $server
    7 M* X# v. C6 p! R$ i
  23.    * @param $user9 v" E. K( ^1 t$ f* i: |$ t
  24.    * @param $password
    & k! c$ I  E+ s& C
  25.    * @param $port
    7 @. a+ T1 x  @- k- H
  26.    * @return Mongo
    : j6 |4 Q: f  w4 P2 q# M/ A  S& z
  27.    */
    " H6 \/ K( ~1 j4 ]
  28.   public function getInstance($server, $user, $password, $port) {
    " a) G$ }$ Q" I1 E/ [( s& `
  29.     if (isset($this->mo)) {
    5 m3 ?4 g/ \# T/ a
  30.       return $this->mo;/ z) }! e* @3 g( d
  31.     } else {9 N; @7 h3 x/ m  o( d
  32.       if (!empty($server)) {
    0 `5 L1 F  p% _7 L* Z, B
  33.         if (!empty($port)) {$ x$ `  Z( }" N# [! N! S
  34.           if (!empty($user) && !empty($password)) {
    . X( {, L& v5 G, L  D  }
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");: E0 H7 X# b0 g7 s" V$ N0 n5 p8 k
  36.           } else {
    " N% b8 |4 R: q0 R
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
      H, o- q1 e% a: H! w$ ~
  38.           }
    , I4 C6 l0 j. [% d  T% x- r3 y( q
  39.         } else {
      _! H6 e2 G; h* f4 p3 ^
  40.           $this->mo = new Mongo("mongodb://{$server}");
    1 I0 ~$ n% v7 P; s' O+ R3 s  v
  41.         }
    ( }# T1 H& H3 I" t8 l* y% v
  42.       } else {
    , Y. x6 X5 R7 @$ h& y
  43.         $this->mo = new Mongo();
    4 R5 U, i( ?3 V
  44.       }5 w4 H0 y! }7 z+ p5 p: g: ~" o
  45.       return $this->mo;
    3 b( ]+ {; I) X$ d! e
  46.     }
    9 [% i; `0 X. s" h4 Y
  47.   }
    $ Y8 E4 k# O% p0 O  X' k+ B
  48.   /*** _3 D& y/ B- ~# w% M5 ~; }- q
  49.    * 查询表中所有数据: Z4 {  j2 c# ]( E* `7 v6 [! ]
  50.    * @param $table
    9 g0 P1 ^9 T' U1 {- B
  51.    * @param array $where; r6 \: X6 J0 m' f' y6 L9 {! x' l
  52.    * @param array $sort+ j: y1 R5 K* K9 a$ f
  53.    * @param string $limit
    , A  ^8 C+ y3 W
  54.    * @param string $skip) r/ _) J7 |% @; W4 ?
  55.    * @return array|int
    ( A" o4 F  u( S' J
  56.    */
    ' n- U3 ^/ [( Z. y
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    " D+ V2 Y# A4 v( s! f
  58.     if (!empty($where)) {: s0 d! L: q/ I8 c) N
  59.       $data = $this->database->$table->find($where);
    1 m5 i1 ^7 i& S$ ]' M9 b! g1 n
  60.     } else {
    # D+ i! p, d* V3 M0 e$ z
  61.       $data = $this->database->$table->find();, l. u' B( n, U* }) ?4 a3 b' `
  62.     }" `7 y. r1 U8 ?
  63.     if (!empty($sort)) {  p: `, B- B1 Q' j8 a
  64.       $data = $data->sort($sort);: ]' m5 s( j$ c3 l  S
  65.     }
    9 w. N! U& Q  }- ~/ d3 R* v
  66.     if (!empty($limit)) {2 G$ O0 b% A8 C( k6 D
  67.       $data = $data->limit($limit);
    . W4 l8 [' y, ^8 q
  68.     }9 V% ]; k9 [' v0 W/ u  j
  69.     if (!empty($skip)) {
    + z* P- M! F( D
  70.       $data = $data->skip($skip);
      V" Y6 h9 y4 h
  71.     }5 Q# X! C9 J! a0 q1 r
  72.     $newData = array();) [$ m& `! v, M: [# |( G2 ?( F
  73.     while ($data->hasNext()) {
    ) b" ]' [0 |4 `! ~1 r  }
  74.       $newData[] = $data->getNext();
    0 d+ M8 a# [& J3 d& `* n5 Y% z
  75.     }
    , x) z$ l4 z* G2 L% b
  76.     if (count($newData) == 0) {3 e2 X( u% o% z- C
  77.       return 0;: Z# m9 F: `. D% h+ Q
  78.     }
    ' K9 t0 r- c8 r% n. ~
  79.     return $newData;
    9 x8 u0 g4 P/ ]) }* v9 D$ ?
  80.   }. b7 r9 S# ~8 I- |, A0 `
  81.   /**
    - d, k& p$ I. b+ U9 t8 [
  82.    * 查询指定一条数据3 C  a! }5 M# U: d3 G+ E
  83.    * @param $table
    $ ]7 N" t  @) F4 }" L/ A
  84.    * @param array $where
    ( Q: p' M8 M! I9 g7 O5 L
  85.    * @return int; d9 T  A' w: W2 I) H! q( R1 E
  86.    */, e9 M- f9 Y6 p
  87.   public function getOne($table, $where = array()) {
    + m+ w; E' C5 Y: k2 m( D8 v8 A
  88.     if (!empty($where)) {
    8 @, ~. o  Y+ F1 v' |4 }% {
  89.       $data = $this->database->$table->findOne($where);
    5 r5 x; ?+ s* Q. V& m: I2 ?
  90.     } else {
    : g4 z( p9 G$ b( v
  91.       $data = $this->database->$table->findOne();
    7 t$ E& i& l7 t6 A9 ?6 d; b& |, i
  92.     }1 ?9 x, L8 d3 u7 R: r4 j
  93.     return $data;
    3 }: R( _2 W3 j! U& G# v
  94.   }
    * W# R4 D) s* w- A4 F8 c4 U/ Q! B
  95.   /**
    - x. }4 z! U1 B8 D
  96.    * 统计个数1 `% p8 I, Y7 t
  97.    * @param $table! s7 ]$ l; I7 |7 o% L" J
  98.    * @param array $where
    # Y& \. f$ N9 |  @
  99.    * @return mixed* E0 a% r5 d; I' X. N* ], X
  100.    */: i- G' m- }8 U. W
  101.   public function getCount($table, $where = array()) {* t. x2 }+ G* E& ]' [4 |- |
  102.     if (!empty($where)) {" t1 v+ y' d# V) @1 r& u. i
  103.       $data = $this->database->$table->find($where)->count();
    $ K: P5 E, v9 p# e; x( t% c% I
  104.     } else {
    1 E0 _9 D- A+ f* |$ x$ }
  105.       $data = $this->database->$table->find()->count();
    , W) Z# d. g; [
  106.     }
    % P5 A& B; g8 _
  107.     return $data;) v) f4 a: R: d; m$ p/ U
  108.   }
    ) v( P5 A6 s3 Y& z* W, w' Q; O; Z- H* f
  109.   /**# G& |/ }% H6 W
  110.    * 直接执行mongo命令
    ! ^& P" e0 U5 X8 o
  111.    * @param $sql
    , I  S( P+ e. W( b: B3 u. t
  112.    * @return array
    & z* D. T9 ]6 t0 t2 k7 A2 ~. d
  113.    */+ T8 R: E  m8 `" C
  114.   public function toExcute($sql) {; a9 G$ A9 ~  e0 \
  115.     $result = $this->database->execute($sql);$ F1 a) g; B) b$ ^% d' \
  116.     return $result;
    8 n' S2 `$ [7 u. S/ {
  117.   }6 N, [0 L7 y* ~! \) C) K
  118.   /**  x& p3 s9 B, w( b% P& B) `8 W
  119.    * 分组统计个数
    3 A, {, b( c. [& a/ Y) [6 J0 N
  120.    * @param $table
    % w: F8 j& k, Q) [- e. k, e
  121.    * @param $where
    ; ?" {1 n& S2 v, `8 D
  122.    * @param $field* t0 s# a; U6 Q  U  h7 J1 ^
  123.    */9 Q  e, {1 c) U2 N+ @5 j
  124.   public function groupCount($table, $where, $field) {
    / N& P2 ]. W5 |  |1 e- b" T5 x
  125.     $cond = array(
    8 o' D( j0 \! {; j( z
  126.       array(
    # \; O" P' ^- b! i- f+ H/ {1 H
  127.         '$match' => $where,5 L4 [6 ?6 k: f! M2 L
  128.       ),
    * a& p* t' y7 u# j
  129.       array(
    , b' c9 G/ o" t
  130.         '$group' => array(
    & e8 p9 |- r6 f2 v: ^  \7 E
  131.           '_id' => '! |; c  B) M  c  E  \: N

  132. ( g0 I: k( f* w- _* V
  133. . $field,2 x/ Z8 o2 Q8 W/ r; a, e
  134.           'count' => array('$sum' => 1),8 N  H% W" Q' K- Z
  135.         ),
    # C1 b: k! a; K5 D0 p
  136.       ),! x$ V7 ]0 ?! }' N0 d) p0 C! ?/ B
  137.       array(
      b+ Q$ @: C5 @& I$ v$ H! F
  138.         '$sort' => array("count" => -1),
    7 d7 {5 `. u; U! h$ ^
  139.       ),: \: a# @$ y2 I+ ]: D5 z' E& i0 `
  140.     );# I" b3 j% Q! E
  141.     $this->database->$table->aggregate($cond);
    / q$ k: [8 q; e9 U( R
  142.   }
    6 g2 [4 J( U) M! I, p" }( j2 g( P$ J
  143.   /**
    6 Q4 E# j3 L/ r3 X
  144.    * 删除数据
    8 X0 b) b/ i; Q/ o
  145.    * @param $table
    , S" S4 f/ p; O4 E+ ~7 {8 w
  146.    * @param $where2 N% o, K+ J- p- b! B
  147.    * @return array|bool1 @# U6 @8 E( J1 k
  148.    */& O$ m3 {2 E5 E$ C
  149.   public function toDelete($table, $where) {+ e! X8 W- l/ _# b3 o9 r5 G
  150.     $re = $this->database->$table->remove($where);3 u, j$ Q( x0 W) d* a; Y. I0 u% E
  151.     return $re;1 s) P# i) C* d8 l% j7 u
  152.   }. W% R& A0 I+ W% A; k
  153.   /**
    8 {  E$ N' B( T8 h" p
  154.    * 插入数据: `# w1 g1 F3 h' _' X! }' A, s+ I
  155.    * @param $table' i, n! Y, |4 p* \/ w( }. W
  156.    * @param $data% ^; e2 D/ m# r! e1 U4 I! o# y/ |* i
  157.    * @return array|bool
    8 N! V; g( o4 X7 W7 U
  158.    */0 `, @4 |7 t3 P7 b5 [
  159.   public function toInsert($table, $data) {4 g- _% Z8 Z; P* h9 [% G
  160.     $re = $this->database->$table->insert($data);
    7 t5 P0 q0 D6 `6 v. H" `% \. s* N. ?+ P
  161.     return $re;
      {2 M4 B( u3 q1 ?7 L
  162.   }
    % Z3 R( v8 K2 @6 P) D8 G
  163.   /**
    ; V- @! H) H4 M' a$ x" n0 t
  164.    * 更新数据/ R2 C: Y6 m2 Q- }3 l
  165.    * @param $table
    - G1 y$ J2 j: s4 g
  166.    * @param $where
    2 C! }- Y% ^# A% o
  167.    * @param $data4 J6 m6 p% U) M  f7 r
  168.    * @return bool/ n! b; y: G0 U
  169.    */
    / r6 g6 U) d; A  C4 E1 r7 s
  170.   public function toUpdate($table, $where, $data) {
    " p" {2 g( _) m% y8 k3 e, x& v% }
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
      Q5 Y0 v! ^9 U+ b
  172.     return $re;
    - V6 t0 _2 Y' X
  173.   }6 K* z$ r& N& N/ u
  174.   /**7 G& D& c  M8 M( c# M
  175.    * 获取唯一数据
    * R5 w0 A) F- O& c0 b
  176.    * @param $table0 K! @4 p/ {; B9 `7 j, y
  177.    * @param $key# X+ g# n& b9 e+ o
  178.    * @return array' z7 C3 D, ]- Y* ?2 i' `
  179.    */$ `6 r5 \: \: l
  180.   public function distinctData($table, $key, $query = array()) {% o( i" z5 ]0 ~( F3 ^7 n/ {' L
  181.     if (!empty($query)) {
    ( i+ A9 J) D  A' z. C, w" n# B
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, N! O( q2 v! x  ^5 c0 a
  183.     } else {' }. {! u- {4 t% K
  184.       $where = array('distinct' => $table, 'key' => $key);
    3 D$ X0 c5 ~1 _1 f7 q7 t; x
  185.     }$ J. c' S* c1 P' O
  186.     $data = $this->database->command($where);: b6 s( f4 S7 \8 }# a% c8 n6 W
  187.     return $data['values'];
    $ \  D" z* T. n2 _" M' `
  188.   }$ y9 D8 {: b4 u" J5 \: Q
  189. }! F" `- e* o5 E) Z2 l' n
  190. ?>
复制代码

! U, ?. c: N% H8 ?- ?5 _4 n! a1 b# t  f& C  d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:18 , Processed in 0.074424 second(s), 19 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!