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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
8 a0 \+ _* |0 j7 H模式自由。; L  |% @& U1 e+ ]. Q
支持动态查询。( D) `  _' n; ^" O, s
支持完全索引,包含内部对象。
. `4 U2 M8 ]! I9 l1 M支持查询。
/ q9 O. O, l  g5 c支持复制和故障恢复。7 E# X0 `& f0 L; X: S4 H# o
使用高效的二进制数据存储,包括大型对象(如视频等)。! H5 x5 N7 z8 ?/ k8 H
自动处理碎片,以支持云计算层次的扩展性
) B) N, c8 a9 Y" e  b支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。5 t5 J5 M3 e+ z, p
文件存储格式为BSON(一种JSON的扩展)$ U5 n  q. z' F( Y/ O
可通过网络访问

所谓“面向集合”(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  Z; w3 P/ ^" a! p" v4 V
  2. /**3 j1 s& t7 f% v* p! X
  3. * PHP操作mongodb数据库操作类4 a2 N  Y! d3 t' u
  4. */
    2 d, \6 }0 n& Z1 N/ w
  5. class Database {
    / Q& {0 p# h: Q% J1 ]' V& O3 T- v
  6.   protected $database  = '';
    2 ?  B: a$ i7 i1 x# _
  7.   protected $mo;
    # ^9 O1 Z# @% B+ @4 _* t2 A
  8.   /**# J$ D2 e* q3 j  p9 B' o
  9.    * 构造方法
    8 G6 y( l$ j( |: E( ^5 ?
  10.    */% ^* @3 T- M. n
  11.   public function __construct() {
    5 ^# ^/ d# n( c* q% G5 L% b- m5 h6 n
  12.     $server = DBSERVER;# R# O0 J* _2 c% W4 k* u: f
  13.     $user = DBUSER;* B2 Y/ P4 F( w+ u  B: M
  14.     $password = DBPASS;
    3 }# g+ l; A+ q6 C
  15.     $port = DBPORT;$ E5 U* F3 P( D6 v: U5 p
  16.     $database = DBNAME;% C# V' l& A$ A4 x
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    : H/ Y" p8 r3 }; d
  18.     $this->database = $mongo->$database;& K' h5 K' D  B6 V3 u
  19.   }
    ' n0 \  ^: n& x) ]
  20.   /**7 ^% w9 C% A- W' t( a
  21.    * 数据库单例方法$ Q+ ~! o& U) y# c- y
  22.    * @param $server
    ; l( v) V% R* i: W
  23.    * @param $user
    / `" D, M. n" b; K2 p
  24.    * @param $password3 O! i% b( V8 B" T. ^# }, ^% L4 J% o
  25.    * @param $port% t9 s" p4 l2 n
  26.    * @return Mongo
    5 u* D3 m6 I; U* k8 }9 x6 f$ e
  27.    */
    # Y6 T. t/ }" n5 H7 Z, `: {
  28.   public function getInstance($server, $user, $password, $port) {
    5 K3 W' p$ c7 {; ^- N: t3 q
  29.     if (isset($this->mo)) {* }" z% J' K0 Q2 J
  30.       return $this->mo;
    9 _; R+ F$ Y' u6 U' Z
  31.     } else {' l8 W1 `/ o$ _3 a; T
  32.       if (!empty($server)) {6 ~3 l* R$ [: e3 A, h0 y
  33.         if (!empty($port)) {, h: \# L& m' K, |' J, _! T; O
  34.           if (!empty($user) && !empty($password)) {
    8 G, t2 f9 t8 d  h& K# \/ ]0 y
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    - i* q) b% W2 M: r# d, E2 Y$ ^
  36.           } else {  J4 H5 t! I- x3 z
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    % T% {5 Q1 V" Y* b
  38.           }) ^* @" X' t# D: e
  39.         } else {
    . ?% r9 Q, o" D/ y8 }2 u
  40.           $this->mo = new Mongo("mongodb://{$server}");' i9 ~: `) g. O# ~2 o1 A
  41.         }
    / P; u) J" c+ A: y1 |/ r: ?
  42.       } else {
    # L. X/ L5 D( |) g$ ^; i
  43.         $this->mo = new Mongo();1 L, ]; D8 ~) e% m2 `$ s& E/ Z
  44.       }% l1 G7 N5 i' Z
  45.       return $this->mo;
    7 r# O3 ~" T' ^3 i/ ]
  46.     }
    0 U6 E4 k. k" w* i7 @2 o6 Q8 l" Z
  47.   }
    0 O9 k' i6 V$ w
  48.   /**
    / A5 E8 D: U$ S( t
  49.    * 查询表中所有数据0 U' E& ]; Z+ }; u! V
  50.    * @param $table
    / \: [2 ]& T- Z# E( b
  51.    * @param array $where7 N( x0 i1 ?; p9 P  f
  52.    * @param array $sort
    0 b: R$ a3 b, r. Z
  53.    * @param string $limit
    " X6 H/ y2 n3 t5 e5 N0 N7 _
  54.    * @param string $skip* x4 L$ C+ M( w! a
  55.    * @return array|int/ Z( s, Z& j* r. L* Y9 V5 l
  56.    */- m3 V. y7 ]2 x6 Q7 ^7 O
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    9 q3 ^" i# X" d/ v- d
  58.     if (!empty($where)) {( c5 c2 A. k( \5 F, e
  59.       $data = $this->database->$table->find($where);0 ~+ ]+ h+ [4 k/ P) h
  60.     } else {
    1 I- @# _2 C; N
  61.       $data = $this->database->$table->find();
    ( Q2 c3 }8 X# c% p) K( {3 i$ F( T
  62.     }% A! q2 I' x  z' h" \
  63.     if (!empty($sort)) {
    0 O. l2 O/ [* W3 [
  64.       $data = $data->sort($sort);
    6 X9 D6 W. B5 r* \
  65.     }
    0 [+ E* ?/ r8 A& l9 `# H
  66.     if (!empty($limit)) {, _. I1 v! w* E; T
  67.       $data = $data->limit($limit);
    ; l0 r5 W: e3 q3 \& [
  68.     }
    0 n* |1 \" C6 @
  69.     if (!empty($skip)) {) s+ _. D2 ~, _* {' j; U
  70.       $data = $data->skip($skip);
    - i) E; }" z. Q
  71.     }
    0 M  K" J) A$ ]; Q% ?( w* Z
  72.     $newData = array();
    9 Q$ P& m9 C: J4 v8 ~( w* O/ o* @
  73.     while ($data->hasNext()) {
    , [0 O* S1 v, @" B- {+ E  f
  74.       $newData[] = $data->getNext();3 e$ q: w# ~) q0 O' F0 o7 u
  75.     }
    * _1 F" j: n+ l/ {  i! |+ n3 f
  76.     if (count($newData) == 0) {
    : s+ O6 y, c. J% I5 P! A
  77.       return 0;
    $ k. i' P# t$ t0 y
  78.     }
    6 ^' T; L0 q0 e, I' }/ x$ ?
  79.     return $newData;5 X  u0 q8 c5 f$ Z2 E
  80.   }1 y  P! Z( ~% J
  81.   /**: q% z7 y7 D. s: ]! T9 I5 r4 Z" w4 u
  82.    * 查询指定一条数据
    : o+ ?& V0 ]: U% U( [
  83.    * @param $table
    $ @0 R7 i  S9 Z, k. r$ M
  84.    * @param array $where
    - u6 ?& c# |% t
  85.    * @return int$ X! C3 {" V% m
  86.    */8 S1 [& A& v* O1 f
  87.   public function getOne($table, $where = array()) {/ f  Z* R& E5 P- D6 P' f
  88.     if (!empty($where)) {) Q" S4 A: k" d$ m/ Z  I
  89.       $data = $this->database->$table->findOne($where);/ S. ?1 [2 q# j2 T* p
  90.     } else {
    6 {  h8 z* S  j3 v. X7 z
  91.       $data = $this->database->$table->findOne();% w$ K3 D1 O- ^- P0 X  }6 x* _
  92.     }
    - C9 M! Y1 K  m; Y3 A1 c7 u
  93.     return $data;
    8 w  d! P: j$ r1 _
  94.   }* o4 e3 p7 J, G/ L/ P+ m
  95.   /**
    , c, v# ^2 A: D) @  f, J4 w3 {
  96.    * 统计个数% h! G$ o( k# c* u
  97.    * @param $table6 P- }7 a' ?! h/ V0 B" ?' c' J
  98.    * @param array $where2 |9 P2 O* _! n& _( t* Z& Z) q' n6 L
  99.    * @return mixed' u: a5 j  f. T, X% x7 h. V
  100.    */
    9 `; H5 ?* h5 @# N! B  F- D4 a- u
  101.   public function getCount($table, $where = array()) {6 W' N2 S+ y' q9 e$ ^5 c2 J3 ~+ }. \
  102.     if (!empty($where)) {6 d& J2 e, s0 R- Z5 p9 b
  103.       $data = $this->database->$table->find($where)->count();
    6 I. }: x; g# X) K
  104.     } else {0 p; @3 z: E" u6 r9 n
  105.       $data = $this->database->$table->find()->count();
    4 g# B6 K9 G+ m0 K8 [  D& p5 u
  106.     }' T+ ~4 s# M, {5 C  v
  107.     return $data;5 l" P9 {/ W. W- m# p
  108.   }
    $ c& r7 ]' ?) w$ w, A( b
  109.   /**0 h' C% W% x4 o- s
  110.    * 直接执行mongo命令; B. p( w9 m: F: N/ @2 d) _1 w9 `+ Z. i
  111.    * @param $sql
    5 s8 t* l( k  Q
  112.    * @return array: T$ G- Z+ W$ ~8 `3 F9 l
  113.    */2 v1 Z6 [) q$ j5 c. ]' f
  114.   public function toExcute($sql) {1 m! x) `# m, q9 L# ?, W/ ^" t
  115.     $result = $this->database->execute($sql);1 t  `3 _2 |2 D: W8 ]
  116.     return $result;
    9 S% @+ `* Y4 P# J' s
  117.   }( L6 k8 ^' a9 N) y9 a4 M6 N
  118.   /**
    * s3 ~4 H% u( }7 c  E6 N
  119.    * 分组统计个数
    / n% L% M7 Z; z9 v! ?) x) d( r
  120.    * @param $table
    / F* w- r" t- _* w/ @
  121.    * @param $where
      ]7 R0 a& p6 {
  122.    * @param $field: c4 _6 _0 q; c. _
  123.    */
    ( q" V4 u- _2 u
  124.   public function groupCount($table, $where, $field) {( g9 |' f* }5 g
  125.     $cond = array(
    5 p8 y2 I2 p4 J- Y6 ], H
  126.       array(/ B& T2 Y# T1 q! D$ Y/ s2 z4 t
  127.         '$match' => $where,+ t( {9 C0 y. F, S+ u; _- K7 J# F4 z
  128.       ),2 D1 v$ _6 y8 z' @0 J
  129.       array(
    $ p1 N* h1 N1 y5 g
  130.         '$group' => array(! X, w: ]2 U  z3 o
  131.           '_id' => '
    : w: p$ Q* [) }
  132. , h& G! t( N, X$ v3 l
  133. . $field,4 Q9 J9 s8 M; Z- d; o
  134.           'count' => array('$sum' => 1),( A  U. W4 f  @7 \7 {* m& Z$ y) i9 u
  135.         ),# F" [+ h7 P/ p: j1 O
  136.       ),- L2 \. ^" X; B# E! m1 `# }
  137.       array(  v9 @1 o2 C% @$ c
  138.         '$sort' => array("count" => -1),1 b8 g: g1 w* e, ~/ b# E5 y  J
  139.       ),
    4 v3 s7 f6 P! h' [4 w9 u% m
  140.     );3 ]0 w; q6 h" |( }, a$ z- N- D
  141.     $this->database->$table->aggregate($cond);* ]/ J, h# b( D
  142.   }, E! z9 X3 i& H( V8 j
  143.   /**
    3 w9 L3 g- K& \- a
  144.    * 删除数据2 ^# _5 Z. g' C. _/ B
  145.    * @param $table
    " r$ {7 B* P$ ^3 G
  146.    * @param $where+ g: q5 [' {7 x' _9 U) F+ S+ ~7 l
  147.    * @return array|bool
      ]- {, V: ]3 k- G4 h, H. Q
  148.    */$ T7 S% J8 F" r' {" }  S
  149.   public function toDelete($table, $where) {: L  b& G9 N4 i, x% k* h5 ]
  150.     $re = $this->database->$table->remove($where);% y8 X6 m! U) q. s# `' @" I
  151.     return $re;
    4 Q" @+ ?/ @0 M$ W+ S# L1 ?9 Z5 [
  152.   }
    3 K6 @1 K4 @$ N5 `7 j
  153.   /**8 V) ^5 }. h; x: l- e2 [  y
  154.    * 插入数据
    4 @- F; d7 Q6 D/ j& U2 A4 K
  155.    * @param $table5 Q( n5 @; \1 b7 A) _2 p5 ^
  156.    * @param $data
      {& ~3 ?& p0 J! b8 s4 ^* p/ O
  157.    * @return array|bool
    6 j! i/ ^1 s" r4 \( `
  158.    */9 ^7 _; L. y, y/ J6 B) }# q8 z0 o
  159.   public function toInsert($table, $data) {+ M; _, b" S; Q! [  d8 ~& [1 u
  160.     $re = $this->database->$table->insert($data);
    6 [7 V: f: f! l0 V3 {  B4 C
  161.     return $re;, P. d4 T9 v3 R$ R; v5 V- @
  162.   }+ I: h) G$ z, l7 h( T3 [
  163.   /**
    . h  G' Y1 `! |+ G1 [$ t# k8 o' s
  164.    * 更新数据: e) A" V7 S6 T% T0 I
  165.    * @param $table* ?" i0 q, ~6 c1 {% v3 q
  166.    * @param $where; R3 N, h$ h# y$ i9 u+ i
  167.    * @param $data0 L- d! K7 x% O+ p) B1 u
  168.    * @return bool4 F0 g) H& V8 T* f/ H% p% |  |1 ~
  169.    */
    ! ~; E! v' k* i, B9 {  H! i
  170.   public function toUpdate($table, $where, $data) {
    0 V$ I7 C+ V  K
  171.     $re = $this->database->$table->update($where, array('$set' => $data));9 |4 W( R; g5 B
  172.     return $re;
    5 j( {+ p/ B6 ^2 p% Y0 Q; O5 i6 `
  173.   }
    2 A6 Z) `- M+ Y- x4 E4 {
  174.   /**) g2 Q7 @* C8 y
  175.    * 获取唯一数据
    , K: Z  Q5 T: D
  176.    * @param $table
    1 T* r, A% |6 Y- x" Z
  177.    * @param $key
    * |+ Z, g3 ^7 k% E2 m: k- H
  178.    * @return array7 \- N" i; O4 [4 U
  179.    */
    ' E' Q  e, R" E$ j/ f5 l( y* F
  180.   public function distinctData($table, $key, $query = array()) {
    : H( h9 Z, p  N( D/ U" E9 J  ~
  181.     if (!empty($query)) {
    3 z. z7 f# G( ^/ ]9 f" s
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    # y: n  k& j7 o5 Z/ _: C7 J; A( |
  183.     } else {  m' ~0 N& l8 W# u1 _- f- L6 V
  184.       $where = array('distinct' => $table, 'key' => $key);& D& s/ i! j8 a9 d$ N
  185.     }6 U8 U, I0 l* M: b2 L( I
  186.     $data = $this->database->command($where);
    - N8 W6 C3 o' b% I
  187.     return $data['values'];
    6 V+ u1 w: r/ F0 |7 S' x. a
  188.   }
    4 N7 Q+ C4 w8 }2 G
  189. }) L& `: T8 P' j4 ?- L) |
  190. ?>
复制代码

' V% E& z7 Z. j4 k% \+ V& _$ Y6 p; O6 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 01:13 , Processed in 0.076066 second(s), 20 queries .

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