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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
$ q/ X* t, m0 S% ]" ]+ F模式自由。3 N! B1 f& G2 o  x" i3 g6 z
支持动态查询。
: B! v$ W" w3 v3 `( A1 U% t支持完全索引,包含内部对象。
: f* Z8 g1 `# R$ L3 d: F" V支持查询。6 f- q+ d9 k! S, }' [# R7 o. P
支持复制和故障恢复。  c5 Z. M: t# O( N% z: y
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 p5 g& P/ u  f  @% [自动处理碎片,以支持云计算层次的扩展性
7 `8 j: O, W( H5 r支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。3 n" o  I3 T4 [/ r! D
文件存储格式为BSON(一种JSON的扩展)
' v4 A2 _4 w' }8 q2 N- S可通过网络访问

所谓“面向集合”(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
    : t8 d6 s! c  {& t* w( i, {* G
  2. /**9 T) ^5 x2 U3 L
  3. * PHP操作mongodb数据库操作类2 d' ]9 Q5 j! h. l& m
  4. */. V1 q) m8 F: y
  5. class Database {2 s. R/ `/ u' s" b  a' b& b0 i: {
  6.   protected $database  = '';+ w% w" k: L$ n' F6 c
  7.   protected $mo;* R+ E; G/ h( ]- m
  8.   /**
    , T. `" B! ~2 x* r# p
  9.    * 构造方法
    9 ]7 I. J- w8 F& r7 d2 g, Z( X6 j. W
  10.    */
    0 {5 _/ o  z9 X/ ]+ R* d0 V
  11.   public function __construct() {
    , o6 s1 C- ]% i% g+ O, s- H( b9 @
  12.     $server = DBSERVER;) N, n. G2 o$ z8 T' y& E
  13.     $user = DBUSER;
    5 J0 s( b$ v% z6 l9 [$ k
  14.     $password = DBPASS;
    % L2 E3 _# A$ p7 _# t( e
  15.     $port = DBPORT;
    9 T/ ]+ q/ m" d
  16.     $database = DBNAME;: m+ N5 K  q4 v' J% X0 g% D5 W
  17.     $mongo = $this->getInstance($server, $user, $password, $port);9 w' N4 u( m8 _4 D5 j5 ^
  18.     $this->database = $mongo->$database;
      b7 V: b7 R4 u2 u' Y+ |2 D8 ]
  19.   }2 p  c; k- n% ^) k/ Z6 P. u! X
  20.   /**: w% J% U" d8 A( }' c* b2 r
  21.    * 数据库单例方法0 x' V9 K4 v+ t4 h  z% r$ C
  22.    * @param $server. d! M4 X5 ]- @7 [7 @: {9 r8 O
  23.    * @param $user
    . [' k1 g: Z7 [  M# w* l* v1 m* U
  24.    * @param $password; \/ w2 C* P: M
  25.    * @param $port  `$ f8 E/ F1 C  \7 O3 V* `
  26.    * @return Mongo9 t3 g6 o! K, M/ {
  27.    */" D! x- Q+ p/ J3 @, `
  28.   public function getInstance($server, $user, $password, $port) {
    " b4 d' |8 D7 {8 Q, n
  29.     if (isset($this->mo)) {$ @. `( _$ L  W# e, i4 d/ O: f
  30.       return $this->mo;
    " U+ _5 c4 F1 ~  h* O! V7 v
  31.     } else {
    & ?7 f- n% F- {' c
  32.       if (!empty($server)) {" s. d- l8 T5 H0 X* M+ k5 b. X7 Y* ]
  33.         if (!empty($port)) {
      l. J( A9 X9 M0 n
  34.           if (!empty($user) && !empty($password)) {8 |5 q. \) w9 I
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");( K6 P5 d6 c4 `, V& S" d. M1 d: Z
  36.           } else {2 P! E, w0 I: K
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");) R2 |8 E# U: I, [( k
  38.           }
    % X. H) z3 V* O; b6 t6 e  M, G
  39.         } else {
    . {- o8 q. `9 K6 ~
  40.           $this->mo = new Mongo("mongodb://{$server}");2 y3 n7 r! Q7 @& d
  41.         }5 h% K8 _, O6 @! D' X2 _, [3 U
  42.       } else {* L& r+ `6 l4 [  k4 z" H6 \. T
  43.         $this->mo = new Mongo();& @! g, b3 j# A1 L3 X( ?( q
  44.       }
    3 e7 D0 _7 r, {# }- W  ^6 d* N
  45.       return $this->mo;
    ) _9 S% C1 a5 S+ y- f* C8 W3 o
  46.     }0 m) q0 w8 b* J$ Y0 [
  47.   }% h3 F+ s) M' ~
  48.   /**
    0 S+ v3 B# g8 f
  49.    * 查询表中所有数据
    / ^' g1 a2 C8 Q% {' t1 I: a2 Z
  50.    * @param $table' S- @, w0 t% q3 N, |. I* l
  51.    * @param array $where+ N: @3 V/ N- S" X* `
  52.    * @param array $sort
    : K3 j( Y2 t( p. Q  f* P- k$ P
  53.    * @param string $limit
    ' J; n' g, P' A% U" E# M! F
  54.    * @param string $skip
    % X$ ]8 e# h. \. I4 b
  55.    * @return array|int6 O! v9 j* A* U. \2 w, i
  56.    */
    ( K1 T% ^: p+ }/ B
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    8 `# p6 H" m7 L9 Y+ h& H# W* b) O
  58.     if (!empty($where)) {
    6 N2 O3 Q" R1 ]+ u' u; Z
  59.       $data = $this->database->$table->find($where);
    4 P! n* l$ q- s( h+ u- {
  60.     } else {8 ~; h. G1 A' b6 P/ o
  61.       $data = $this->database->$table->find();
    3 [& I  ~' n% s
  62.     }+ V( U6 h, n8 h3 u) y
  63.     if (!empty($sort)) {3 n4 R, u; F5 c7 w
  64.       $data = $data->sort($sort);
    1 ]2 C6 s' `, `$ S
  65.     }
    : R* D- ^( i, k# t
  66.     if (!empty($limit)) {3 x8 p4 D9 ]3 D5 k
  67.       $data = $data->limit($limit);4 ]) e4 r' l# e& d1 a' I
  68.     }
    " E9 N' J  \' W9 d" q- l
  69.     if (!empty($skip)) {7 }+ P1 N; R9 X6 B  e( K( C
  70.       $data = $data->skip($skip);
    % i$ s* z9 r/ h; z- _+ L; |
  71.     }$ A- P' z  f$ ^! ?4 w
  72.     $newData = array();  L* G. n. L- |! @4 j, e4 ^* |
  73.     while ($data->hasNext()) {
    5 u/ L4 G. D3 M  g6 D7 |
  74.       $newData[] = $data->getNext();$ X  q; d' {, f4 R
  75.     }
    " L  w. @/ c' G( g2 ~$ d8 I# v
  76.     if (count($newData) == 0) {
    8 ^% `9 c  @( r$ y+ o
  77.       return 0;
    $ G, P! g4 S. A" `6 c: M! I
  78.     }
    ; N  B( A8 v' C. L$ Q8 x
  79.     return $newData;. O4 \+ h" U; N2 S) }" H4 e( [
  80.   }& n) \+ i# q* ]& E8 W+ z5 w
  81.   /**% C9 I% i) @5 g$ E7 o7 p# W
  82.    * 查询指定一条数据
    / I* V* ?3 |; \
  83.    * @param $table# j7 j; P: `* S8 K
  84.    * @param array $where
    / T& @+ U  ]/ Q3 C) t$ l0 j
  85.    * @return int1 T: E$ A, h1 s$ Y
  86.    */" t0 D# J3 n; n' H5 }9 w
  87.   public function getOne($table, $where = array()) {
    ; `" q! u/ g, \- K! d& R9 I
  88.     if (!empty($where)) {8 x1 R1 n4 V* S4 q6 ^5 `- H0 ?
  89.       $data = $this->database->$table->findOne($where);! ]8 m6 ^! _; J: ?
  90.     } else {9 c* |9 B6 M1 m6 w' g8 C( e
  91.       $data = $this->database->$table->findOne();
      |6 Q1 B5 L8 n  N, Q* k  T/ j
  92.     }: v) e  _/ w0 J/ Z: W" W+ Q1 B* m
  93.     return $data;0 @# _8 n6 E# i& G9 S8 |. h$ {$ f% }
  94.   }, T" F. O, j9 v& u) z, v' j8 l" a
  95.   /**+ R0 l- U1 Q8 Q5 K' K, I
  96.    * 统计个数
    $ ?4 S" g6 X9 h  y* r2 U
  97.    * @param $table: m% }7 u( ]) |
  98.    * @param array $where: ?6 V/ b- z& ?7 r2 l0 P
  99.    * @return mixed7 x% N4 F; H) e* U0 F  y
  100.    */3 T& b. i, j! m& y7 t* |
  101.   public function getCount($table, $where = array()) {
    $ P3 H, I% H0 N' D
  102.     if (!empty($where)) {
    6 @; z& ~  g5 t1 a/ F
  103.       $data = $this->database->$table->find($where)->count();: ?* V  a. P. U. F7 t
  104.     } else {
    4 P0 J8 J/ E& ^% |) e' |* Q& |1 O) E
  105.       $data = $this->database->$table->find()->count();
    " y6 o$ u  L% f# Y
  106.     }: g' j5 t* m. ?9 W
  107.     return $data;
    + T# w1 u" R- [9 A; Q# t
  108.   }4 x. Z% e5 B4 ]+ i$ J; r. c) v
  109.   /**
    + t* T( E+ G0 u9 ?! H' N, z- M3 [
  110.    * 直接执行mongo命令  X+ ]; O/ e" d1 d- ]& U
  111.    * @param $sql2 r" ^* K( G5 v6 N5 D
  112.    * @return array. `' ?8 a! h& v$ E2 Z' @
  113.    */; k8 P) ~( K8 I- U4 C
  114.   public function toExcute($sql) {6 e( t6 {) G" w; L: Z" p1 t& p7 N
  115.     $result = $this->database->execute($sql);
    4 }; Y; C; i# V3 q, I
  116.     return $result;- b9 a1 l- {. C8 ?
  117.   }
    ' e! V- d0 p- d& h7 [0 W# l6 k: D
  118.   /**
    + P$ t0 @. |4 x1 R4 W; x' _' y$ A  p
  119.    * 分组统计个数# _, m8 X+ d! N; u& u
  120.    * @param $table
    / n6 ~5 f$ o" e) z  f8 V
  121.    * @param $where4 w5 |: t' i! |& T/ k
  122.    * @param $field
    % ~/ I) J5 I; t+ [8 ?
  123.    */
    , C/ P8 c" g; G' s
  124.   public function groupCount($table, $where, $field) {4 L9 o. n9 t! Q6 X
  125.     $cond = array(4 j! j7 T2 e" \9 d
  126.       array() y* y9 h* }8 L! H( K
  127.         '$match' => $where,; j& l+ U: W: u9 x& {
  128.       ),
    & h' k. W. B! _0 m' u8 V5 M; x" F
  129.       array(, i4 j- z4 ]6 ~3 U5 i$ y7 }: s
  130.         '$group' => array(  x+ [9 w) C4 a7 ^, a
  131.           '_id' => '0 c# M& r! l7 C, L5 }# A/ T

  132. & _, V% @& U; R1 G: w
  133. . $field,7 {5 C( l9 T$ ^; ~! c3 K
  134.           'count' => array('$sum' => 1),  a2 u4 s" ^9 ]' G# Q- q6 m; H& K
  135.         ),
    * z) P% _9 n# E- k  a% F
  136.       ),
    : ?+ |$ s- X3 D
  137.       array(
    - x- {* {) U* }/ f8 v4 X: Z- ^" z
  138.         '$sort' => array("count" => -1),0 K6 r2 c. G% i7 g$ I; F
  139.       ),
      C1 R9 ?: R) l, Z: ^$ K
  140.     );. }9 U6 D$ T  V- ?) O$ |
  141.     $this->database->$table->aggregate($cond);& @6 o" j% z! a4 v
  142.   }$ t0 l. k+ U' Y. q& j* n
  143.   /**1 s( {2 ?8 b8 n
  144.    * 删除数据, p2 Q% u' x) \: A
  145.    * @param $table
    ! E9 J" R7 C% y
  146.    * @param $where- ?# A$ X  a) C6 j3 D
  147.    * @return array|bool
    - F# Q. F$ x- |/ W; d
  148.    */8 e% o# Y. s# {2 ^2 U6 m1 }/ t
  149.   public function toDelete($table, $where) {3 o% w5 l+ f. Z& q" k
  150.     $re = $this->database->$table->remove($where);
    8 `$ p5 e8 t0 k$ S1 K! c2 c( t9 Z
  151.     return $re;7 w$ J; C' o4 m3 p
  152.   }+ |2 B; m, g9 L1 c6 `2 ]
  153.   /**
    ; e2 [. t3 b' q. F: U% ]/ E
  154.    * 插入数据
    & t. I, i; g. X# Q
  155.    * @param $table1 U# k5 U0 ]- x5 V5 j: @( P& C
  156.    * @param $data
    6 _* d, J4 E, U% V* ~
  157.    * @return array|bool
    # q) K3 u0 R6 s/ v& E9 \
  158.    */# ~2 }% L  A  j
  159.   public function toInsert($table, $data) {
    " h# s1 k. B+ O$ d
  160.     $re = $this->database->$table->insert($data);5 [& K' N0 a( M4 l" C7 A3 |
  161.     return $re;4 J5 R! ^; a) M) D+ L2 S2 c
  162.   }
    $ v7 M$ d1 r( v1 d4 X
  163.   /**
    7 k4 t& y4 k- L+ ]- n0 t
  164.    * 更新数据
    & V, o, f" t, ?9 x, W: J  R
  165.    * @param $table
    3 u5 J+ S5 ~# S1 X9 `9 _; B
  166.    * @param $where0 @1 G4 y# ~( v; Y/ v1 w+ d
  167.    * @param $data3 v: M8 ?! V! J8 d
  168.    * @return bool/ H  i; K6 r  [9 ~) }$ M' `
  169.    */) k9 @* m1 M& N% \
  170.   public function toUpdate($table, $where, $data) {2 X5 Z5 v. ]9 [; K, Q1 n* ]7 D6 z& V9 c
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    " y$ [) K' h# t8 D; H
  172.     return $re;
    7 h0 ?7 ^- a5 |6 o+ }
  173.   }: }9 @$ F$ c! s+ o: n
  174.   /**
    $ K3 H. d5 r' G0 L8 v( P
  175.    * 获取唯一数据
    & ?. r2 z( m; Q% Q+ _/ ~; H
  176.    * @param $table* A; o+ T9 J' C# v( n
  177.    * @param $key) d7 s2 Z: L* i
  178.    * @return array6 E1 [% }5 e" F9 e
  179.    */& X, P4 m' K" X: U' z2 T
  180.   public function distinctData($table, $key, $query = array()) {6 r' |) m% ^2 ?3 e
  181.     if (!empty($query)) {
    , u- \9 p, w  m# D+ z& A# D
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);; r' F, t' _/ \5 g3 o  |1 P
  183.     } else {
    . h1 ]3 `. p$ T# @# f
  184.       $where = array('distinct' => $table, 'key' => $key);) y  S& W, u5 H
  185.     }9 l  }1 x( y2 i# ^
  186.     $data = $this->database->command($where);; x% O5 x: \- {  G, x/ a
  187.     return $data['values'];
    ( z0 f0 n( @3 T) K7 M: a) f% f4 d0 n
  188.   }: E5 x; `' U, x1 ?0 A0 B
  189. }
    $ k7 r# t' ]3 y" L) u5 [
  190. ?>
复制代码

+ n3 q- Q$ D2 K6 a, ^7 g+ }/ o, U. B4 U: d% x2 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:59 , Processed in 0.049735 second(s), 19 queries .

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