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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
6 M: W0 a0 v. u, h6 u. h模式自由。
# i  Y$ [! X, q. O支持动态查询。+ f1 ?; g# U; T  W3 S, ?) {
支持完全索引,包含内部对象。, j$ D& K  A) H
支持查询。
' e2 Y2 w+ [6 C支持复制和故障恢复。
; Q) G! e6 P) c5 O& ]" F) W7 ?5 i使用高效的二进制数据存储,包括大型对象(如视频等)。
1 u# N. O. J6 j# z& x) \自动处理碎片,以支持云计算层次的扩展性
  M( Y* x- [! X5 A) V支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
* B( E5 R) d4 J( u文件存储格式为BSON(一种JSON的扩展)9 ]( [! B. [- ^
可通过网络访问

所谓“面向集合”(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' e9 _" R  Q4 [# \7 I
  2. /**7 e( S# Z# ]1 |0 f! h1 c4 P5 U
  3. * PHP操作mongodb数据库操作类
    ' L' @1 u3 L& R
  4. */" v( I3 X; U/ ^. A  H0 H
  5. class Database {
    ' V) O/ C, Z% J1 k" F
  6.   protected $database  = '';
    1 V# }6 A5 v: [9 J& v3 ]
  7.   protected $mo;5 E3 t1 ~- a5 Q) Q, I
  8.   /**
    8 j; R/ h1 [8 |  }. M; Q
  9.    * 构造方法* M6 `( t0 C3 q( `5 Y/ ^7 w
  10.    */
    8 J3 T5 q- P( @' y4 q  Z) U
  11.   public function __construct() {
    + G% S: J9 l6 _+ V& @; K2 N
  12.     $server = DBSERVER;5 v9 K- I* z8 o! F2 @6 ?
  13.     $user = DBUSER;
    # \; H2 U; X+ a( g
  14.     $password = DBPASS;- e9 P1 f  u2 A8 `) h
  15.     $port = DBPORT;
    , M- o2 A! l* _$ ?3 t2 w& G
  16.     $database = DBNAME;
      p/ R7 F+ t, l- S$ ?5 m% D
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ! C" ~3 L' Y  T: L+ d4 o  Z
  18.     $this->database = $mongo->$database;
    . s% v. p1 C& N
  19.   }
    , l: F' {2 ~8 q' r
  20.   /**
    ' M+ A2 j% [( B/ |5 `- O
  21.    * 数据库单例方法% ?6 A9 l/ W- W' S' _
  22.    * @param $server: Q$ t8 M: b2 F' \
  23.    * @param $user
    ! ]9 C: p, U7 y, |1 r
  24.    * @param $password
    & h: Y+ O2 s; d; v
  25.    * @param $port& L1 e' Q% q6 ^( F4 e+ R& A
  26.    * @return Mongo' r9 B' R/ T' ]2 a4 N
  27.    */
    ) `7 x' g2 j* s( ~# n
  28.   public function getInstance($server, $user, $password, $port) {# d0 Q3 g: G8 Y# r
  29.     if (isset($this->mo)) {
    * S3 \) ^, l" N, L% ?+ q
  30.       return $this->mo;; A& C, q' e& `& O( O0 x- f/ N1 T1 V
  31.     } else {1 O6 q8 `' @: [& I! h) T& O
  32.       if (!empty($server)) {3 s# e/ t/ G9 h
  33.         if (!empty($port)) {
    * w5 r6 K: [5 f; E8 e8 Q  u
  34.           if (!empty($user) && !empty($password)) {& s: G# t, z; s/ u& a7 v5 G
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    1 v# `* [1 Q) i1 p, w* T
  36.           } else {
    : U! x6 H* y9 l  J
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ! \$ }6 F: N) S/ R
  38.           }+ v+ a/ P; H) g2 y' q: X
  39.         } else {) y: {8 m5 c8 J7 l9 |& v6 I
  40.           $this->mo = new Mongo("mongodb://{$server}");
    . @  T  J0 y) o& g2 `/ I2 q
  41.         }
    : z; v  Y% J- h, n/ Y1 {6 l( v
  42.       } else {7 @8 \5 q- X9 Q  \  L
  43.         $this->mo = new Mongo();
    2 J7 o- \: _/ I4 |% Y( c1 b' M' n
  44.       }9 V8 ~' U8 b0 W/ s( E
  45.       return $this->mo;) Z; w3 ?  h  @: H- C- v, p
  46.     }* f! M% _2 C7 X) r& T
  47.   }  {6 G, q2 Q; |# b8 f
  48.   /**  r7 \/ `: p% `4 z2 v3 F+ }
  49.    * 查询表中所有数据4 U6 w5 S8 F& ], i. O
  50.    * @param $table4 x4 q7 `! n$ [) t# Q. \
  51.    * @param array $where) h$ ?' M+ u. i. K; O+ V1 w0 E( i4 @
  52.    * @param array $sort
    9 }3 q' Y. z+ L6 Q' s. L2 e
  53.    * @param string $limit
    + n/ r% T4 L9 R9 \0 w2 y
  54.    * @param string $skip- P  Y$ ~% y; l& ]7 m5 U# `  d
  55.    * @return array|int) L3 Q1 r% N! m& J$ f
  56.    */
    0 Y( N4 Q7 J2 ^  F
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {; G. _: \' X: e# _
  58.     if (!empty($where)) {) s( n1 n# M! P! o0 d
  59.       $data = $this->database->$table->find($where);
    9 f+ \# Z5 ]6 R9 p9 H2 b
  60.     } else {: R" _6 C: z6 }7 a0 [$ J
  61.       $data = $this->database->$table->find();
    5 `5 b! t' Z7 h! v( j% d& @
  62.     }- _; {+ i: d- g' b: ^
  63.     if (!empty($sort)) {
    * f* @: M! J* r; {
  64.       $data = $data->sort($sort);! I7 N' H8 P# ~, {5 ^7 ?
  65.     }
    8 i2 K  c& f+ j, C3 w* y
  66.     if (!empty($limit)) {4 W1 P+ \) z5 t# F2 L
  67.       $data = $data->limit($limit);+ V1 [% d, a! z1 ^
  68.     }) [, r( i* [7 q7 [
  69.     if (!empty($skip)) {
    ' r! U" }) N: \/ D, @
  70.       $data = $data->skip($skip);0 `; q" R" |, a8 t  z" G
  71.     }! B" ]2 o$ n& `; P
  72.     $newData = array();
    ! k3 `% I+ w* V' ]" i7 B+ h
  73.     while ($data->hasNext()) {. I. T/ G2 f* w8 R; }. ]9 A7 x# e2 j
  74.       $newData[] = $data->getNext();$ O! z- Z/ A3 ?1 j" d7 p
  75.     }% P7 A0 Z5 @8 g
  76.     if (count($newData) == 0) {
    6 y' m% D8 N4 j! U% H
  77.       return 0;
      F) B8 {/ g! W# K2 q) o- X! [8 n
  78.     }; Y1 U( {1 F5 [- U/ B7 ?
  79.     return $newData;
    ; ], g1 g( _" w5 w  f5 |/ T
  80.   }5 T6 J7 y* n: W" V, @$ m: a, c. [
  81.   /**
    $ p3 G6 j1 b- ^; u( Q! Y
  82.    * 查询指定一条数据
    ( m9 @, _# d$ F9 P" y3 m- ~
  83.    * @param $table
    ' r: L$ P$ \$ V) A
  84.    * @param array $where
    ; Z4 u( ], q0 h/ j" y7 Q
  85.    * @return int
    ) A" `  i5 T, _7 K9 N& T- r
  86.    */
    + z9 P7 `# t7 g5 R9 e/ R
  87.   public function getOne($table, $where = array()) {" t& O4 L2 O( j& X
  88.     if (!empty($where)) {
    " d; O5 U9 H$ C8 u$ g
  89.       $data = $this->database->$table->findOne($where);
    8 i9 c9 S0 \0 m6 X6 L
  90.     } else {
    7 M  L4 w0 N1 L, _
  91.       $data = $this->database->$table->findOne();. i+ T5 [& I% o; |( k+ M+ D, M2 M8 V/ \' ~
  92.     }
    ; @4 d- I$ l! L  O5 b0 _
  93.     return $data;+ _1 H7 U1 b: u* j, m
  94.   }6 c3 V: F( r/ n- `9 R- m3 i
  95.   /**
    : j' G8 B; K8 r1 R7 @. M
  96.    * 统计个数' l$ L' L9 ^  C: O3 B
  97.    * @param $table2 I# P- P+ g, }1 R% I
  98.    * @param array $where
    9 t0 V) X' M6 C8 k) D; D6 Q( a
  99.    * @return mixed: ~1 [3 k! `, I* w3 H
  100.    */3 R% F& s/ j/ T' m, j8 o( }
  101.   public function getCount($table, $where = array()) {) _9 w: I# k% [
  102.     if (!empty($where)) {; ]4 M" S. U  S# U" o* n
  103.       $data = $this->database->$table->find($where)->count();% f( V8 Y1 m& \! _) C' }$ z( E$ y
  104.     } else {
    $ [  P2 H# ~0 b  S* _
  105.       $data = $this->database->$table->find()->count();  T7 T/ Y0 ]$ r
  106.     }8 R9 F! c6 t3 v) {$ M
  107.     return $data;) i8 k( Y7 e- d3 g
  108.   }
    0 Q  S4 |2 C/ ^" K
  109.   /**
    0 R) N- W7 |+ r( Y! x  c
  110.    * 直接执行mongo命令
    % ]) ]: P# L, }" w
  111.    * @param $sql
    3 O* c  |1 Y9 u' W8 }0 U
  112.    * @return array4 G* P" Z. d* H) c" H- d& A
  113.    */
    9 l3 H( \2 p* `% a
  114.   public function toExcute($sql) {
    ! K: ^( W; J. E% A; P4 V" {  Q
  115.     $result = $this->database->execute($sql);/ X# D7 `  d3 D& `6 U1 M/ O
  116.     return $result;
    % K$ a& K+ b" F4 \- [: j5 m
  117.   }
    5 V, |* U  s" b& W+ [" f4 h( C7 o
  118.   /**/ E) @9 V1 g0 e' B. P6 b
  119.    * 分组统计个数. K5 K" L. ^+ v9 U) R; t
  120.    * @param $table7 _1 [  I4 [2 t+ n- M: _& S6 y; }' t
  121.    * @param $where
    5 T! }) l- [; F7 F
  122.    * @param $field; t: ^, l' Q6 z, k+ v
  123.    */
    1 p# ~3 a6 G7 X* e
  124.   public function groupCount($table, $where, $field) {; s+ w" w4 b. w9 q
  125.     $cond = array(3 z7 _6 Z, Y) J" [" M' ~3 @9 b( I
  126.       array(
    + b1 t. e2 c( _* [, q3 B" `
  127.         '$match' => $where,
    4 Y( x8 ~# p6 ]4 u! J
  128.       ),
    ' O- x5 S. k/ i' O) r6 u
  129.       array(
    / K: W4 _/ q7 s6 o' h: d
  130.         '$group' => array(
    ) k3 a5 h  p: w5 r8 M" J
  131.           '_id' => ': {, t5 ~1 @1 p; O( `1 Z4 \- {
  132. 1 d  s$ r: ]6 }( {
  133. . $field,& c9 t$ ^! R7 a
  134.           'count' => array('$sum' => 1),
    3 b: E2 @5 H1 Z1 w. ]1 x
  135.         ),6 j) c8 Z' [& e0 V6 ]# B" a/ y
  136.       ),5 a; b, }' [: c& Y
  137.       array(' r, f: P4 Y# D  e- S
  138.         '$sort' => array("count" => -1),
    7 c# A& u5 `7 K/ x' \8 S# u
  139.       ),; V4 {6 ~  _# N7 W6 i
  140.     );5 v) V8 Z2 Z2 ?; X- k' F
  141.     $this->database->$table->aggregate($cond);" j. j! o" N% `% |$ u  Z
  142.   }: @. _! ^' L! D8 C
  143.   /**( P; z5 I' u0 ]
  144.    * 删除数据
    ; T" p; @4 K/ _5 V, g5 m
  145.    * @param $table( ^) f+ q' r1 q, w
  146.    * @param $where
    " j4 R% y, O+ @' p6 ?0 `
  147.    * @return array|bool
    $ O+ E. q' b, D! K
  148.    */& ?0 B1 g8 o! g
  149.   public function toDelete($table, $where) {3 D$ \! l; s) e& w! D9 O
  150.     $re = $this->database->$table->remove($where);8 W$ |2 V; z3 E5 z1 n: t$ `0 }
  151.     return $re;
    * ]7 o  l' R) G+ e4 p
  152.   }2 H/ R3 y' I3 S# w
  153.   /**
    & E& g0 ^- D$ Y1 B
  154.    * 插入数据
    - G/ Y6 u3 i/ O: Q( `* z# }
  155.    * @param $table$ D6 c" E+ h* S- G+ Y
  156.    * @param $data8 m0 `2 X4 V( \0 i1 l
  157.    * @return array|bool! j8 P5 }' u5 H) \( P0 C* F4 V; [5 r* |
  158.    */
    5 y" B" E8 b! ^& S5 v- D* y' r
  159.   public function toInsert($table, $data) {
    $ d" m6 [; Y: Y2 d' ?5 d
  160.     $re = $this->database->$table->insert($data);8 ^( L) y5 A: I& C
  161.     return $re;7 C/ `6 ~3 q  x& p! V5 b& M6 t
  162.   }
    3 r* m! o2 j1 K4 E3 F0 [
  163.   /**  S8 |+ G6 \+ h! I+ g
  164.    * 更新数据6 ]! T1 d  q* ]; q, d4 M
  165.    * @param $table
    5 o! h( ?, k4 _. ?* E
  166.    * @param $where1 N! d' l5 T2 s3 D! R2 s5 }
  167.    * @param $data& S! H/ p5 t- t$ T: ~4 ]
  168.    * @return bool
    $ x$ ^7 b- P, O9 C% [5 Q) f  {
  169.    */
    9 T7 B* X7 M% C  m0 b, d
  170.   public function toUpdate($table, $where, $data) {9 A8 A1 G3 j- A* |- Y& s9 h
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    6 b( z, I* G+ K$ O4 t' m
  172.     return $re;7 Z( g. X. p$ Y6 L: G& o
  173.   }1 ?) ?3 H9 l) Y7 ?& d% u
  174.   /**
    1 P8 Q4 p9 c3 S
  175.    * 获取唯一数据
    " H% H" X4 O# E* W2 T- N
  176.    * @param $table
    " u8 u- M" T, O
  177.    * @param $key9 g  p$ z3 W& {6 Q' n  y
  178.    * @return array
    7 N2 l  {3 X, q
  179.    */
    ! i' W) k8 e. z' y
  180.   public function distinctData($table, $key, $query = array()) {
    ( f% g7 }7 O3 E5 _( S
  181.     if (!empty($query)) {
    . F8 H% o- ~7 X* A) p1 i
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, B% [) @% r0 S! N
  183.     } else {' }( g7 ~* `8 _2 g
  184.       $where = array('distinct' => $table, 'key' => $key);
    8 q8 |! s* B  _: Z- d1 Y
  185.     }
    & J1 w5 H! N% \5 m, J' }7 {
  186.     $data = $this->database->command($where);; X8 z) e8 @/ v; b
  187.     return $data['values'];
    ( |) ^5 r& K/ k: _: q6 X1 ?
  188.   }
    . r0 t- S  }7 Q* F
  189. }/ d! {( ~6 X( L2 U
  190. ?>
复制代码
/ H+ T( G1 j  a7 Q  A" K5 _
* ?# ^+ _1 |7 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:52 , Processed in 0.083703 second(s), 20 queries .

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