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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
' `& d# }4 O) f9 ~1 @) c% U8 {模式自由。
! \8 U6 T. x3 T支持动态查询。
' E0 O+ U; u3 A支持完全索引,包含内部对象。3 v' N. G9 L+ G
支持查询。, V# q2 j7 R6 p5 _/ `0 M# E
支持复制和故障恢复。
; v# z- g0 h3 U& ~+ R* x: D! e( P使用高效的二进制数据存储,包括大型对象(如视频等)。( u& k1 u- K: Y, O+ S5 f
自动处理碎片,以支持云计算层次的扩展性# ?$ s  w/ E+ b; @' ?9 |5 {1 G
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
+ a( u; \, \4 A$ Q$ J, I- A文件存储格式为BSON(一种JSON的扩展)* @" s0 S# Z) ^& I6 M
可通过网络访问

所谓“面向集合”(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. <?php2 c" h- a+ ?, }" E9 i8 X2 U% ^9 V( P
  2. /**  j7 s5 X9 q8 e3 F: q5 V
  3. * PHP操作mongodb数据库操作类
    , s3 i0 R. V. K: F/ r' d  A$ j; N
  4. */+ F+ D) I8 G" C( e8 ^% P1 r
  5. class Database {
    / c# g% M7 Y7 f" b  D
  6.   protected $database  = '';
    % Q0 ^  _$ ]! @8 c
  7.   protected $mo;1 d9 z  i. z' J; ^; ]  q' M
  8.   /**
    ) I1 K: g8 D- O$ O2 C! u$ S
  9.    * 构造方法2 ]& d# N9 \' Z& o5 M0 t4 |$ v3 P
  10.    */
    ' U1 M" q: W0 ?7 |* R3 S# r- P; n5 p
  11.   public function __construct() {
    , W$ A, T. h7 j0 P
  12.     $server = DBSERVER;
    ' X7 p* \6 N; `# d
  13.     $user = DBUSER;' z4 i2 z* k0 E$ \% M
  14.     $password = DBPASS;- r. {5 w  B" O" M% U( W4 }' ]
  15.     $port = DBPORT;
    9 R& Z; W+ p/ w$ z1 ^( a& N! U9 Y
  16.     $database = DBNAME;
    4 W+ G' M: Y+ }) U
  17.     $mongo = $this->getInstance($server, $user, $password, $port);- b% w, E! T" N/ [( Y: u
  18.     $this->database = $mongo->$database;0 }4 ?$ c" x. G8 Z: w0 t8 b
  19.   }9 N4 h7 M- ?- i' F
  20.   /**
    : f* h+ k: l  a
  21.    * 数据库单例方法
    ; u# U. I5 t( J3 c  ]% o; I! ~$ V
  22.    * @param $server2 C  W" r) i4 e. x5 D8 Q% |5 R5 x$ f
  23.    * @param $user
    , g$ u: [1 s3 q8 V% O
  24.    * @param $password
    6 i  ]9 }& n, Q' ]
  25.    * @param $port
    * Q1 d# x3 R- u2 }1 Q" T& c9 B/ X
  26.    * @return Mongo
    9 I8 Y5 D: s3 s) E+ f
  27.    */
    3 V* n5 [, ^9 r# F
  28.   public function getInstance($server, $user, $password, $port) {
    1 V, F3 C" _7 i( C
  29.     if (isset($this->mo)) {
    # G9 O! D3 V( z& t- d' A
  30.       return $this->mo;
    # M+ L- V# S6 r: ?8 t7 J6 P
  31.     } else {; v* J% c2 x' S9 `6 @" N" H0 x
  32.       if (!empty($server)) {9 G9 X" k0 i+ _( Z: D7 Z: l, B; j
  33.         if (!empty($port)) {
    : L, d" v* j0 i
  34.           if (!empty($user) && !empty($password)) {
    # h0 Y6 f" y# H9 f' T# V6 w" t% K& s' O! D
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    0 y: M% c4 M$ ]# E& w0 N
  36.           } else {
    - n3 n/ E- \% E
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");- d% Z/ p( U5 Z% ?* W; Z8 c
  38.           }
    : u8 }0 ^8 p7 W; O
  39.         } else {
    # C- O9 i, S0 H  a! P" y
  40.           $this->mo = new Mongo("mongodb://{$server}");3 e9 a! e0 y- |
  41.         }9 R- T! R% i* Q- k
  42.       } else {1 b5 L$ ^7 m% `6 U4 F5 n) c
  43.         $this->mo = new Mongo();1 K! p# b% k1 \7 F7 p! v$ l
  44.       }
    / J& d6 n8 q* ]$ Q) o& `  K. D4 m
  45.       return $this->mo;! j; g; L8 P5 l" @
  46.     }
    ! K8 `0 m, X$ y
  47.   }8 f8 M+ T" Z: Y9 q" _
  48.   /**
    0 K1 U# g; n0 t. k
  49.    * 查询表中所有数据
    5 h+ I, N9 L0 \0 v5 _$ l
  50.    * @param $table( j, O0 F) S# d. |" c0 D% M
  51.    * @param array $where
    $ A" X2 _$ A1 m- k6 z# y! N, u
  52.    * @param array $sort; f8 ^9 U' s. a: w! l. z. F' R( w
  53.    * @param string $limit& S& R! _1 S. u2 o" B5 U9 _
  54.    * @param string $skip# H; j3 \' X2 ?# [
  55.    * @return array|int; ?* D3 K$ U- T# c0 m( K4 ^4 |
  56.    */
    ; x* Q7 U, E2 I3 v+ Z6 X: e
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    " I, ?/ d* I6 P
  58.     if (!empty($where)) {! w: c; B8 G4 d
  59.       $data = $this->database->$table->find($where);5 b( [  p. {! N( P/ I
  60.     } else {6 y% w, H5 h* D
  61.       $data = $this->database->$table->find();
    . m8 P6 \: c! \1 z  Z. ~
  62.     }
    7 R$ A0 P7 H4 e/ M. w+ L
  63.     if (!empty($sort)) {/ E# J5 X- e0 Y
  64.       $data = $data->sort($sort);) a4 L" O1 h. j; @# E+ {2 D  X
  65.     }9 [6 ?4 t$ |6 N" y
  66.     if (!empty($limit)) {
    ' ?8 O* q! Y) B7 o( d
  67.       $data = $data->limit($limit);
    4 w+ x5 H' `" Y* M
  68.     }# k# {, O7 g3 [7 |1 _
  69.     if (!empty($skip)) {6 Y+ ^3 g+ ?7 p8 m+ Q
  70.       $data = $data->skip($skip);) Q  E% F" m: C/ I. m8 a9 e' e
  71.     }% E& u! m# k2 T
  72.     $newData = array();
    " T2 Y. N+ d9 ~: ?- E9 w7 h
  73.     while ($data->hasNext()) {
    9 n3 b& O9 d- G& T) ]
  74.       $newData[] = $data->getNext();
    6 `4 S, o& j! m4 b0 }. b. d
  75.     }' u( a$ }- ]( z3 e/ h1 z7 J
  76.     if (count($newData) == 0) {
    ; Y0 @  I! h/ o# l
  77.       return 0;
    " N7 I* u0 k" t
  78.     }
    ! r* L( q9 J# l& j
  79.     return $newData;9 t, n: h" s5 t% M9 Y
  80.   }0 F6 C+ J/ ~# M  h  k5 X" k* ~% }4 D2 T
  81.   /**
    : c9 v* V$ l9 T$ c
  82.    * 查询指定一条数据
    $ t3 @9 j7 @& K5 ^
  83.    * @param $table5 k* Y6 G: F4 A) U7 |( \) n
  84.    * @param array $where
    % t$ y+ ?$ r+ z, ~4 f# U0 l
  85.    * @return int6 q3 F' T2 v% Q& d& s
  86.    */& u- J6 Q. j- Y3 f
  87.   public function getOne($table, $where = array()) {6 L5 j. T# `1 N. G
  88.     if (!empty($where)) {
    0 w# U2 s$ H6 J1 o  y( P9 G
  89.       $data = $this->database->$table->findOne($where);; N2 b2 g, N9 P" m, G1 d2 s1 Z
  90.     } else {  I4 \! y1 e2 `0 u
  91.       $data = $this->database->$table->findOne();2 V  z+ G% r& {9 M9 I) ^
  92.     }
    0 M+ N# [9 R- }6 F) j
  93.     return $data;
    7 W. [5 n  k4 q
  94.   }
    9 J" r8 q2 x; E" R4 h) l( F
  95.   /**5 }: k+ f1 z7 N  p! d# D/ |
  96.    * 统计个数/ W! o3 ^# y' y: N: P- t- z
  97.    * @param $table; I9 H" d) u0 m" p
  98.    * @param array $where( a. f4 }" e5 F: U( e
  99.    * @return mixed$ M9 y) g7 W3 X9 H3 z
  100.    */
    7 V5 R# @! o5 Z4 P1 ?: O
  101.   public function getCount($table, $where = array()) {
    6 C1 `8 l+ I6 W+ }1 c' S( ]1 {
  102.     if (!empty($where)) {
    7 X4 B5 B: n8 O/ p$ C
  103.       $data = $this->database->$table->find($where)->count();
    ! x1 N' _  P6 r; L4 D
  104.     } else {
      y6 n4 R" d) L: p7 y) r" ^/ W% h
  105.       $data = $this->database->$table->find()->count();
    4 l: N* v( E2 ~' d8 F
  106.     }
    ' I9 N" S- D* X- T) I+ q* \4 ^
  107.     return $data;; A4 I0 K5 q& e
  108.   }
    * x) _* F& u9 q' ]
  109.   /**# Q2 r" A" p9 J! F7 R5 ~
  110.    * 直接执行mongo命令7 U$ ]( B, y0 I  b( _
  111.    * @param $sql2 r; X1 m' S- d9 m" X5 r1 u+ s- L
  112.    * @return array( T0 R5 }1 h' |7 G. n
  113.    */
    : F  v3 U! s; f5 M
  114.   public function toExcute($sql) {' L( ~- c2 ?0 o+ Z+ W
  115.     $result = $this->database->execute($sql);# r8 O& j1 X, U. I$ x1 u
  116.     return $result;; u" T  j- a$ v
  117.   }
    9 l* j& ~+ F* @, L. t# m
  118.   /**7 t' T, |  t& [! W* e4 u7 |
  119.    * 分组统计个数
    . v  E% H5 A* ^# y/ C  w- j
  120.    * @param $table
    + \" e' _- k0 G. u' c' H
  121.    * @param $where
    * T* Q$ B: ?7 I+ B# a1 Y
  122.    * @param $field4 w% L4 P" [" s6 Q- a3 O1 \
  123.    */
    ! l6 k, [: v8 K& A( f3 X
  124.   public function groupCount($table, $where, $field) {
    - v( O. a  q6 h
  125.     $cond = array(! N) A) r6 H, {5 Z! R, U2 S$ d# ~
  126.       array(0 ^# ?, G2 z- k6 ^. K
  127.         '$match' => $where,+ P( U& ^; W4 }% ^* i3 F& \
  128.       )," K5 r5 [$ T  }. K, _. Q
  129.       array(9 x: J+ o) x8 v' Q: a( e, L
  130.         '$group' => array(
    $ B. y6 q9 ^0 C: I7 u
  131.           '_id' => '; T. Z) c5 V$ G* c, ]
  132. ; i# H2 L( h2 T. `; ~9 [' a: J2 N
  133. . $field," t) V% ]" o6 c2 C9 q' b  s7 b* |
  134.           'count' => array('$sum' => 1),' y; R# j5 Z4 x8 }0 A
  135.         ),
      A  z9 {+ E9 X: \
  136.       ),  M  i  }. A. n8 e& r/ K
  137.       array(
    # `' [7 y. c! K# B/ E1 R
  138.         '$sort' => array("count" => -1),
    1 p8 n4 Y* ]4 J8 L' F) N' |
  139.       ),
    + J  ~' L( h4 E# V. b
  140.     );1 d5 L' @/ l" C0 {# z2 `$ O# p2 o
  141.     $this->database->$table->aggregate($cond);" M" w  d% Y9 ?0 N3 [) x1 |. o
  142.   }
    ( d. e5 G; X0 G  r$ J" d
  143.   /**6 N" D" m8 ~7 m" C. F) H, e
  144.    * 删除数据% }+ k  N! r$ l8 o
  145.    * @param $table( X9 A9 w' g) ?$ V2 A% G) \
  146.    * @param $where
    : `8 X( x2 h: N; {4 N5 ^" V: c
  147.    * @return array|bool
    + t/ T1 Z, @0 h( R/ S* [
  148.    */
    7 d" d% W: r$ X% f; L9 x7 d
  149.   public function toDelete($table, $where) {2 u- C6 b% {; j) W; V' I
  150.     $re = $this->database->$table->remove($where);: k& s4 W# _' S  f$ N8 q/ v
  151.     return $re;3 g6 U+ U1 v1 g( R) q4 a4 v, m5 T
  152.   }
    % o3 t& E7 q0 E8 F" [1 i# y
  153.   /**
      Q+ X4 p0 `4 _! J: V8 H
  154.    * 插入数据* H$ D2 A& _* w/ e9 [, I0 v( x
  155.    * @param $table# n2 Y6 q2 N# R* F
  156.    * @param $data' F7 f2 C3 E$ z& U1 ?# v. V
  157.    * @return array|bool
    : A# [3 h  e6 w) `( y
  158.    */# m$ ^0 B$ n5 a5 V7 G/ Y& ]
  159.   public function toInsert($table, $data) {
    : E  z( z/ U. ^" C/ d
  160.     $re = $this->database->$table->insert($data);3 y& O; ?" e' Z% z1 C
  161.     return $re;% d2 d' F7 e0 G, F$ [* p  f
  162.   }6 q4 _9 d" ^, v) Z! G
  163.   /**7 T0 |4 ~4 g  u( ^% ^
  164.    * 更新数据
    5 N8 w* C, G( j! i9 I4 A$ p
  165.    * @param $table
    % m# t8 d) P; p
  166.    * @param $where. W2 B4 T2 k6 L6 A4 S
  167.    * @param $data* v: `( A$ D* ^1 r9 B; ^; T
  168.    * @return bool
    8 N( Q0 P' [8 y- R
  169.    */
    0 C0 g# f  N! ?0 d3 C
  170.   public function toUpdate($table, $where, $data) {; j. A: x' `1 U  k  ?! T) j' ?& ]
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    # f/ v, E. b9 e$ S
  172.     return $re;; N; l" X# b7 l
  173.   }* }( ]+ N* G5 I. Q( n0 g  _7 l( w
  174.   /**; v) ?9 F5 q8 h3 h- |! c& m
  175.    * 获取唯一数据& m. s3 [& X* m
  176.    * @param $table4 {, M, B% t3 v  W
  177.    * @param $key1 p0 w* D- f' [* ]* R& M
  178.    * @return array( e" d+ s6 ~; X" o
  179.    */" G- n1 S# g5 }6 b$ [) N# [7 o
  180.   public function distinctData($table, $key, $query = array()) {
    7 `4 j4 [( ]& b0 c
  181.     if (!empty($query)) {
    & N2 ^& L- N& J; U5 C+ z, K
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);" ?! q! B+ b/ J
  183.     } else {
    : V+ `& w8 ?5 C2 m& f8 E1 z4 W
  184.       $where = array('distinct' => $table, 'key' => $key);! E& X6 ?' H+ B; F0 V1 W+ G0 U
  185.     }" k. L& K  I! E( \* r; ~
  186.     $data = $this->database->command($where);& ^! i' |  H4 B5 m$ j
  187.     return $data['values'];" V( V% Y* I. B, W, w. {  Y
  188.   }
    4 E0 ?3 D" i$ h+ ]
  189. }
    ! f, _: v1 y3 T" @$ W4 @: @8 h
  190. ?>
复制代码

1 n% H3 l; A3 S+ r8 ]' x
% D  l0 s# A& Y# h' O  @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:46 , Processed in 0.059918 second(s), 19 queries .

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