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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
4 G3 B8 d8 u7 T1 n$ Q1 x) C模式自由。
9 t3 Z: K+ J* _支持动态查询。
, ]8 V1 |( ?4 a# V$ s* @1 s3 f: n% Q支持完全索引,包含内部对象。
; v! R0 r. ]' ^" c, {' h+ U支持查询。
- e1 N1 @1 @4 M( K  p4 I8 u6 f4 z支持复制和故障恢复。. T; t8 C# I! W. f/ B( J
使用高效的二进制数据存储,包括大型对象(如视频等)。+ B$ ]' [* A# y8 b4 Y* n
自动处理碎片,以支持云计算层次的扩展性
. F& Q( g% j- J3 U/ M( d3 Q/ C5 g) b1 k支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  f/ q8 k) F6 S文件存储格式为BSON(一种JSON的扩展)/ y( a* V- W+ [4 F
可通过网络访问

所谓“面向集合”(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. <?php6 q2 R4 T& N$ {$ U6 @
  2. /**
    ( [0 Z1 }, g6 q- G  f
  3. * PHP操作mongodb数据库操作类) U5 u. c0 ^3 g3 K" y0 u
  4. */
    5 j* Z. L( X, `( Q8 a& H
  5. class Database {" j8 Z' d6 {. K8 p2 t
  6.   protected $database  = '';
    1 l1 D  A& f  ?$ X
  7.   protected $mo;" `/ k& s; h+ O' N1 c7 B
  8.   /**
    2 d/ w0 t) \( ^2 L: G; ~
  9.    * 构造方法
    : L0 X# Q6 H; p: P
  10.    */
    ) }& {+ g0 m5 s/ h0 _$ b7 Y
  11.   public function __construct() {
    ) L8 s7 c% r2 t1 |3 L& O
  12.     $server = DBSERVER;% l& {, p# d! U# v) d6 Z1 Y* Q
  13.     $user = DBUSER;, E9 _& q9 ^; t0 r
  14.     $password = DBPASS;6 M( h- O7 @# r: {& V  {
  15.     $port = DBPORT;! I# T" }  _1 u+ p4 q$ `
  16.     $database = DBNAME;& e. ~! W; k- E* w
  17.     $mongo = $this->getInstance($server, $user, $password, $port);* ]: I2 V+ Z5 E  J
  18.     $this->database = $mongo->$database;
    - _+ h1 b9 V# \
  19.   }
    8 B; a+ T; j+ f# O8 O. p( ^3 I4 M
  20.   /**% w5 C$ O$ s9 |- k
  21.    * 数据库单例方法
    ' ^/ }% s* a2 _2 k
  22.    * @param $server
    " L% [' y) B. c# t8 R
  23.    * @param $user% }6 q8 b9 z5 z! i0 o
  24.    * @param $password
    - Q, |! D6 K7 Y
  25.    * @param $port% v: I; u3 f# ]5 ^: V4 J
  26.    * @return Mongo
    ; A/ M/ f0 D/ m. D( J. p4 G
  27.    */
    / t7 L! }& t) ~# {& J3 z
  28.   public function getInstance($server, $user, $password, $port) {
    # b8 F- p+ \1 J
  29.     if (isset($this->mo)) {! C, a" w! O: h
  30.       return $this->mo;
    0 J3 J. l3 l# Y* V6 C; {, V8 B
  31.     } else {8 n  G6 g. ^7 V# L- _
  32.       if (!empty($server)) {8 d" v; X# \3 ^' d4 ?( J8 W
  33.         if (!empty($port)) {8 w* F5 m4 G, g# b4 T) r. D% Z
  34.           if (!empty($user) && !empty($password)) {
    " r$ S' R/ P" f. X1 m
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    0 N3 b" O8 Y7 ]" _: w. l
  36.           } else {6 y5 t, Y) f% H, }* p; N
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    + L3 Q) X0 p3 Z' Y$ U6 y0 b
  38.           }/ P: N" C* d  k/ ~
  39.         } else {$ X9 F6 }  i* n  }+ n" f) v' }
  40.           $this->mo = new Mongo("mongodb://{$server}");9 x+ A% q2 ]$ v8 S' m! T
  41.         }/ `% G0 G$ ]7 b( G
  42.       } else {
    # t) p  I1 Q! v+ S
  43.         $this->mo = new Mongo();
    . m" F$ r% C3 Z/ Y: C3 v+ c  a7 r
  44.       }  }  Y1 Y5 j% k5 E8 M5 ?6 h, C
  45.       return $this->mo;
    9 w2 Y, T" [( O- i+ Z) d4 |( f
  46.     }
    . W9 E- L. p) m
  47.   }
    2 `" \$ X" {7 m6 k
  48.   /**
    & _+ v* M) Q- U. E
  49.    * 查询表中所有数据
    3 y, a) _' ~% g. e
  50.    * @param $table* H6 t# z" b) `  z/ c# C' n' d
  51.    * @param array $where
    : I' v+ C1 M6 h+ v8 l4 i+ N
  52.    * @param array $sort
    6 j6 B) ~, H1 D3 @. Q/ L/ }# x
  53.    * @param string $limit
    9 n' V. k% w+ s" o* q! K- L0 C
  54.    * @param string $skip* K+ G( c8 y! m, i
  55.    * @return array|int  X. s6 M- J/ ]/ c$ Z8 p  _
  56.    */
    ' g1 |- E9 t6 F) F7 @7 R: }; e
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ! @; p( J* X, w6 e. U+ q$ b+ _
  58.     if (!empty($where)) {- H8 Z" I0 {# o6 @: i9 R
  59.       $data = $this->database->$table->find($where);, `9 V8 b0 H0 H" z, |' x% n' A8 u% Z- a
  60.     } else {3 M: v- d* U* f" a- i7 R
  61.       $data = $this->database->$table->find();0 C4 F6 c, g6 ?# N" U9 g
  62.     }5 z; K4 U% _" z9 T1 D
  63.     if (!empty($sort)) {
    7 {; V* ?. o; X% ^% v
  64.       $data = $data->sort($sort);
    ) Q( R9 m1 k2 b9 M* _  E5 u
  65.     }% d! u. y! p) B- }# L: g
  66.     if (!empty($limit)) {. N# }. ]  L! v& Q+ I* l5 S$ p
  67.       $data = $data->limit($limit);' u0 n% G* @7 F" a, ~
  68.     }
    # V% m5 _5 {9 B" \$ Z6 P
  69.     if (!empty($skip)) {
    8 W, w2 N4 r* L0 K! K
  70.       $data = $data->skip($skip);
    + E) L4 K# ]; s* [3 ?. }' x
  71.     }4 u. \: ?, A" |
  72.     $newData = array();
    ) F3 b3 s  Z. C0 G8 x$ W! i: P( b
  73.     while ($data->hasNext()) {
    1 ]& p  p  L( O. }* X
  74.       $newData[] = $data->getNext();9 F' X+ ]4 O, P; q
  75.     }1 d& }0 `, K$ S7 K8 J9 I
  76.     if (count($newData) == 0) {
    ) l+ `0 B4 W3 Z& o, [- F
  77.       return 0;
    7 U! @: f* O; u
  78.     }
    " \# p8 D- X2 p% X7 f
  79.     return $newData;& l8 Z: d& {; N
  80.   }
    # N) ~4 a8 |3 i
  81.   /**. l6 G* `* M* w2 V! M2 f
  82.    * 查询指定一条数据
    4 t" i9 S1 V) ^0 a' j! G
  83.    * @param $table) f. \, t, A) J" D3 L
  84.    * @param array $where
    7 _  N* H. `7 O- Y; y
  85.    * @return int
    6 z1 a2 i% e* ?! a3 ]4 [
  86.    */" H) D# \4 S# u: ]6 ^$ w" {! c: z
  87.   public function getOne($table, $where = array()) {
    ! {' ^3 v1 _. A/ ^' B! \
  88.     if (!empty($where)) {3 I4 E! w( u5 [, {) a  K9 z+ \9 o
  89.       $data = $this->database->$table->findOne($where);
    3 g4 U4 i9 d! z, A( G8 N
  90.     } else {
    5 M0 e6 w% p% N3 f2 S
  91.       $data = $this->database->$table->findOne();7 G+ z. @4 K( J1 ^- w$ g) ~) a
  92.     }4 x. j3 @# H! m9 z# A, ?
  93.     return $data;
    4 {! ~) S' h$ `
  94.   }& \8 d" U: R) M' g' @4 X. N0 H
  95.   /**4 Z- F5 v6 }5 ~: P3 b
  96.    * 统计个数. a6 ^* r3 K3 a$ N- ~* G
  97.    * @param $table
    8 O8 j2 w, Y: t5 z3 p3 i8 b- }
  98.    * @param array $where
    8 ^- V! D0 a& q" d: W3 I- w" E
  99.    * @return mixed( S6 v$ d! L. J  Y. ~! ^5 d7 ~
  100.    */
    * f) O: e- Z7 v& P( r& R
  101.   public function getCount($table, $where = array()) {
    + Q$ U) }7 K' E9 _/ ]  W
  102.     if (!empty($where)) {
    0 ^$ r; Z& V# T. {5 _$ g- ^
  103.       $data = $this->database->$table->find($where)->count();
    0 I/ P' h3 M0 H+ k
  104.     } else {
    0 G/ G: e, O* e2 A: p# }6 j
  105.       $data = $this->database->$table->find()->count();
    4 P( S1 R! n  d, }
  106.     }
    ! P& e; x, M0 Y
  107.     return $data;! d+ }3 \2 I' y1 X
  108.   }
    5 U7 S: F& u. o
  109.   /**5 o( j6 P3 l# r
  110.    * 直接执行mongo命令  v7 s4 I0 p8 U* F7 }' V" |
  111.    * @param $sql$ c% v$ I( _; U2 e9 S6 Z
  112.    * @return array
    7 L* s3 g  K; q0 ~! X+ B% i
  113.    */
    2 c  V' g1 G9 I2 q8 z
  114.   public function toExcute($sql) {; `. ]4 j0 \, u! h& t7 o5 w0 D+ k+ ?
  115.     $result = $this->database->execute($sql);
    / ?) ~( V9 R; \; x5 x9 l! V# P7 x
  116.     return $result;$ A: l: L/ a  H  z7 W+ A4 F6 F7 n+ S. S
  117.   }
    8 [% J. R5 J) }% E8 J  v
  118.   /**& x9 P' p; r( O. X8 K5 W
  119.    * 分组统计个数
    % j# S6 j# q6 a5 D. i# w
  120.    * @param $table
    8 J7 X9 W- k4 e" P" ^
  121.    * @param $where
    ) Z2 u4 m! L  A$ C" q
  122.    * @param $field. `. h( D' x$ t( A
  123.    */
    0 E. ^) V( D0 J2 J
  124.   public function groupCount($table, $where, $field) {! }/ L: y5 E+ W3 R. |8 k
  125.     $cond = array(" s% E( E( X; i5 p' O/ Q
  126.       array(
    $ i0 a" R3 j+ y. k: G" f" r
  127.         '$match' => $where,  P% g2 S  J3 K
  128.       ),
    7 F9 U$ ]4 x/ a6 K, J
  129.       array(
    1 ]6 a5 M2 O) P# A: a
  130.         '$group' => array(% [' Y" w8 s$ K' w, F- F
  131.           '_id' => '
    7 b* {! E% U% A6 X  x2 F

  132. 7 m2 }8 `9 B. \" G
  133. . $field,( B9 R: m& C& C8 @
  134.           'count' => array('$sum' => 1),
    : q+ U6 f( P2 I& ?& v# \3 {0 x
  135.         ),  j! W, u2 F8 h) w+ b  F( Z* E
  136.       ),
    & U5 F) s7 v/ N# M1 K4 h0 C
  137.       array(4 v/ d& W  v2 U5 d3 P, {' z
  138.         '$sort' => array("count" => -1),
    . [: s. k' z& u* G  q
  139.       ),  N5 @0 f3 ]/ ]4 d! [, e
  140.     );
    + E# a- c" g+ e
  141.     $this->database->$table->aggregate($cond);; u4 g8 W+ {5 @7 w4 ?9 c
  142.   }! {' p2 k7 r( a' H3 `" C
  143.   /**. p; [9 L+ E. o1 L! M( h" B
  144.    * 删除数据9 l5 i1 q& \8 K1 [
  145.    * @param $table
    2 _0 {: ]# e+ U2 g1 {9 L4 t  X
  146.    * @param $where/ t' y! r+ B, V' k* i* a
  147.    * @return array|bool3 ^, `1 |4 L; y8 n1 Q
  148.    */
    ) \! Y; R/ a# `/ h
  149.   public function toDelete($table, $where) {; ~9 ]( s' S( Z) N5 D/ f$ P
  150.     $re = $this->database->$table->remove($where);
    4 e% G2 e8 L; J+ u& M8 O
  151.     return $re;
    : T. B( C2 _4 F' F; i, _8 A) r2 u( F
  152.   }/ q+ U! U2 j) R2 r" |' f
  153.   /**
    - S0 e0 S  V. n3 \. o% F
  154.    * 插入数据) n$ }9 ?8 T1 R4 l) a$ o) j) @+ U0 Z
  155.    * @param $table
    . ]# ?1 j5 B: Q) E& P8 f
  156.    * @param $data
    . v3 n& E1 I/ F
  157.    * @return array|bool
    0 F0 T) m, g; b1 |) h
  158.    */
    1 V/ ?) c: K' t
  159.   public function toInsert($table, $data) {  O4 I: ~. v6 H
  160.     $re = $this->database->$table->insert($data);9 ~2 f$ i) U2 d. D
  161.     return $re;
    8 c0 W, Q$ L- U7 m4 d, ?
  162.   }
    ; Q' i* @* l6 }5 f4 W$ \" Y2 M
  163.   /**+ D6 t2 W/ t0 k3 C' ?& }
  164.    * 更新数据7 E$ C6 U6 J+ W7 @* P
  165.    * @param $table7 q8 q! V5 f7 W% W& W  `7 n
  166.    * @param $where
    9 X+ R! \1 n5 R  x
  167.    * @param $data0 g+ r3 I/ Z0 G9 S
  168.    * @return bool) }& D5 p2 P( p3 E: A: l( z
  169.    */
    7 }$ C. {2 P* N- G" Q
  170.   public function toUpdate($table, $where, $data) {" V( t! u( b0 H- Q' W2 Z
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    : O! V/ o" m  S! O1 z( K4 e, h" d
  172.     return $re;
      d3 m7 X: _0 u9 V- a
  173.   }
    2 J/ y$ A! `( u& H' Q
  174.   /**8 P! |$ o* ~& k% T+ R
  175.    * 获取唯一数据
    9 J2 l' f6 z! I& s3 [
  176.    * @param $table
    5 \- E/ }4 e; ?: _5 Z
  177.    * @param $key
    6 A& t$ k" ~* i9 z" y6 L6 Q. f
  178.    * @return array8 F% |/ n) B$ I9 S  u
  179.    */
    7 `5 p/ u/ S$ S6 M
  180.   public function distinctData($table, $key, $query = array()) {0 W) O; W3 o- C  b# `. f4 f
  181.     if (!empty($query)) {* k; ?& {3 U: }7 Q
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);. t4 S2 w; P5 B
  183.     } else {
    ; X' }% _3 L/ y% T$ I
  184.       $where = array('distinct' => $table, 'key' => $key);& `, m5 ?% S* c$ K4 \. B0 W" e
  185.     }
    & e& O8 w# u& k3 E3 d4 M
  186.     $data = $this->database->command($where);2 a; L' D& U, o/ C6 v6 Q
  187.     return $data['values'];
    6 T$ P" c4 ]# t. O0 T+ M
  188.   }
    7 X0 y0 O" U8 I) v8 w" R' ?
  189. }) a  d8 G8 l) `( q% U! ]
  190. ?>
复制代码
. C- q! H& Q; L% A# p
1 q- S$ L4 A( _1 j6 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:46 , Processed in 0.121383 second(s), 20 queries .

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