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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
2 p; S$ i5 u1 T2 U4 }4 S" X模式自由。: m+ t- j  V: Q# H5 |
支持动态查询。8 y7 A8 Q7 m" ^& o
支持完全索引,包含内部对象。
/ D( @& x0 n! Z( o: R0 |支持查询。, t7 L! ~: N3 f2 r' u& }5 T
支持复制和故障恢复。
0 P8 W% S. N+ j+ Q0 H, H/ Z使用高效的二进制数据存储,包括大型对象(如视频等)。
$ w  b( E0 r3 F) f* o' `7 E自动处理碎片,以支持云计算层次的扩展性$ V6 a# j% ~& T6 K
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
2 L$ A+ _: L7 E; p& w; b& K4 b文件存储格式为BSON(一种JSON的扩展)
; ?; p1 _# H+ R# ]6 i3 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) D2 b3 P( U9 T5 |! D
  2. /**6 ^, S  v% U' n* f0 I7 ^2 m
  3. * PHP操作mongodb数据库操作类# f7 \/ s/ H4 U
  4. */
    ( Y9 g. f9 [; @+ p
  5. class Database {: x' e1 T* z0 G' a
  6.   protected $database  = '';
    9 T+ r4 D: N1 K' d: o
  7.   protected $mo;/ P* z# o! F. C0 f
  8.   /**
    ( @+ ?' w$ C9 ?8 q3 O3 g
  9.    * 构造方法
    1 G  X6 P& Z+ q! |
  10.    */
    3 e5 f7 q1 s( |8 J# W
  11.   public function __construct() {% D0 r2 ]5 i- t) u
  12.     $server = DBSERVER;* l9 G  ^4 T/ R* E3 q0 ]! o
  13.     $user = DBUSER;
    ) f! s4 Z- l/ g1 }
  14.     $password = DBPASS;. I* S5 ?, s. g2 N; y
  15.     $port = DBPORT;
    3 w0 y3 a1 C; G
  16.     $database = DBNAME;/ M0 V1 _' ]- S7 d
  17.     $mongo = $this->getInstance($server, $user, $password, $port);; ^6 Q4 w, T5 i: l
  18.     $this->database = $mongo->$database;) Y; s9 Z+ j, a( _
  19.   }7 y- k4 @7 M; S, z- E- s
  20.   /**. F0 T5 d0 {6 G& `- s' l
  21.    * 数据库单例方法
    ! }8 {+ M8 m) q6 t* W8 e0 I7 ~
  22.    * @param $server
    ; [1 i# w/ F: U6 k
  23.    * @param $user
    6 S) z5 D, ~- E
  24.    * @param $password
    2 H% d/ `; X, \. T  x! |4 e! c
  25.    * @param $port
    ! T9 _5 d: Q6 @! u. d- L; e
  26.    * @return Mongo
    7 y/ {1 u7 p6 H, D( F: W
  27.    */
    , X$ ]. y6 f9 l8 a5 X: M% h
  28.   public function getInstance($server, $user, $password, $port) {2 n4 U8 v7 _1 U5 H  z
  29.     if (isset($this->mo)) {3 M9 F) s) ^0 q/ V/ L) |
  30.       return $this->mo;
    ) D( s! F8 z% ^- F
  31.     } else {6 Y" z- F5 ^  B- w' F
  32.       if (!empty($server)) {
    6 }6 y9 D) F6 c$ [1 L7 j  i
  33.         if (!empty($port)) {
    / n6 Z' s) b& w0 Y9 b( y5 T
  34.           if (!empty($user) && !empty($password)) {
    ) a7 U: f( J" n) r& c! [; l: h
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    + E1 n0 V/ R2 q; ?" N6 V* [
  36.           } else {1 q8 n& l* J, T
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    6 e0 T3 n' C. K- Q7 ]+ g4 o
  38.           }6 C- E1 t; L1 _: b; q
  39.         } else {
    . K8 m2 Q+ g$ }# Z% F
  40.           $this->mo = new Mongo("mongodb://{$server}");
    ; z/ U- _: W: O3 I6 ?; k" z# H
  41.         }+ _5 \# D+ t4 y& C! ]
  42.       } else {
    , z& f: p5 J2 P- ]* h7 x
  43.         $this->mo = new Mongo();' Q- u4 R7 D' `% c1 Y( Y( n4 d
  44.       }" c  X8 X" u2 |9 N( N) a7 x
  45.       return $this->mo;9 f; R/ ~0 w0 A# T  P% J: N# Q
  46.     }
    / m; m$ U/ U' D
  47.   }
    0 ?, q6 M7 C' f
  48.   /**8 [" N' U! J' X
  49.    * 查询表中所有数据$ s+ p* f8 U$ T8 U9 m) X
  50.    * @param $table: m( h8 N4 @/ h3 k' G: j. |) N
  51.    * @param array $where) h; `, w  o) ~- T  A6 L( h/ p0 S
  52.    * @param array $sort
    4 N6 `, J" g$ S, l$ D6 c& q# z
  53.    * @param string $limit
    6 q. y( B# W1 Z
  54.    * @param string $skip
    ! u7 L) W( S( P/ ?# D' i  W  M; j! F
  55.    * @return array|int1 R$ K+ l5 p2 A/ X
  56.    */, m' M$ V3 m( D0 d8 W+ k7 a
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {" v& Q% o. H% ~) J* o$ D
  58.     if (!empty($where)) {
    2 ~6 V* @( K% e9 w4 J1 I+ i$ U
  59.       $data = $this->database->$table->find($where);. @& _# m  E2 j; j1 I
  60.     } else {
    " ]" }: j; e) `
  61.       $data = $this->database->$table->find();/ i& b2 U+ v, C
  62.     }9 U9 D" Z3 A, e+ H/ J" A4 k
  63.     if (!empty($sort)) {
    6 w# X! C& v1 e' U3 X& R' [; [6 R9 B, r
  64.       $data = $data->sort($sort);
    $ O) Y2 u6 P! g  N7 M5 C
  65.     }4 `+ \' g2 z2 Z& O
  66.     if (!empty($limit)) {
    . }6 x/ |4 k* a( Z0 \0 C- ?
  67.       $data = $data->limit($limit);2 p  c' e3 }0 F' V, ]: h& z
  68.     }
    2 Y4 q/ S) M) w% o- _# k% l
  69.     if (!empty($skip)) {
    ! m1 |( G1 o5 _% Z$ X0 F' K5 z/ J
  70.       $data = $data->skip($skip);6 X; e( R3 j) g5 C$ v  A# ?" }$ G
  71.     }$ S7 U1 G( r, Q6 g  b  m' @
  72.     $newData = array();
    5 I0 w  k* \2 r; Z3 M& D5 D
  73.     while ($data->hasNext()) {& G1 Q% y+ l; O3 A5 E8 {
  74.       $newData[] = $data->getNext();& K2 F# r+ H5 y$ a. ?& A
  75.     }
    6 \. i2 N, E7 J
  76.     if (count($newData) == 0) {1 L) T( L( d9 N( F: \& P
  77.       return 0;: y, f; w. I+ m  H7 V
  78.     }
    - A+ M1 Y. y1 ^9 j, F
  79.     return $newData;+ d  _% H+ X( R) C/ f9 o
  80.   }
    & ?+ t* Z% _8 k# g( _0 u3 I) Q
  81.   /**/ k: ]0 I4 i( L! X
  82.    * 查询指定一条数据' R' {+ r# B2 U
  83.    * @param $table. c% V. q$ W- ^8 p& K9 \0 r
  84.    * @param array $where' w9 o' s6 L. X" ^" f2 o7 T
  85.    * @return int
    ( v7 U7 l% z9 h9 g
  86.    */
    7 Q+ E  O) u: H) c' _, C* R
  87.   public function getOne($table, $where = array()) {9 D% U( l+ o9 S. ^( q( Q
  88.     if (!empty($where)) {- D9 M1 M+ ?7 c" V2 ?
  89.       $data = $this->database->$table->findOne($where);
    + L2 M4 i& B- w/ i5 ~
  90.     } else {
    : I, y5 i- ]- ?3 @  p* I! ^
  91.       $data = $this->database->$table->findOne();" u* M0 T! Y6 E! j9 _0 l+ {8 A
  92.     }5 [# S8 M( P" p
  93.     return $data;
    $ y- h" ?$ m0 ?4 m; S" Y+ |* G
  94.   }! G3 \7 ~, u$ U/ R
  95.   /**/ Z& n, y2 K0 {) H: L0 ?) B3 A' @2 }
  96.    * 统计个数
    ; f& q9 \" i* z% A/ v3 z- {) i; e
  97.    * @param $table
    $ k9 Q. ~/ {7 z- L: w
  98.    * @param array $where) |" B: v1 k! z, p, p- {
  99.    * @return mixed
    8 @) G. W! Y! z6 b+ K+ }
  100.    */
    / ^3 @3 y! d2 H
  101.   public function getCount($table, $where = array()) {
    5 S1 c* ~% p- z& {
  102.     if (!empty($where)) {/ c1 h0 D( t  N6 M# M* X6 ?: t
  103.       $data = $this->database->$table->find($where)->count();* V6 y# A4 l8 k# m! h, J0 U
  104.     } else {
    # k/ M' M9 q- m1 Q
  105.       $data = $this->database->$table->find()->count();+ J0 v- z) _+ _
  106.     }
    7 o6 U' ]  y( I# f; G* |! P
  107.     return $data;
    4 t, O; h& D! Z* Z
  108.   }9 O# l- S  ^$ r' y" ]
  109.   /**: I* C; b* y8 E' Q
  110.    * 直接执行mongo命令+ D5 G9 t3 U4 A9 L2 X
  111.    * @param $sql2 k$ S5 c* D: y. }5 i3 b4 x
  112.    * @return array0 Y# j( v) e7 Q" I! g! K
  113.    */
    & A4 \& V& h$ o- m$ k2 T+ v4 F
  114.   public function toExcute($sql) {
    . Q. W$ k" O: w  @% ]- i# D
  115.     $result = $this->database->execute($sql);) E0 ~* w5 C6 n5 D2 G7 d
  116.     return $result;, D& ^1 m8 H( a1 r. }5 s" y4 P4 U
  117.   }
    5 Q0 c% Y# V2 J3 a9 S
  118.   /**
    $ d: W/ g# b4 w& k
  119.    * 分组统计个数. [7 h, E' B4 x8 b9 n& Y( ?
  120.    * @param $table6 c9 M# Q, @- i
  121.    * @param $where) A! @$ H- J% {* b1 X3 p
  122.    * @param $field
    9 z* K- b; D7 |3 d
  123.    */
    9 A+ q: [& k# k  [+ q
  124.   public function groupCount($table, $where, $field) {7 f$ Q' T4 M) C- Q) y" d/ g0 C6 B& D, N
  125.     $cond = array(
    ( }; b1 P- D3 c: P2 Z6 J
  126.       array(
    * E/ F4 p0 |$ |2 n8 t; ^5 @) X$ ~
  127.         '$match' => $where,7 D: q4 Z) u- O8 C" p
  128.       ),6 U& o& S+ b9 N4 u+ y7 V' g. x! M
  129.       array(. I! O! ]6 {; u' ?( O# e
  130.         '$group' => array(* l3 g1 u! o9 S0 S* L* \& ~
  131.           '_id' => '
    ; C* J8 q. S# d# ~! s
  132. 7 Y1 ]) G$ e. v
  133. . $field,
    + p  U5 M5 b! T1 |
  134.           'count' => array('$sum' => 1),
    ; h  G. g  h1 H0 e
  135.         ),
    0 A1 W0 ~- c! K5 z0 j
  136.       ),
    , m) w: Y+ B% n$ g% q6 j9 Y4 m
  137.       array(
    ( i4 E* {$ k6 V5 d6 W
  138.         '$sort' => array("count" => -1),% F6 v4 A" J) {- Q
  139.       ),, |1 ]& O# o( O0 p- @* T! u
  140.     );
    ( b) z+ j1 ^0 Q' }# d: e
  141.     $this->database->$table->aggregate($cond);
    - p- R4 Y: z1 T- z; d& e% c
  142.   }
    " W  ^& `! s: D: _
  143.   /**
    & F3 K7 Q& q3 o% w& ?
  144.    * 删除数据
    $ j0 k! u8 o) p7 ^
  145.    * @param $table; s+ p; F4 q, ?" h& f) u
  146.    * @param $where0 q1 U. T0 o  u4 y
  147.    * @return array|bool
    3 g* n0 C: j. f  S
  148.    */
    8 ?" n& \& d  O8 z3 F' m5 I( s) I
  149.   public function toDelete($table, $where) {
    5 @4 s7 a& @# [1 Y" }% Y
  150.     $re = $this->database->$table->remove($where);* l' s$ z% L3 y( ]( P* g  i: `
  151.     return $re;
    , t& {  k: S, }) A3 m" X! Q4 N
  152.   }; `5 S3 k" S4 c& l! ^3 I
  153.   /**& X: ?1 D  b$ p  `, y' h
  154.    * 插入数据
    ! x2 y' I+ x) d
  155.    * @param $table
    2 ]: R+ }1 T) I5 G9 T" Y
  156.    * @param $data
    & M& D) E  \9 E
  157.    * @return array|bool
    ! D7 M1 L, e) A, a- g0 [& \
  158.    */
    0 K- o' G4 f9 O  _
  159.   public function toInsert($table, $data) {* X- L  j" o  Q
  160.     $re = $this->database->$table->insert($data);
    * o" T/ `9 U- r6 x
  161.     return $re;
    8 h1 d* W% L6 `7 Y# [
  162.   }( G6 y: k0 e. d' H; G: H
  163.   /**
    - g& ~3 R, `; [
  164.    * 更新数据
    + O/ V( Z3 w  i8 U* y/ c3 O
  165.    * @param $table
    4 d) D, Z0 Z$ ^: K7 w
  166.    * @param $where# L0 b8 ]& ~% i1 W2 V4 a
  167.    * @param $data7 H7 @2 W3 G' D& ]& W0 E8 i
  168.    * @return bool5 b# t/ |/ s! g( X( X5 w" @) K
  169.    */
    6 `! d+ X. e! ~2 Y
  170.   public function toUpdate($table, $where, $data) {
    % R/ y3 ^2 y, T4 T
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    : d( W2 [& P/ h. X3 {5 f& ?
  172.     return $re;
    2 @* n: @. Y! k/ e  }; u5 \  m( y
  173.   }+ f* y" _! P# ?% W" D, v, ~
  174.   /**
    6 l* c( x% B! L/ D5 @4 K* k
  175.    * 获取唯一数据
    2 K: G0 Z. m" q( j/ L% @( ?
  176.    * @param $table
    : s) j) u! K4 X" {
  177.    * @param $key/ z6 T, B% T2 r
  178.    * @return array
    0 E- V1 g$ U. Z% e- {9 K4 o
  179.    */
    ! y8 \6 I5 ~) f6 v! N) C% C& e
  180.   public function distinctData($table, $key, $query = array()) {3 m2 `% L! E/ S0 Q3 H
  181.     if (!empty($query)) {2 Z  {. e0 q+ c7 V% D& [
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);" I' y7 m0 t2 @' B$ }2 P1 X
  183.     } else {8 e6 P9 M" }; c3 O9 p
  184.       $where = array('distinct' => $table, 'key' => $key);
    / M# y% E8 A# N, t- P' ]
  185.     }
    * z: v5 n6 Q/ d: z& k' h, ~- {
  186.     $data = $this->database->command($where);# C$ j6 ]7 G* o% L) a7 [: c- ^
  187.     return $data['values'];) X( W$ Y5 P& S( `
  188.   }
    . r8 O& o9 T  x- _" d) w  q  z
  189. }  `0 t$ W+ t" L9 |8 Y
  190. ?>
复制代码

. f2 \+ J  ?, I3 j6 h/ n
. n7 C3 R" X- f6 F3 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-29 05:15 , Processed in 0.111990 second(s), 20 queries .

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