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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。0 O; k6 z* ?; P6 {5 o- t
模式自由。. Z& l) x7 M8 A1 f3 t( R5 H
支持动态查询。9 z. A) s* M/ l. e4 w* [& }3 x
支持完全索引,包含内部对象。1 v4 a, K- y$ o
支持查询。
& U* O8 ^. F% l7 Q支持复制和故障恢复。4 E/ n3 u; b3 b5 B5 h
使用高效的二进制数据存储,包括大型对象(如视频等)。
! M  ]& `, Q* }8 F! Y自动处理碎片,以支持云计算层次的扩展性
- M+ a4 r6 E( |! L% y( d: e+ O支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
$ I# _3 ?8 g: t9 B9 g文件存储格式为BSON(一种JSON的扩展)/ l) ~6 z% D5 a5 U% u
可通过网络访问

所谓“面向集合”(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
    8 @4 t# L6 ]; ^* g
  2. /**. g! A0 O  h: }" D1 A$ z! k
  3. * PHP操作mongodb数据库操作类3 |. F( N  h9 B0 i4 M7 h
  4. */1 G! k7 W) d& K- `: _5 s
  5. class Database {8 w9 E7 ], C# g; W9 U* m
  6.   protected $database  = '';: D& }4 R4 O2 u' Z$ v
  7.   protected $mo;5 l+ g; b7 O2 P; v
  8.   /**
    % o' r' q8 Q5 k& ^  c
  9.    * 构造方法" u. T% f: k1 N+ h' z
  10.    */
    1 e/ p8 m9 J5 E$ f# l; F, {% p3 d" V
  11.   public function __construct() {0 N. J9 y+ \, E; \7 h! h" C
  12.     $server = DBSERVER;/ P: L* G" d) G
  13.     $user = DBUSER;3 Q" @" T" f) q( S
  14.     $password = DBPASS;
    % e8 i8 k1 l/ b5 s
  15.     $port = DBPORT;
    9 X) ~1 S, y) x# Z0 w" H
  16.     $database = DBNAME;, E/ u2 o. ?0 D2 B/ l& m4 W- F, w
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    / Y$ n! G+ N  i. v0 U! M
  18.     $this->database = $mongo->$database;
    9 \/ G2 E9 L  k- k$ ~: l
  19.   }
    5 I; }- T$ W8 Y' L
  20.   /**9 M# {. O& ~9 e8 A
  21.    * 数据库单例方法
    1 \' }* I" i; q- ^+ ~
  22.    * @param $server
    7 E! r0 w, f; j) E# Y" ~) j( f7 F
  23.    * @param $user) |+ V8 g# ]" ]2 Z5 X
  24.    * @param $password
    & _- q3 I  }* ~: _# q# s
  25.    * @param $port9 ?  q. u9 A- @& E! M8 Q
  26.    * @return Mongo& v0 N5 V8 v+ l9 L$ `$ S0 B
  27.    */
    $ j$ [4 m: D! x: o& G7 ]
  28.   public function getInstance($server, $user, $password, $port) {
    8 O% S4 m7 g) M, @
  29.     if (isset($this->mo)) {
    ) v- `; Y/ k- }5 M' e
  30.       return $this->mo;& {( `9 ]$ ~" H* l) P3 d4 V
  31.     } else {# u: q% X' Z5 }+ Q( {
  32.       if (!empty($server)) {7 H5 W$ T1 s. S; m
  33.         if (!empty($port)) {. F3 b! O) {0 i  M* ~0 m
  34.           if (!empty($user) && !empty($password)) {
    8 F' W/ a( o: `+ @1 Z- [
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ' P( g& M8 q. }
  36.           } else {
    6 A' ?6 l8 p  S3 H
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");- M7 b2 g: h) c2 d
  38.           }9 j) i! i0 U: A( y: B" |
  39.         } else {: M# @4 _; K" `: m. ?( n& x1 d
  40.           $this->mo = new Mongo("mongodb://{$server}");
    1 k) Z% ?: s6 B! Z, V8 A) l, H
  41.         }
    7 @/ v# D- M3 A" S5 j+ ~! Q) n
  42.       } else {
    3 ?/ Y- C1 p" [% ?0 r( k
  43.         $this->mo = new Mongo();
    % z9 ^% N: p/ H  ]8 @5 J5 A! X6 R
  44.       }8 s2 }4 o" P: C! K3 E3 \
  45.       return $this->mo;% F4 H- T8 k8 `7 e; D' _- y% T
  46.     }
    5 O1 ?  H( z0 c
  47.   }
    / [& i, _( N$ @
  48.   /**
    - X, |9 e! N$ X* y3 }, _
  49.    * 查询表中所有数据& S' [1 D$ k  i9 m/ B- m
  50.    * @param $table
      `- v1 [7 a4 {
  51.    * @param array $where
    . l" |& i: n: a
  52.    * @param array $sort, h' Q8 Y" U0 p) V* j
  53.    * @param string $limit( W7 z$ l: o9 |
  54.    * @param string $skip
    ) s6 v" c8 n" Z$ Z7 e/ \* Q% P# _* Z
  55.    * @return array|int. l6 c: g) X' F& \7 G/ x7 M$ ^& d
  56.    */5 Q( `2 _9 D- B% B
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    1 t' r' E7 S* j( k' @& w6 ~, {+ i
  58.     if (!empty($where)) {* {: t+ T8 y$ k& y6 b5 f* g
  59.       $data = $this->database->$table->find($where);
    0 y- D7 ]7 F* I$ Q
  60.     } else {
    ; @1 ?3 u1 A* C# m
  61.       $data = $this->database->$table->find();, ~+ A) Q& x* v* f" D
  62.     }
    0 P! K! u9 I' v4 |
  63.     if (!empty($sort)) {
    " ^6 ~( A6 z- R$ Z0 g
  64.       $data = $data->sort($sort);
    # O# R4 i9 X( Q
  65.     }, ?8 V% r3 f7 P( y' }/ S
  66.     if (!empty($limit)) {- j1 T% b9 _3 d& N
  67.       $data = $data->limit($limit);! V2 D- c* ]% h6 P( L$ l8 S
  68.     }
    4 q" s) |+ N9 I% _& K, ~3 R
  69.     if (!empty($skip)) {1 ~+ I. z7 X3 h0 c) l6 ?
  70.       $data = $data->skip($skip);1 [, M1 ]% J3 Q" i  U; X. N
  71.     }
    ; ~6 O8 H: p! L! D+ j
  72.     $newData = array();- i1 y; N! \, m
  73.     while ($data->hasNext()) {; k" g/ P* H: c) {
  74.       $newData[] = $data->getNext();
    ' T6 x" m; u9 y3 r; E
  75.     }
    ! d: t5 k! ]5 @, t2 c
  76.     if (count($newData) == 0) {. \7 U+ _; }1 C- S
  77.       return 0;
    7 [$ X* {8 R" L1 S0 {/ B( w
  78.     }5 i2 ~& j/ l" Y6 m
  79.     return $newData;( V* v# @* k1 p( s' |# M
  80.   }
    ) E; |- ]' k7 J" l) B
  81.   /**# m, w8 `1 Z! u. M) T. ~* N& l4 o
  82.    * 查询指定一条数据
    5 y0 \, M1 E/ o; b9 T- Q3 Z
  83.    * @param $table
    , L# h# ~- T2 O+ Z# ^: x
  84.    * @param array $where
    & c/ x) _, Y& _  x. b/ k7 y: c
  85.    * @return int3 I2 D3 _3 ?3 L3 u3 Q
  86.    */; t7 t- d2 h" d' ]
  87.   public function getOne($table, $where = array()) {
    " y4 z( n2 O: ^8 I
  88.     if (!empty($where)) {! l7 K. |5 G% g0 L# b
  89.       $data = $this->database->$table->findOne($where);% ~* o+ i% `& ?+ \9 z+ j$ c
  90.     } else {, w0 T5 z" b8 a
  91.       $data = $this->database->$table->findOne();
    ; f$ l+ [4 h6 r' Z2 N# q/ g: d/ {
  92.     }( }2 |: v. `( S5 n
  93.     return $data;2 i, a' C# j, K6 v) F
  94.   }
    6 d; O- p- Y8 B
  95.   /**
    9 e( @3 T6 q3 c, }. S4 K$ H
  96.    * 统计个数
    / n1 H5 r2 Y! T
  97.    * @param $table
      |# T" Q) o9 k% k- `% k
  98.    * @param array $where
    9 P1 r& M0 {& `- X# b5 g
  99.    * @return mixed6 e# T0 n( L' l* F# g/ l. ?* S
  100.    */5 z, Z2 \# L: o4 P  }* T
  101.   public function getCount($table, $where = array()) {1 e/ t& U' U/ o; N$ p
  102.     if (!empty($where)) {! D* H5 w# m& Z" g( h+ J  C4 Q1 c
  103.       $data = $this->database->$table->find($where)->count();
    " z6 D3 E* ?. D8 l
  104.     } else {% F$ a( [5 A& R7 p* y- b9 u
  105.       $data = $this->database->$table->find()->count();
    / A+ y) ?3 E) W6 w7 Y- t- n
  106.     }8 z, I8 Q7 W; E6 g( q+ s
  107.     return $data;
    6 T9 I9 ~, |7 n; {2 @
  108.   }
    8 Q# N- D* o& K' T
  109.   /**: o% w. _* r! V) V- h0 a( D  `# l6 Q
  110.    * 直接执行mongo命令' J, ]3 @" f3 G# j
  111.    * @param $sql) Y3 ?4 X) N+ b( f7 W8 ~( r, T
  112.    * @return array1 j6 p0 W  k3 r
  113.    */& g5 Q8 h8 d0 \9 O) l" N9 C
  114.   public function toExcute($sql) {0 h' o9 Z! R( ^( E2 N7 y" z
  115.     $result = $this->database->execute($sql);# N) Z0 C1 {2 ]* m3 b
  116.     return $result;
      O# t$ D8 G. f! V
  117.   }
    & O2 i; J( f& J& T8 _
  118.   /**
    # n& g3 R" u( V+ C
  119.    * 分组统计个数- x# A; g0 M% q2 O
  120.    * @param $table
    & v, O6 @% m! A* b$ k5 w" p
  121.    * @param $where6 [# ]- `% {2 T% K. \
  122.    * @param $field3 t4 K; u. E9 \  J, m
  123.    */2 P) o  n9 {; u; R% K
  124.   public function groupCount($table, $where, $field) {, ~7 |1 I$ G* r9 J
  125.     $cond = array(
    ) [& O6 e# q' v, k
  126.       array(
    ) e: U& u8 r* G( R& [. U8 z8 F, r
  127.         '$match' => $where,+ }; k' Z6 ~/ c: x1 g0 ^
  128.       ),) |; u3 J2 _0 M  Z2 Z  P% u
  129.       array(
    ( p( _; N2 C' n+ M/ O& v
  130.         '$group' => array(
    % o) N9 W# J2 `
  131.           '_id' => '; z& R. G" e3 G2 F

  132. ! J! z5 O/ U! [7 I4 J* }; J8 U
  133. . $field,$ V: {. F' E5 n5 i5 D+ ~5 d
  134.           'count' => array('$sum' => 1),
    * q7 }  e" D: g
  135.         ),
    : B0 K  A0 H2 T
  136.       ),
    # v7 y7 [$ }" f$ f0 K' b! A' y0 M
  137.       array(* \1 `! l- s/ }8 Z- O, _8 x* P, v
  138.         '$sort' => array("count" => -1),
    0 N" y; E+ m) v( \6 k' ?' L
  139.       ),  U: ^2 l3 l; U; T" j
  140.     );* r% S3 K8 M, E* J. Z
  141.     $this->database->$table->aggregate($cond);+ G' P/ p* z* C& V& V
  142.   }
    : }7 V9 T( ?7 @% `9 T
  143.   /**$ J1 ]9 O. ~- [- b
  144.    * 删除数据0 U! Y( C" r+ x" p' ~- w) b7 B7 N
  145.    * @param $table
      s  ?6 X! r% D. P
  146.    * @param $where
    1 r2 X4 r0 n  m
  147.    * @return array|bool7 K: h6 J; \) _1 d
  148.    */
    : }  i& R! T5 @" i* D4 f" W
  149.   public function toDelete($table, $where) {  F5 |/ f2 I. t# W  G9 o
  150.     $re = $this->database->$table->remove($where);
    8 e4 {0 ~! B* x4 ?6 l% U$ {" Y
  151.     return $re;; E) W) f* Q4 d9 C
  152.   }
    : |* K, D" f0 u/ y7 g
  153.   /**
    . N6 j8 h5 y% A% S
  154.    * 插入数据  L4 Q9 e1 f( S* \* ?
  155.    * @param $table
    ' R3 j' ]/ T8 t& u. P
  156.    * @param $data8 r+ `+ m+ \( d: |  l1 I
  157.    * @return array|bool4 G& J2 m. _+ e) ?7 c0 N
  158.    */9 e1 n6 H+ M& T
  159.   public function toInsert($table, $data) {/ X, ]6 t5 P' A+ t. c
  160.     $re = $this->database->$table->insert($data);
    3 Z* O! S0 \9 h+ T
  161.     return $re;
    ' s7 i1 v2 }  \7 t
  162.   }
    ) u* f8 m5 x, h0 A2 @, B- d$ S
  163.   /**2 s0 W4 Z. j* W- w4 Q( M
  164.    * 更新数据2 D6 O* b; z' j
  165.    * @param $table9 n0 f  b% k, ?! H( ~( q7 q% m
  166.    * @param $where+ T) T. |/ m5 B; c
  167.    * @param $data$ I! ?3 A; s' s: k2 R- j- f
  168.    * @return bool
    6 v9 T% W8 }- H$ l; l' w! D
  169.    *// U; B. R& l2 N2 V
  170.   public function toUpdate($table, $where, $data) {
    $ u- F: q$ @1 {  y+ P5 m
  171.     $re = $this->database->$table->update($where, array('$set' => $data));& k3 C# z! ]# S& Y5 w# b
  172.     return $re;
    1 @( c9 r9 ?) z9 H& t& Z' l3 T, X
  173.   }# G; U4 W" G- Y$ _0 V
  174.   /**
    3 M, U; ^) V  w7 {
  175.    * 获取唯一数据
    7 e% I8 [/ ?4 e$ r: [2 ^
  176.    * @param $table4 v0 W& }7 n% C1 e8 t4 {
  177.    * @param $key' T' D! ?) G7 ?) G( P. M* a
  178.    * @return array* W0 c/ C2 j5 Y6 n0 M/ Q
  179.    */) }$ c' G. Q* C# C; C
  180.   public function distinctData($table, $key, $query = array()) {
    2 c2 a0 F2 U  n) B. P9 R8 D
  181.     if (!empty($query)) {/ ~, _; B' X  ?+ h2 W
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);' Q2 `+ m7 e2 w1 @: Z" _  w
  183.     } else {6 k5 X  {& V4 B. E! l# C& d+ d
  184.       $where = array('distinct' => $table, 'key' => $key);
    / l- H7 ^; ~2 S! o* W# t
  185.     }
    8 l8 l( M" A4 G; @7 ?
  186.     $data = $this->database->command($where);* e6 E/ |8 `8 C2 D- u0 t/ Q
  187.     return $data['values'];+ @! e. p% ]  y! d
  188.   }: j7 @% S  r& G1 M
  189. }
    9 T' X) k+ U$ V
  190. ?>
复制代码
: j8 n; @6 {# @  m2 ]4 s. }

3 Z0 U8 z  ]7 @+ l: @0 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:47 , Processed in 0.063344 second(s), 20 queries .

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