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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。1 Q  v4 I3 Z' ]2 Y( K
模式自由。
, x2 g  @8 E* a支持动态查询。
7 N6 Z0 u* u9 j" @: q支持完全索引,包含内部对象。
0 ^2 P4 C5 G6 Z: e, d4 a! |$ {( A支持查询。
5 r4 u' I* Q" ^5 L& E支持复制和故障恢复。
/ K0 G$ J5 c2 s& Q4 o0 D/ v使用高效的二进制数据存储,包括大型对象(如视频等)。
) y/ T) [; J; t" z, T6 M4 F8 c自动处理碎片,以支持云计算层次的扩展性. N' ~" H$ F( A6 M1 M
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
, C% G3 Z2 B8 F( k5 ]4 X3 o文件存储格式为BSON(一种JSON的扩展)
7 `, X6 g; }, d8 M  ?8 x, K可通过网络访问

所谓“面向集合”(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. <?php9 s: S$ x& d* s
  2. /**
    " U" H& y# |/ p+ i) H8 D& r
  3. * PHP操作mongodb数据库操作类
    % c/ N5 E! d3 N+ g/ _5 t: ]' t
  4. */2 B! y6 K; l2 L( y6 ?
  5. class Database {
    . O! ]+ q0 j% P7 G2 t  u2 ?
  6.   protected $database  = '';( K! p) M2 u% z4 A/ N
  7.   protected $mo;! g9 F" ~1 N3 t$ V' f
  8.   /**( M2 D/ o" R5 A. T# f# D2 \5 @
  9.    * 构造方法  |& q* O8 ]7 J3 k( c
  10.    */
    1 R4 c) x5 V0 y; x$ a2 B
  11.   public function __construct() {
    / C$ F! K& G5 m( R$ M8 |* \
  12.     $server = DBSERVER;, `* `/ Y9 x7 `7 v9 _+ Q
  13.     $user = DBUSER;
    * N. ]% `3 H$ p
  14.     $password = DBPASS;
    - E1 B: ]  F/ u& S) W9 h: j
  15.     $port = DBPORT;7 w6 k4 J7 f" e; x
  16.     $database = DBNAME;
    , G7 H9 g! ^7 z( V- B
  17.     $mongo = $this->getInstance($server, $user, $password, $port);% w1 k% P3 N- i" Z* y! }
  18.     $this->database = $mongo->$database;
    + c% C) E0 j: h. D7 B: [+ W3 {
  19.   }; t( I2 {+ n# g+ T7 }% y/ D
  20.   /**
      ^7 a, E! R9 o
  21.    * 数据库单例方法
      U( c5 a; D) A( D
  22.    * @param $server
    ( Z; L) ?+ c- R
  23.    * @param $user
    - X2 \! U$ Z7 x% w: J: j
  24.    * @param $password# K! Y; t6 w6 _4 D6 S1 K
  25.    * @param $port
    5 V3 a2 b# w- a* X5 [
  26.    * @return Mongo
    6 X& Q5 H1 R( m2 A
  27.    */. M  P8 {! Q; p/ ~+ p$ F
  28.   public function getInstance($server, $user, $password, $port) {1 W! R# j5 Q4 }* n( _
  29.     if (isset($this->mo)) {
    . {* W7 O, t" |
  30.       return $this->mo;
    1 R6 l5 Y( Y; G5 U+ @
  31.     } else {. U# `: V1 u: }7 p* \( L
  32.       if (!empty($server)) {2 t9 y7 {9 l) O# `  l* C
  33.         if (!empty($port)) {
    0 A+ v# `2 V1 ~6 g5 x* \3 e
  34.           if (!empty($user) && !empty($password)) {8 R% F+ t7 B& e, g! ?3 ?+ s
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");4 l5 ]: K" q. a$ @# Y0 t. {
  36.           } else {
    % q: C- j& i, i* e8 E; t
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");7 H; _& R' |- v$ Z% k7 e! a/ @
  38.           }
      B+ ^; Q, |2 q' m, y; e
  39.         } else {' z4 i( X7 [5 T, B2 N7 }; F9 d
  40.           $this->mo = new Mongo("mongodb://{$server}");: V9 d' S1 E) F5 w& k. b) r
  41.         }
    ! Y& L) O7 c. F: a
  42.       } else {) f. k. A' J- x2 ?, o, o9 i% m
  43.         $this->mo = new Mongo();
    ) F$ _' [% C$ R* _5 ?
  44.       }; H. g& l% [, l% a# ]
  45.       return $this->mo;* v8 u* E3 R% k
  46.     }
    ( h# F' ]& ^0 r/ W
  47.   }
    , W# X0 c9 o, X/ M2 w% `
  48.   /**' I6 x% D- k- B) N9 J, z: ~/ X9 G
  49.    * 查询表中所有数据
    " p) n! Y, m# e9 m: |5 q2 G
  50.    * @param $table
    ) U/ Y4 `1 U% h
  51.    * @param array $where' d1 B3 _# ^/ Y2 t+ M
  52.    * @param array $sort6 s8 g! ]8 M$ @
  53.    * @param string $limit# `+ C! j8 c4 P% I5 K
  54.    * @param string $skip1 d' [, g' |, r; f7 g1 L3 O( K
  55.    * @return array|int4 f# f7 x: f0 M! \3 o
  56.    */  z% O0 W2 f% L- v2 j% }- e
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {! ~6 f) @3 A' ~% z
  58.     if (!empty($where)) {. k- }4 b) `  j3 P# r) r# K  k
  59.       $data = $this->database->$table->find($where);# N, v' [/ ^  S# I5 G* P+ D. B+ W
  60.     } else {7 E2 E: v. U# ]- O
  61.       $data = $this->database->$table->find();
    & `7 @5 g' u3 n. H
  62.     }3 I; I  o) f$ D0 \
  63.     if (!empty($sort)) {
    0 e; g6 V/ s% h5 T, m3 w  L
  64.       $data = $data->sort($sort);/ a# [9 F! |. O* n* A" I3 c% D
  65.     }  K! q; o! H+ G, j: m& [% t- G
  66.     if (!empty($limit)) {6 F$ I" v/ `& n' w
  67.       $data = $data->limit($limit);/ j# ^! ]' z) q, c. J
  68.     }
    ; A  B3 }, S' d# ?
  69.     if (!empty($skip)) {; t# A: k3 N& v9 `9 V
  70.       $data = $data->skip($skip);
    & J8 p! w- o. s* l6 f* P: V9 o& S
  71.     }
    2 S5 I( v2 ]: P4 z! B" j& @9 k) R; Q
  72.     $newData = array();
    5 U1 `  \2 M  k; T
  73.     while ($data->hasNext()) {
    * N& M2 o/ P2 Z3 g
  74.       $newData[] = $data->getNext();7 u6 t5 h( d* \: r, N2 [6 T
  75.     }
    % t% B8 S5 n$ g" a
  76.     if (count($newData) == 0) {$ [" n6 ?# n, g) ^* [
  77.       return 0;6 o- D0 D; [8 v3 @( j+ B
  78.     }& [. t* ]- F5 u  X( m
  79.     return $newData;
    4 C, {" e3 w' {. j8 X8 v, X/ `
  80.   }
    % G' Q/ J) `+ q
  81.   /**- l& a& u" U0 q3 Z5 r, K* B
  82.    * 查询指定一条数据
    ' \+ S: m7 r5 u8 ?1 n
  83.    * @param $table
    ! X' |$ i! p$ P/ v) S
  84.    * @param array $where& u1 h$ E% Z) i5 n
  85.    * @return int7 q+ A+ q8 `: M/ L+ C
  86.    */
    ; G8 A8 f; G  F, x6 \: t! Y3 T
  87.   public function getOne($table, $where = array()) {0 ^! g5 J1 B5 i+ R$ T
  88.     if (!empty($where)) {) w" f+ O" l! ]- B7 ]. B
  89.       $data = $this->database->$table->findOne($where);5 }) a0 o0 D+ M: @3 Q' a; r
  90.     } else {* S& I8 c# ~$ [( Y# P- h
  91.       $data = $this->database->$table->findOne();
    2 R$ s# P" {3 J$ B
  92.     }% s0 @. m9 l, E8 p
  93.     return $data;  K6 `  K/ d  x6 z' K4 H; n
  94.   }
    / H5 c. {. t# q! h
  95.   /**
    + n' ^: R3 o' Z
  96.    * 统计个数
    7 x( p0 y2 C% k4 X! `: ?
  97.    * @param $table
    ' j6 t) z3 b) o, B6 I7 n
  98.    * @param array $where5 A0 u& ?& G' F/ H& P: m; e
  99.    * @return mixed
    5 {, D& @- |' k( k+ _" o+ U$ a/ I7 ]1 [/ ~
  100.    */" s( H' X$ z4 T8 }6 \. H& N: T- F  t
  101.   public function getCount($table, $where = array()) {
    6 V7 n* {0 [6 L! W8 G+ k
  102.     if (!empty($where)) {( \3 ~0 j- y/ u" W* n& Q- U% F' z! C1 O$ u
  103.       $data = $this->database->$table->find($where)->count();
    4 M! ?2 j# q8 q9 n0 z
  104.     } else {+ \9 u9 A: x/ q8 H( n% ^1 t1 w
  105.       $data = $this->database->$table->find()->count();
    ( s4 @" B; Y# }# y
  106.     }, e; g- d; Y/ d& ~- z
  107.     return $data;
    ! m5 c! E3 r% t% r. R
  108.   }
      n  s6 n: M% s3 W% K- ?3 _
  109.   /**( p5 l0 S4 b& H- J
  110.    * 直接执行mongo命令/ r3 g' e9 w! |* i# ^
  111.    * @param $sql
    + t& w( t3 X, {: X% Z/ j  N; J+ A! R
  112.    * @return array
    4 I! p# N7 ^# K& z5 \0 O2 F0 O
  113.    */
    $ \: ]  ]: m6 E0 c: e
  114.   public function toExcute($sql) {
    8 t2 h$ _+ P, i! l& O4 B- R! N( A/ U
  115.     $result = $this->database->execute($sql);4 @0 A, H2 y8 H
  116.     return $result;
    & b) B" j5 X, o8 d
  117.   }/ }& E" j# k% O6 }4 S* f
  118.   /**3 P' v( Q: @- k. p) o2 H' n1 T
  119.    * 分组统计个数% y( Y2 X1 T" a% D( S& q; f
  120.    * @param $table
    0 C; Y# y& G) h! \' N( }
  121.    * @param $where
    % J' a8 s" g/ O* A5 q/ B
  122.    * @param $field
    ( R0 T9 b" V0 c+ a! O/ U
  123.    */$ o8 p- K) P  F* R# e) n
  124.   public function groupCount($table, $where, $field) {
    % ^( k+ L- I; @6 a. T3 }; x: s' }3 T
  125.     $cond = array(
    ! j" L+ {7 M0 e0 p4 d
  126.       array(, u7 M; m! y% ]5 K' C
  127.         '$match' => $where,
    & L& r0 P) D; J$ e
  128.       ),, D, e2 c) I4 [
  129.       array(
    : `1 T& b$ y, J0 F8 w$ T. _6 B
  130.         '$group' => array(- ?& \! I4 K$ Z  p/ y
  131.           '_id' => '6 I  |' O  B/ C& Z# z$ ?$ E
  132. : x# {4 t6 ~# f3 e  f( ?
  133. . $field,
    ; S& [. Q) T- A
  134.           'count' => array('$sum' => 1),
    $ t% T6 U7 B/ ?8 v: K2 [8 t
  135.         ),
    1 y) X' F! g4 T
  136.       ),4 e- v& k' Z# A5 @" v: m' N, Z1 O
  137.       array(
    ' T9 K2 q- ]% D# h; m" a* F' t
  138.         '$sort' => array("count" => -1),
    , ]3 ]0 G: r6 F" L. V9 `* C
  139.       ),
    : s; q' I' `$ F+ E* n3 W
  140.     );; W2 Q+ P4 Y  F
  141.     $this->database->$table->aggregate($cond);$ Q% O3 t( j) F( y6 R
  142.   }4 z% ?4 q; K6 i2 i2 E- D! i3 Z' j
  143.   /**
    5 s) M: t0 e$ R6 l  I" L1 F/ c
  144.    * 删除数据
    % X/ g- \' C/ w' M4 H+ t
  145.    * @param $table2 ^* l3 |9 O3 s$ {
  146.    * @param $where$ w) U) G% U: x% o$ N, G
  147.    * @return array|bool8 h- P, O. Z9 n+ `- S5 A5 B; M
  148.    */
    ; |) q9 K1 }) J3 ~( X% ]( T/ v5 Y
  149.   public function toDelete($table, $where) {
      p  A) U! X4 z3 h2 t
  150.     $re = $this->database->$table->remove($where);
    . U& ?+ X7 N; F: }: z1 k
  151.     return $re;
    ; L$ ?6 w( o2 f2 W, y6 u+ O
  152.   }8 z+ X% g( U+ h
  153.   /**
    / q6 G+ {9 p9 z+ K* A( Y
  154.    * 插入数据5 R* e8 a5 }. ^6 C! A1 d
  155.    * @param $table
    6 N" @- z: O  v. P
  156.    * @param $data
    : R' Q9 O* S3 W  K" }
  157.    * @return array|bool
    , I( J- p3 O4 d" i( d
  158.    */) ^/ ^) P) t# o) A! O  u
  159.   public function toInsert($table, $data) {
    , r5 Z4 {; o1 c) m
  160.     $re = $this->database->$table->insert($data);0 u) A! ?! e5 t' }
  161.     return $re;
    9 X9 W3 [: b1 h6 X8 E
  162.   }
    0 N5 G0 ^& M6 W1 \
  163.   /**
    , x+ G4 x/ e1 B/ x2 u
  164.    * 更新数据
    ' }* }9 y3 G, \, u$ C3 S" l
  165.    * @param $table: Q4 N4 v. R! }" H) b9 d
  166.    * @param $where& q7 J3 M/ u& y9 M+ j
  167.    * @param $data
    ) Q" B3 b% }' j
  168.    * @return bool
    5 ?5 E. i& v- I+ b, N. ]. U" s
  169.    */
    6 O  U9 T+ [2 r8 c3 y% E
  170.   public function toUpdate($table, $where, $data) {+ t  I, c1 C8 a- b
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    4 B9 u" P! F' z2 p
  172.     return $re;' Q  T( k7 F& l( ~: k
  173.   }
    2 d" y# R+ |0 i7 i& S) y0 e+ x
  174.   /**4 w: \- A( t+ |
  175.    * 获取唯一数据. w4 c: F4 I# w' ]* U& J/ Z
  176.    * @param $table+ R2 a8 {- S" H- w5 s5 }
  177.    * @param $key
    & B7 ?: y  W' _( a$ ^6 y$ n9 S* y
  178.    * @return array
    . Z/ U1 Z4 t9 X  c$ _
  179.    */
    , a' P9 @; H* `/ P/ N
  180.   public function distinctData($table, $key, $query = array()) {* R6 `3 N( y! r) E0 l  f
  181.     if (!empty($query)) {
    ; V% g# {5 N. l$ C# ~
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);" N5 G3 F3 j; \: P  g- {
  183.     } else {
      l! |6 M7 `; }1 j/ s8 o
  184.       $where = array('distinct' => $table, 'key' => $key);
    ! f+ x2 j2 `7 F/ q  K+ N
  185.     }# X; X/ Z1 v! l- M! d# w
  186.     $data = $this->database->command($where);
    ( _: B/ R1 q) Q$ \
  187.     return $data['values'];0 v7 b; N! q6 a' }. }/ p. Q
  188.   }
    8 P  n5 ^( e' a
  189. }5 ~! x  @: b, J% h& n
  190. ?>
复制代码

: G' b: e# M0 \1 c8 ^4 e$ r/ W' n6 v! A! T9 r; X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 16:02 , Processed in 0.065039 second(s), 20 queries .

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