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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
/ V+ T& G, h0 ?1 ]& M1 l' S. R模式自由。8 L8 \' d; n# y9 I
支持动态查询。. L- R4 {; f% n/ ^3 b1 V
支持完全索引,包含内部对象。
% \* a  A. j! f* K支持查询。- `6 Q/ f9 [  N) N8 F: J# a7 i
支持复制和故障恢复。
/ f4 {1 G% E$ i8 k# Z6 ^3 }使用高效的二进制数据存储,包括大型对象(如视频等)。; B! q' G& K( {. C; g7 x* k% \
自动处理碎片,以支持云计算层次的扩展性0 [- n2 K1 g! W4 }' m% H! c- z
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
9 f7 g' T3 {( B  e1 T文件存储格式为BSON(一种JSON的扩展)
, _, S7 ]3 M$ \2 N/ Q可通过网络访问

所谓“面向集合”(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! }; `, _; X' r9 [/ Y; _, |9 H
  2. /**, _5 J% S1 G# j/ f8 Y0 I
  3. * PHP操作mongodb数据库操作类
    # g6 y. l$ ?7 H( w3 U: S
  4. */0 U' k" ^' w* z8 I) d( h+ [
  5. class Database {; G8 Y9 c& m; ?( h' m4 ?! ]
  6.   protected $database  = '';  T( i7 L6 a' P
  7.   protected $mo;0 m4 t) e3 l- S0 k+ U
  8.   /**' w8 O, ~9 P7 A6 E; ~( }$ i
  9.    * 构造方法
    0 m& Z" E0 [8 N4 O1 Y4 ?
  10.    */
    7 J) J4 `! e( J% j, s
  11.   public function __construct() {
    5 }3 {. `  G4 X# c* C" _
  12.     $server = DBSERVER;
      \' L9 S( m: s# M; B2 N
  13.     $user = DBUSER;
    6 s9 W6 X% ~9 I6 f3 n0 C
  14.     $password = DBPASS;
      ^9 _. T* ~3 N2 v+ a. f0 V' M2 I+ ]
  15.     $port = DBPORT;
    ! R$ ?; P. y$ y. z
  16.     $database = DBNAME;9 {/ H* b1 z6 |$ n) Q( l! |" f
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    & ?! S4 w/ J4 |) t( p. D$ A: ^: k
  18.     $this->database = $mongo->$database;
    # e& Y) {# X. s4 `5 C3 b- \9 {
  19.   }
    ! C, U4 {* v* P4 D$ q% e4 e* G
  20.   /**
    ; g2 ?2 b: Z, j( i/ i& c) P
  21.    * 数据库单例方法
    " N( d/ V8 l8 q8 c# q
  22.    * @param $server3 v  U; P4 O1 y% M* I
  23.    * @param $user3 H' G/ a4 v+ V* q* Q# C6 {
  24.    * @param $password
    , z# R4 P5 B* \2 G
  25.    * @param $port
    6 z' u  n" K* o
  26.    * @return Mongo6 f1 }1 u( ]0 ~' X6 X
  27.    */1 G( ~* p7 J# g. q
  28.   public function getInstance($server, $user, $password, $port) {" _2 m" s$ j3 ]- G/ Y" [
  29.     if (isset($this->mo)) {& C" @# x' G/ g, O
  30.       return $this->mo;
    % s2 ]$ W- g9 T1 _
  31.     } else {, z& t. h9 z" H  n0 |2 w; h
  32.       if (!empty($server)) {
    7 P/ s9 _2 B% M5 `
  33.         if (!empty($port)) {
    - n4 q" \* H! K) E
  34.           if (!empty($user) && !empty($password)) {
    ! x" ?# R; P. L9 Z6 o7 c* v
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");6 x& l" ~. o8 L6 L) ?
  36.           } else {
    0 Y" J2 T. p4 \/ ^
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    . k  J7 R& k$ d1 d( }( L
  38.           }
    ( f1 @, Y$ x" D6 H3 d4 C
  39.         } else {, i& `  }/ N: Q" V6 O. V
  40.           $this->mo = new Mongo("mongodb://{$server}");- V+ V6 `( K  \( d
  41.         }  [' i; _5 [- N8 C! B& o
  42.       } else {
    5 f2 M$ _0 I9 C, X2 {
  43.         $this->mo = new Mongo();
    ) F: s* l4 x/ E1 [4 `! D, B
  44.       }
    ! n* J6 g; o" R2 [' |  p5 T6 Z
  45.       return $this->mo;+ v; p  a+ u/ t5 p$ x! F
  46.     }1 i* p$ t0 a$ ]/ U( J9 O, m
  47.   }
    ! V4 Z8 o) j6 j3 K+ |
  48.   /**' s5 ~% _! C# Z% s0 G# p
  49.    * 查询表中所有数据
    ! O4 i: o! i7 ]( j
  50.    * @param $table2 |, O8 J" i: r1 i
  51.    * @param array $where' q% K9 p7 K4 ~# n
  52.    * @param array $sort( z7 w4 E8 y, U9 U
  53.    * @param string $limit
    - x- I4 g! D+ U, |5 G
  54.    * @param string $skip2 L8 t1 T1 j$ O
  55.    * @return array|int
    + ~+ t2 K6 q3 W- O7 Q3 n
  56.    */
    ) d0 j, f" m. z# M6 X
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {/ n$ d' p4 A1 @* H5 H
  58.     if (!empty($where)) {( Z5 A0 s+ X7 A# ^  k5 N6 R, U, z
  59.       $data = $this->database->$table->find($where);9 ^# J' t( j4 r1 K; i
  60.     } else {
    - t* v, j5 S8 d5 r) a- f/ f6 A
  61.       $data = $this->database->$table->find();7 H, z1 W- {% O. G
  62.     }4 e  D( D, L- y# q* |7 z0 `$ V* R
  63.     if (!empty($sort)) {
    1 t# S! \- ?( S& Y
  64.       $data = $data->sort($sort);# y% q+ ?- d" P8 V5 C6 i
  65.     }
    , M+ z: M' T4 Y& d
  66.     if (!empty($limit)) {4 Z6 D: a& B7 x# i) U' [* A
  67.       $data = $data->limit($limit);
    + N: t# [+ ]* Z
  68.     }
    9 c! Z2 q+ W9 W- i- f
  69.     if (!empty($skip)) {8 r' w. y+ z! y1 q2 d
  70.       $data = $data->skip($skip);* c% `! W9 Z9 y6 p) W& z- x# z' e
  71.     }
    ( N  d: s) H$ l& d
  72.     $newData = array();
    / D  C* t) g& I. {! P! {
  73.     while ($data->hasNext()) {, }; m2 f5 f6 Q. t5 B
  74.       $newData[] = $data->getNext();* [6 d  X) ^* Z1 O
  75.     }
    / W- d! i5 M& I0 l2 t& P' w: o
  76.     if (count($newData) == 0) {
    6 d( a1 V1 W1 ]# l2 ]
  77.       return 0;6 P( W  ^5 f- S6 y+ |& T* T
  78.     }0 L: ?% J! O5 r
  79.     return $newData;# v( h+ _, H  M' H, E8 L7 T* ^
  80.   }( f' r7 F2 O0 p' z9 X6 ]
  81.   /**- r; `+ H  ?" P
  82.    * 查询指定一条数据4 e9 p% S7 G1 X. m* _% G
  83.    * @param $table
    % s$ C" M  m  E1 ^' U
  84.    * @param array $where" c  }, n7 r+ M9 C. r: A
  85.    * @return int& A: k% H& z6 r# o! W0 a/ E
  86.    */) D" i9 a1 N$ Q3 ^+ O
  87.   public function getOne($table, $where = array()) {. j& `; X7 A* q" [$ d7 Z4 w5 |
  88.     if (!empty($where)) {4 x- [& `. z# K
  89.       $data = $this->database->$table->findOne($where);5 r: Q2 k( K7 k$ a5 `4 }; y
  90.     } else {4 W9 ?" X: x, [: c( I% [+ o
  91.       $data = $this->database->$table->findOne();( C. s- I" q/ s7 o. ?2 Z
  92.     }  x4 {5 W0 O; }+ Z
  93.     return $data;% P! @! G  {% `
  94.   }3 k( l1 x8 v" R. Z
  95.   /**/ F" U# M( \2 {) |
  96.    * 统计个数( L: ]& _" k  i2 _
  97.    * @param $table8 h* b6 p1 y- A0 s7 G. u1 ^
  98.    * @param array $where
    : x, k2 r/ T8 S
  99.    * @return mixed
    - L. r* K9 o$ n
  100.    */
    9 }# h: Y( I7 ^
  101.   public function getCount($table, $where = array()) {
    ! U, O0 {( }4 A
  102.     if (!empty($where)) {
    " K- l7 S3 K1 l  o6 P
  103.       $data = $this->database->$table->find($where)->count();% O% \; V0 G  j: M
  104.     } else {
    8 {" h- ]# N1 I' m) `+ s
  105.       $data = $this->database->$table->find()->count();
    - q1 N( t) V8 U5 t+ H2 i
  106.     }
    2 N  }! U8 c' \' l4 ~* T  o
  107.     return $data;
    , q- z8 S" ]8 O2 q% r% s
  108.   }" t+ g5 q$ g6 W' g/ B# I" L% q
  109.   /**
    8 T! E' r4 Y; W  v! m( q
  110.    * 直接执行mongo命令
    6 {$ ^5 Y' X, k, p. l
  111.    * @param $sql
    ( d6 ]) D# I6 g, \. H: J/ v2 t* L# _
  112.    * @return array
    * K* C* ~$ P* L& D2 }5 z
  113.    */
    - [  m: @) b1 T, b4 B
  114.   public function toExcute($sql) {
    ( a6 e7 M8 K2 u; V
  115.     $result = $this->database->execute($sql);
    6 l( p* h; _) n, x
  116.     return $result;0 ~# N! d; U# u
  117.   }
    " c* U( [5 A# x7 p8 }2 W
  118.   /**& m9 p' @: P5 L: W( `$ H  Y/ p. i
  119.    * 分组统计个数* ]1 N$ |5 H7 Y0 z6 b
  120.    * @param $table
    1 m! N! f' ~$ n# B0 i
  121.    * @param $where
    * w/ f4 O/ e9 z  H
  122.    * @param $field
    # J: N. S% P- Z, t4 B  J
  123.    */7 I& z; ^; |# U
  124.   public function groupCount($table, $where, $field) {
    4 u$ S8 a) O  B
  125.     $cond = array(* W. B6 u' ^  o/ c/ ^/ o2 H  X
  126.       array(# Y3 ^7 ~" e) c4 ]6 ~& Y, P
  127.         '$match' => $where,7 M# c- U" i; }% g5 H# S
  128.       ),
    - r! R" @/ s3 h8 l; Y6 s
  129.       array(
    + w; n- y' B2 l, f/ J. @0 |# q' w' I
  130.         '$group' => array(
    , Y+ V5 w) T( k* i% r1 ]" z7 n0 @
  131.           '_id' => '
    + m) h3 H' j" V7 l2 Y
  132. ; [4 u" r+ _8 H" T" p
  133. . $field,  K$ V" B! N$ b, L4 L9 Z4 X, ~
  134.           'count' => array('$sum' => 1),
    - B" y" q+ A# e$ w- \' f
  135.         ),
    8 n; }3 J3 w; d
  136.       ),# y3 L! F5 ]% E" x) m
  137.       array(
    ; h. _) K) ~* ]4 M; O
  138.         '$sort' => array("count" => -1),
    : B& O$ R( w* g0 }/ u/ Q% j+ H
  139.       ),
    + k: ^' Q, @- l
  140.     );3 h- Q+ V5 k8 O! |0 ^' o
  141.     $this->database->$table->aggregate($cond);
    ; c% I  Q2 {/ ~3 ?
  142.   }. U9 ^, E$ y, T7 G
  143.   /**' p# X: B, h2 J
  144.    * 删除数据
    8 }7 @- T  l" K( P2 u
  145.    * @param $table
    : r' E: h0 e9 i" Y' H, x4 x
  146.    * @param $where
    5 d7 y0 ]4 y3 T0 U8 k3 }
  147.    * @return array|bool
    ' E* I7 b) x* ?5 j
  148.    */: k8 b8 g; A4 {" x- f8 M+ r9 f
  149.   public function toDelete($table, $where) {
    ! v' g% D5 v/ V: W5 W- o0 r
  150.     $re = $this->database->$table->remove($where);6 g2 n# ~: m, g2 ]$ Z" T# Z
  151.     return $re;
    + }, V$ z$ J" M% _6 e  w4 B
  152.   }; n( H3 ?' ^) g6 Z4 }
  153.   /**# V) G  e3 h; [- ?/ H) K/ x4 h
  154.    * 插入数据
    4 L1 z/ Z7 h9 V0 P8 z
  155.    * @param $table1 O5 {1 L8 K( {5 a
  156.    * @param $data" a* q5 z$ c% Z7 d6 w
  157.    * @return array|bool
    8 h8 I, s% j$ g( x5 ?1 Y+ a; i; A# o
  158.    */
    * q% |) Y/ a- B+ S* [
  159.   public function toInsert($table, $data) {
    0 C  P3 k+ h" |  m* i* o: s
  160.     $re = $this->database->$table->insert($data);3 P4 z( ?5 u( d1 w. o1 u; z
  161.     return $re;" M6 P# u3 e* W0 t$ F# B) z
  162.   }! b2 ?$ K( y2 ^/ s
  163.   /**
      l/ }- h* v$ R* k
  164.    * 更新数据
    7 j2 w% N0 u! ?" K% e. T, l1 o
  165.    * @param $table9 I7 W. D0 ~* E
  166.    * @param $where  y* v3 V7 ~* [2 H% H
  167.    * @param $data9 p2 r! l6 P5 z- y! @  U- m
  168.    * @return bool1 ~0 o5 V& V* V4 ]$ C! e! A" M9 P/ c
  169.    */; f( U6 Z( @/ k% V5 F/ b
  170.   public function toUpdate($table, $where, $data) {: ~% A6 q1 I$ B
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    2 W4 d2 n7 ?# D) B; b
  172.     return $re;
    5 n& k8 t2 l: Q) k: v" s
  173.   }8 n# \6 z* `9 O) S% q6 H
  174.   /**
    0 [* l1 z2 X% p' u4 A+ P" r
  175.    * 获取唯一数据
    7 T8 _7 }. @6 X: Q% K* K+ e
  176.    * @param $table- I& {* X( K0 _5 j3 d3 t
  177.    * @param $key6 c2 {: m0 \6 u! K% o! B
  178.    * @return array
    1 o& R$ C" N6 x; V8 ~) U, {
  179.    */) ~6 K, W- J2 E
  180.   public function distinctData($table, $key, $query = array()) {9 b. B/ }' f/ r* x5 E* R
  181.     if (!empty($query)) {
    7 Y  _! ^" {2 X: r3 Z
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);# [; l, s: c8 v; ]1 m
  183.     } else {1 _; ?5 G( x1 j3 v8 Z+ w' U8 j; z
  184.       $where = array('distinct' => $table, 'key' => $key);& v" w2 h1 H6 t8 e% l9 R; d2 ]+ }
  185.     }
    0 L6 V9 m0 V7 j" `
  186.     $data = $this->database->command($where);6 F. X6 ~7 ^" e( p$ {; p
  187.     return $data['values'];
    5 b! B7 u( P" t, ?' X' _9 H
  188.   }- P* ?2 x6 A$ I5 c$ X# y# z" n
  189. }+ C* s1 A. H  N! |- s
  190. ?>
复制代码
* V: ?) N9 n- V% U( g/ }

# O# ^9 e" m* L$ M$ T0 N& M! k3 a/ q8 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 22:26 , Processed in 0.120964 second(s), 19 queries .

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