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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。; b0 Z# k* k) |2 B) |) R: S! J
模式自由。
) s1 |2 ~0 J  @: A支持动态查询。
: g3 l/ }5 Z4 a9 z2 j7 w支持完全索引,包含内部对象。# B4 ?3 s2 I+ I( d; b7 {3 x$ x
支持查询。% ?3 q% N$ Z& D* F* \
支持复制和故障恢复。0 {/ O+ z6 N8 b! [
使用高效的二进制数据存储,包括大型对象(如视频等)。1 I" O, S6 t/ y7 p' x( [
自动处理碎片,以支持云计算层次的扩展性& ~7 M  j' ~2 [, h. R* v3 @  x' ~
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
0 I# ]1 w5 ^1 [. r2 g( n文件存储格式为BSON(一种JSON的扩展), d; T3 `8 Z9 O0 i& \* U) r
可通过网络访问

所谓“面向集合”(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% C( I0 @; B% T! c
  2. /**8 q+ ^5 o5 r2 i
  3. * PHP操作mongodb数据库操作类
    , G' D7 y  S8 ~# j) Z  M
  4. */
    # W$ C& t( t2 s1 @
  5. class Database {2 F7 t8 G. |; t- u
  6.   protected $database  = '';  W: `2 ?* `! B. e" I9 B  _
  7.   protected $mo;
    + H$ T0 Y* i" |% A
  8.   /**$ _0 y; |' n; J3 ~" d1 C
  9.    * 构造方法
    2 n0 o2 B/ s* k6 m6 P: |
  10.    */
    - u; m  ^- t0 [
  11.   public function __construct() {5 _0 ~! |, `: U& l, G
  12.     $server = DBSERVER;8 Z( y: K8 E  y& }: B! F/ E
  13.     $user = DBUSER;
    5 H- A4 I: a8 s1 }$ A
  14.     $password = DBPASS;- V7 q8 Y: w2 Y0 G6 C  P
  15.     $port = DBPORT;% w' k; A0 h8 \" _7 W  M+ c; k! W+ f
  16.     $database = DBNAME;1 e  l% e( y1 k& R, K9 t, e
  17.     $mongo = $this->getInstance($server, $user, $password, $port);& }" }8 j+ ~6 ?3 i9 {% z
  18.     $this->database = $mongo->$database;
    - L+ `$ l) c( ^2 _6 {; D5 O8 d
  19.   }# c& D! E% x: e: j. o1 y
  20.   /**" \- H( g5 ~! o0 k' D- g' g+ a6 j
  21.    * 数据库单例方法
    ; C6 a# @0 Y8 C4 k
  22.    * @param $server, S; W5 _- @, x0 R$ ]
  23.    * @param $user
    . ?- t3 i. o' Q' S# m& w2 x
  24.    * @param $password
    ) [0 H0 V  A8 F, r
  25.    * @param $port9 V* E; M3 T& n$ T
  26.    * @return Mongo
    ) X7 b+ x) A" ~
  27.    */
    . k* K) k* t1 d2 Y7 J& ?7 ?' D( V
  28.   public function getInstance($server, $user, $password, $port) {2 Z& \3 j% X  E' A! h% k
  29.     if (isset($this->mo)) {  P: E3 L! L- C0 p* t! |& {3 j7 n
  30.       return $this->mo;- O# o  j3 J+ O- A% I
  31.     } else {
    3 z7 u% @' C8 @8 s) M" `
  32.       if (!empty($server)) {6 }+ s, p0 M: s/ m# _8 G
  33.         if (!empty($port)) {1 `1 p( _+ s6 X# P
  34.           if (!empty($user) && !empty($password)) {* |( r* W2 M# r  d6 r" W7 z) o
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ) }2 [! Y8 R  M& D5 t: Z# R
  36.           } else {) b* `  [( |3 W: I; V6 C% M+ ~
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");/ ], i1 N8 U' F0 V! Q2 J. X" Y/ N
  38.           }7 u* a% j- ?# [$ ^* B0 W
  39.         } else {  w. C2 I7 ~! T( u% g
  40.           $this->mo = new Mongo("mongodb://{$server}");
    # ~8 {( @4 R- |2 p/ d9 c
  41.         }
    0 L' \: B% G4 P) B
  42.       } else {; I; A" ~9 j+ ^' L9 ?: o5 j
  43.         $this->mo = new Mongo();4 a7 S3 |( X0 u, I3 f6 N0 W. A2 u
  44.       }
    * g- ?! ]* i; W; t3 e
  45.       return $this->mo;1 J- Y, |" d) K$ J$ ~* h
  46.     }, R3 w; h- ?( W9 a+ t+ I  C
  47.   }
    3 `: P$ E/ N" V2 S' L
  48.   /**
    + V& W4 k. g, \8 i8 {: ~; N
  49.    * 查询表中所有数据
    ! \, Z; {$ x& E4 w
  50.    * @param $table) _$ u' K" e2 U: H3 W3 Q# w
  51.    * @param array $where8 n$ l1 H6 y- K. s1 ?
  52.    * @param array $sort! h! z  L1 A' D8 Y3 {6 [$ ~3 Y
  53.    * @param string $limit
    + b* ?% U% d/ `7 g
  54.    * @param string $skip
    # }9 R, ?7 v1 m0 i4 @$ F6 M4 z$ k
  55.    * @return array|int
    , ^2 Q% F5 F1 O3 q; K
  56.    */& A  R/ V7 z0 j  d9 X, D' ?
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {7 Q( F5 U, M9 b: N" v4 i7 u
  58.     if (!empty($where)) {5 n  L4 t- q/ {% a
  59.       $data = $this->database->$table->find($where);. r4 ]" _/ t8 l; H7 N  N
  60.     } else {6 y/ h) ~7 a3 `! }
  61.       $data = $this->database->$table->find();. b: G% a( J* V/ {' M
  62.     }
    * {  z: C! f% F
  63.     if (!empty($sort)) {
    / K6 o' _! w: B! J/ Y  S+ s$ D
  64.       $data = $data->sort($sort);
    0 i# `; G, x) W& \' {
  65.     }
    8 }  Q3 O$ }' [0 w
  66.     if (!empty($limit)) {6 j& W/ E5 b! q* g. G; H1 J
  67.       $data = $data->limit($limit);
    ) i$ h- z' ]* k
  68.     }
    + S. n7 P6 n3 Y! Y: m
  69.     if (!empty($skip)) {7 c: C: |8 m6 b# r
  70.       $data = $data->skip($skip);: ^1 t% U3 o. d: ]- j) i
  71.     }
    . O6 J4 E' Q2 ^) P* r
  72.     $newData = array();. k8 p$ H4 W4 ?
  73.     while ($data->hasNext()) {( g( s: [7 E0 |( i6 i* e
  74.       $newData[] = $data->getNext();
    ! z( V  F  S! n: L
  75.     }
      Y: |) y7 m' {7 y2 y$ u7 c
  76.     if (count($newData) == 0) {
    + N2 D* I, t) e1 ~5 J  M7 ?
  77.       return 0;
    ) i0 I8 H& Y3 F* k7 m0 ]+ H
  78.     }; Q! q& x6 x. n& q  G
  79.     return $newData;# ~0 P0 a0 c4 m; Q
  80.   }
    7 T) H" G7 `3 Z' c# J! L
  81.   /**
    3 J; Q2 T6 j/ }6 w0 |
  82.    * 查询指定一条数据
    3 n. m  Y! E* B- r" a3 Z
  83.    * @param $table
    $ M( }: w/ l4 [! p$ r
  84.    * @param array $where6 G0 n' n+ V: K. r9 B
  85.    * @return int
    $ z1 W) o, \' r3 _$ z3 \2 w( T8 w4 K; S
  86.    */
    9 m$ L4 Q, |1 S7 x  a  j; T& h6 s/ z
  87.   public function getOne($table, $where = array()) {
    : r1 P. m1 ~9 V, s$ P0 i" K: k
  88.     if (!empty($where)) {
    7 h1 ^. E) U  V% v, I5 W% ?
  89.       $data = $this->database->$table->findOne($where);
    % Q: V( J9 y5 F- _  A  t+ q
  90.     } else {- u$ f8 Y' \* l0 G- d
  91.       $data = $this->database->$table->findOne();  ?! ^6 I) N. S: p0 I2 b2 ?" W( X# Y9 J
  92.     }
    8 O* X% I+ v+ ]9 K
  93.     return $data;# N+ U2 h1 D- n; H/ O2 U# ?
  94.   }  J' A( w% X0 q; d
  95.   /**
    % a- _2 t$ [, I
  96.    * 统计个数
    ' @# [$ e  Q% H) K6 A9 a# a
  97.    * @param $table$ Z, Y( b4 H$ b3 G
  98.    * @param array $where6 b/ w) W/ e1 `5 W" t4 e2 k
  99.    * @return mixed
    3 F$ x9 ]( D' o) y2 Q. ?
  100.    */
    & Q8 Y& _. w* t
  101.   public function getCount($table, $where = array()) {
    ( k2 j! x" {  m3 @) T/ L
  102.     if (!empty($where)) {2 L1 x/ S' u3 @, K
  103.       $data = $this->database->$table->find($where)->count();( @* W3 V$ T4 E% f2 N3 n
  104.     } else {% l  `& Y3 F3 e% J3 U. q  ^
  105.       $data = $this->database->$table->find()->count();
    4 ^$ G+ j% n0 B
  106.     }3 g- Q; [: v6 I9 v" f( Q+ |
  107.     return $data;
    : S1 ?, J+ z% L) e
  108.   }& A8 N# T7 Z4 s2 f& O: e
  109.   /**
    * Z! I) o3 S9 \+ _
  110.    * 直接执行mongo命令
    7 \" M+ {" X0 d" Y) k
  111.    * @param $sql
    , w; @( z; z, B, n- ^: @9 w
  112.    * @return array; e& e5 O, G' y" @# m; }
  113.    */  }) {+ O. ?/ n
  114.   public function toExcute($sql) {7 L4 o4 O% e5 {8 U
  115.     $result = $this->database->execute($sql);
    % c0 x+ o& X- O" [$ l# a5 x1 G. A
  116.     return $result;
    , p2 A/ M4 I; E' S& b
  117.   }  f2 L' f4 ]  l
  118.   /**+ w( D( }% J- w- Q% K
  119.    * 分组统计个数5 ?( B& H# U! V
  120.    * @param $table
    5 R7 F5 r. o$ F( t
  121.    * @param $where
    / b# b9 Y0 t# x. G8 E, r
  122.    * @param $field) _& b  Y$ [( x+ G5 @
  123.    */  X# _. J# }2 N6 i2 a' Z, b. Q
  124.   public function groupCount($table, $where, $field) {
    * Q- {' V8 j+ \) l0 M  x% F
  125.     $cond = array(
    ( w3 p, D3 |7 O$ x" K
  126.       array(- G4 m. x7 p0 y/ S
  127.         '$match' => $where,9 X! d8 S: g$ b: h: N
  128.       ),
    1 d5 t; }9 k+ ~# x
  129.       array(2 `2 ~& z3 w% W3 E
  130.         '$group' => array(
    8 O; k+ k# s- s9 e" d
  131.           '_id' => '
    9 v1 r/ |  c  t" \

  132. , b% u! D4 V, A0 A* g
  133. . $field,
    , c; b' q5 T/ S' ~
  134.           'count' => array('$sum' => 1),
    + M/ M  A0 Q" p
  135.         ),7 E; |. |7 @# [9 Q4 }4 ~$ E
  136.       ),
    6 P! t) F: A% I4 d
  137.       array(
    ( r9 ?$ x1 y* t) T+ t
  138.         '$sort' => array("count" => -1),1 K; m3 ^3 E3 \! u/ a* R
  139.       ),& h1 l" N! w4 C' Y4 n2 Y3 O$ t- D& c
  140.     );
    # C5 {; q& Z+ V2 L
  141.     $this->database->$table->aggregate($cond);
    , q" _7 f6 l7 @8 F" ?$ E
  142.   }' Q; S/ Z1 {( V. u+ Y  i! m
  143.   /**9 A6 R% P1 U* v% C, [8 U& @$ w
  144.    * 删除数据! d4 S) y7 N' X
  145.    * @param $table
    ! [- Q% ?' h3 j! R
  146.    * @param $where
    7 Z5 a. {+ {1 a8 y0 \
  147.    * @return array|bool" C: @; u$ r6 L2 F) c2 Z
  148.    */
    3 ?' k5 e+ V, M# Q2 H8 t# [
  149.   public function toDelete($table, $where) {
      c8 |' P' _- n% b. s( t* b
  150.     $re = $this->database->$table->remove($where);% }6 m1 `2 e6 b7 h
  151.     return $re;+ I* q2 Y2 d1 P+ F
  152.   }
    ! Z# ^7 F6 L( E: M! j
  153.   /**
    3 K6 `# @& C. Q% i" l
  154.    * 插入数据
    : O, @2 F. m3 L
  155.    * @param $table
    6 ~' w! \- L2 d" r' r
  156.    * @param $data8 g# e9 m5 [: I$ e1 w! ]5 X
  157.    * @return array|bool
    * m- B. o% i' f3 ?$ B# u
  158.    */: y2 R) o) R2 O/ @- P0 Q! I
  159.   public function toInsert($table, $data) {7 P2 B. H& L' @# |; I
  160.     $re = $this->database->$table->insert($data);
    1 R, G! t6 l+ T* e4 a4 X* n8 X
  161.     return $re;
    & {: }. J# e9 n4 ?- p' t
  162.   }6 v* b; j0 v. w+ m7 `" Z
  163.   /**2 Z3 B5 ~; u& S( m
  164.    * 更新数据* C) s6 i( H7 O' {
  165.    * @param $table
    ; I1 d: u0 U% r; }
  166.    * @param $where0 t1 _, ^! X% o% w+ A, h# z" K' V/ Y
  167.    * @param $data
    % z* n/ ^4 ?* M
  168.    * @return bool
    , H* H' Y. {& K. Q$ i
  169.    */
    5 e) `# _/ l9 K
  170.   public function toUpdate($table, $where, $data) {
    5 S+ A( l+ d% M  Y# R
  171.     $re = $this->database->$table->update($where, array('$set' => $data));+ U+ M# a/ Q% L! B8 |
  172.     return $re;
    - Y' e8 C5 {! z/ W
  173.   }- h; M) e' R& E, r. Z' E5 E
  174.   /**
    7 l. ]1 X; O) o& ^5 D
  175.    * 获取唯一数据# h/ e$ C0 M. F& d2 ]) w
  176.    * @param $table
    " f! [1 `- _- R( }: Q' V
  177.    * @param $key
    ' L& O5 K1 x/ N0 b
  178.    * @return array3 f, g5 Q8 p! h; z3 q* }
  179.    */6 R$ X+ X& Y+ f1 w: ]
  180.   public function distinctData($table, $key, $query = array()) {8 r6 n8 C7 A+ r% t2 a
  181.     if (!empty($query)) {4 I& V1 y# P$ ]  B' B( G
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);( L, S; x" \; e+ c4 q5 h7 J* \! [9 @
  183.     } else {
    / b- ?" R( h4 c# g9 G
  184.       $where = array('distinct' => $table, 'key' => $key);6 Q8 L6 Y; m& l. T4 z
  185.     }; Y: Z9 A/ H5 u/ y% O% z, @" L
  186.     $data = $this->database->command($where);. K* \$ v; W5 j5 @! g( Z
  187.     return $data['values'];' k* W' B% ~/ q; e" ?' a
  188.   }& V9 g2 h- b0 j
  189. }
    : R" @. Z% W+ a: v3 W' h
  190. ?>
复制代码
; I& H/ E1 Y- X

1 K& [$ [1 e1 X: u9 `* o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:53 , Processed in 0.057279 second(s), 19 queries .

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