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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。% p5 v6 x, B+ z
模式自由。* C* u" X4 r: q- d  k5 F: f  z
支持动态查询。3 n8 t' a  c1 j: e; J" M
支持完全索引,包含内部对象。
/ T2 w* e( S/ K7 y: n. u$ g支持查询。* h0 ^; v  V4 k5 Z7 l
支持复制和故障恢复。
& r  ^1 K6 T" _5 ^4 f# @使用高效的二进制数据存储,包括大型对象(如视频等)。  e0 l2 l! a: K2 b- W! m) b
自动处理碎片,以支持云计算层次的扩展性5 q9 ?! h( ~7 G% n' }
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
; B  y1 {2 Y, n: V/ D3 O0 J# ^7 V文件存储格式为BSON(一种JSON的扩展)
" }: z. w1 `" }& ]( o$ @5 L可通过网络访问

所谓“面向集合”(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. <?php5 |) l8 B1 @' N
  2. /**
    3 e& Y+ R0 z: F& W
  3. * PHP操作mongodb数据库操作类
    1 Z& ~: ?  [: H; D( N( R$ U. L
  4. */
    . }" q+ V1 ^, F3 i8 i( h
  5. class Database {* g* M' E( _7 O, w. a7 B' m7 Z- [
  6.   protected $database  = '';( L, a; X9 S- }
  7.   protected $mo;
    % C5 ^9 s4 u3 y
  8.   /**+ j# l4 \& S& C  Y& i& g* v8 M+ q; |
  9.    * 构造方法
    * [1 V3 p+ G' C2 A, P6 B" p0 i; o
  10.    */
    5 r  O- B3 J. g- _0 J" G9 {! W
  11.   public function __construct() {
    % S& o- X9 C6 w, o
  12.     $server = DBSERVER;; f6 u, }: \6 @( u
  13.     $user = DBUSER;
    6 A5 `7 J* Y, M/ c2 U5 x* P. u
  14.     $password = DBPASS;/ B9 F. i! K* S' E1 J* Y! r
  15.     $port = DBPORT;. E5 r/ q4 ?+ G* @
  16.     $database = DBNAME;, f( }# R0 n& i0 o9 s5 l& M
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    - _  a, D' E: O* C( v' x0 ~
  18.     $this->database = $mongo->$database;8 r% @  C9 d9 r
  19.   }& F5 a  i/ e0 A8 |
  20.   /**' P4 Y5 \2 ~# |" o4 d8 e
  21.    * 数据库单例方法7 c3 t& r( ]+ R1 f9 V- J1 w
  22.    * @param $server8 Q+ |& _1 T$ V" d6 u
  23.    * @param $user1 Q7 g& y3 O( d6 D" }% J% b, o
  24.    * @param $password
    6 K/ E# c; \, Y) W) s
  25.    * @param $port3 x: q+ H& t% }" j: I9 b
  26.    * @return Mongo
    % Q; |, O$ m! u1 X& K! w
  27.    */
    ( [& p$ O3 R7 ?$ R* z) |1 L9 }4 c2 F
  28.   public function getInstance($server, $user, $password, $port) {
    4 O3 B' l6 i& v9 c4 a7 K) }
  29.     if (isset($this->mo)) {  e0 L9 C; w, V! y
  30.       return $this->mo;2 `8 G; Q, @% x% |1 }( r. A
  31.     } else {
    ; L$ \6 L8 w9 s3 F( X
  32.       if (!empty($server)) {1 |7 u1 T7 X* D) U" S0 R
  33.         if (!empty($port)) {3 `$ l, K  h0 p  s. @) U; B+ f
  34.           if (!empty($user) && !empty($password)) {4 n6 b; J2 S- ^; k# R4 H# {* F( `: z
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");! P$ H& ^! m$ d/ K, Q
  36.           } else {
    7 M' K. }0 n! M% j9 X! i' m
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    6 ^& U2 s3 i- B) {
  38.           }/ U! A* l4 V/ k) w( W2 f
  39.         } else {
    % t7 z( l2 h" K) S( X, C& F. ^' K  K
  40.           $this->mo = new Mongo("mongodb://{$server}");
    ; O, P/ g1 a' t; Y- f  g1 K
  41.         }- ^1 u2 ^3 B2 o9 W2 }/ W: u& [
  42.       } else {
    . e/ H5 E, G7 z  a  v+ j/ y
  43.         $this->mo = new Mongo();% |- ~! B  k$ B6 A4 l; w
  44.       }
    # M* T+ T( v" N. r2 N
  45.       return $this->mo;
    - y2 X) h& y, I" E: X3 g
  46.     }
    ! [( z$ J9 D% }& O3 u
  47.   }8 j. f, b' ?- k9 V0 Q: h+ h
  48.   /**9 h% D) g) \8 l( U5 O0 G
  49.    * 查询表中所有数据
    8 [( ~" x6 v* v- h; Q, C
  50.    * @param $table
    + x% X+ M6 v8 w6 O# C. x" `
  51.    * @param array $where
    0 u  Y: ]" `/ }
  52.    * @param array $sort
    , d* r* \& ]3 T. f) ?1 j
  53.    * @param string $limit, H7 U8 ^, Q# X2 \3 S
  54.    * @param string $skip8 @* }& @, U3 i# x2 G0 F/ I
  55.    * @return array|int* _: n4 b* l" a9 v- g! `9 U  N/ J- D
  56.    */3 Q4 C  |: t( v6 G
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    " t5 I2 u/ _/ D$ e4 O
  58.     if (!empty($where)) {! a  G2 F7 f/ F9 r1 t! Z
  59.       $data = $this->database->$table->find($where);
    ; s4 x4 W% a8 V' q, s7 ~
  60.     } else {
      L# d9 M3 O3 t" a% b6 l
  61.       $data = $this->database->$table->find();+ J8 K3 y1 @! r/ K5 A7 Z
  62.     }
    - ]5 c; t1 M0 v5 H+ U, B" F$ M
  63.     if (!empty($sort)) {( P0 A- ^" V) e- \! y
  64.       $data = $data->sort($sort);6 b# {/ h; T) a
  65.     }+ F4 k: q, e8 D
  66.     if (!empty($limit)) {8 I, N0 l- [9 f) j% T
  67.       $data = $data->limit($limit);/ [3 q+ Y: k' l( b
  68.     }
    / `6 {& z8 D- w
  69.     if (!empty($skip)) {
    , m  V& Y9 C. r- s( t% d
  70.       $data = $data->skip($skip);
    5 b# a) v) @% K4 ?
  71.     }
    # e6 P6 O! K2 m/ j+ W
  72.     $newData = array();
    * \% F6 i0 A: i: @, e, H6 J' c* X
  73.     while ($data->hasNext()) {
    ! E( K" T! j% _# S8 t1 `+ F2 U! Y
  74.       $newData[] = $data->getNext();
    % J+ `; t, ~# u0 E: d
  75.     }% q- h" {$ w* o8 ^8 m  ]6 z3 N7 B
  76.     if (count($newData) == 0) {
    4 U7 F; G( J& o. r
  77.       return 0;
    ' Z( a# C' m" z8 ^2 z- M' H8 j
  78.     }; f/ J" e1 t) F/ a
  79.     return $newData;
    6 I: h' t7 |6 ^. P5 R0 ]
  80.   }
    ; I" X' A* q: y& l
  81.   /**6 P. G' {& ~, ^2 A! X$ J( F
  82.    * 查询指定一条数据0 O+ p% N7 R1 |' L
  83.    * @param $table
    . x( Z+ w  c( a/ R, s. m$ q) o7 `
  84.    * @param array $where- X* C* C2 J3 V& Z
  85.    * @return int1 T; p0 k4 i: s" g2 e
  86.    */
    3 S8 \3 T+ e1 R
  87.   public function getOne($table, $where = array()) {6 B  W$ Y+ f, }0 r3 Y( P, D4 i) {
  88.     if (!empty($where)) {
    ' g$ V6 Y7 C* H
  89.       $data = $this->database->$table->findOne($where);7 s% y5 q% u8 C4 s1 I( k1 P; Z/ N0 g
  90.     } else {
    3 o( b2 C) w/ W3 v! m! N6 u
  91.       $data = $this->database->$table->findOne();" A) `4 w0 z1 x, q6 ]
  92.     }
    ! c* L3 x* W! Q& }5 M" D
  93.     return $data;1 P1 z; Q' o# @+ u1 n8 R  M4 G
  94.   }; b  F! P1 b9 x! U
  95.   /**4 i  H8 m- V) A, x
  96.    * 统计个数
    ' f$ w* o1 @) M, o% R
  97.    * @param $table
    + N% D  ?9 |+ X! R! v2 O5 b7 P
  98.    * @param array $where
    5 r  h9 r1 U4 n+ W
  99.    * @return mixed
    4 b6 q1 B9 @8 |) q: k% o" U
  100.    *// j+ y6 w/ c, q- d
  101.   public function getCount($table, $where = array()) {
    0 H6 R- _* w) C2 S+ |) T
  102.     if (!empty($where)) {8 g* k5 y# W' Z& S; M
  103.       $data = $this->database->$table->find($where)->count();2 h5 d7 Q# }; ]. z% c. K
  104.     } else {
    6 d! B: R5 G/ r" I
  105.       $data = $this->database->$table->find()->count();
    - r, }7 h/ \/ B  [' d0 M2 @" J
  106.     }
    7 ?6 c% L, D2 B5 v9 x1 T2 A
  107.     return $data;
    & [6 g4 N& K- E" K/ p* [/ \7 v0 c
  108.   }5 A: o  B! g' k
  109.   /**5 v1 x9 H; e' L7 W- F- E4 v7 i
  110.    * 直接执行mongo命令
    1 N, j2 k( X  |. Z1 k
  111.    * @param $sql
    1 ^$ R6 F) P6 I/ S9 q. E1 Z3 l
  112.    * @return array
    $ M+ [& W/ t, p; z; c3 d0 t
  113.    */; R3 i; \2 P7 M0 P4 d" o
  114.   public function toExcute($sql) {
    7 M7 w3 G9 c- k6 k, V
  115.     $result = $this->database->execute($sql);/ k# S! b* W$ x) @, M
  116.     return $result;
    ; X9 p9 u) K9 ^9 s+ F7 A& _  ]
  117.   }
    & ^+ S- @1 _0 y6 O. u
  118.   /*** l# D# r2 p3 v3 L6 w
  119.    * 分组统计个数1 P1 y7 M/ p# f# j9 h  G! R
  120.    * @param $table+ Y. ~+ S1 S. B6 ~7 t
  121.    * @param $where
    7 ~) T9 C! ^+ g
  122.    * @param $field
    1 S5 C" i! t% G+ f! K* D+ B
  123.    */
    % \& {* s9 Q# Y2 a
  124.   public function groupCount($table, $where, $field) {4 I( r( z6 i1 ]( {4 s- W" w# j
  125.     $cond = array(* b  L0 Y3 z) o& c! C, {5 h4 Y2 Q
  126.       array(9 t2 L3 l/ _( F9 M. @* W
  127.         '$match' => $where,
    * j/ k- @  Q  n8 t
  128.       ),8 B4 s: M7 w6 G! h
  129.       array(/ R$ G! \& _  \  P* M6 u
  130.         '$group' => array(" s6 \0 E0 @2 s, X
  131.           '_id' => '" ]# J( j0 W1 ~8 l# G- G4 W
  132. : A8 _( q1 {' K. G* \2 ?  B3 N
  133. . $field,6 h2 ?# |/ l3 P) ?: `( X
  134.           'count' => array('$sum' => 1),
    7 l6 f4 z! Q* j2 n: [6 A& O4 J! D
  135.         ),( i  u, V7 a. r5 V* c& g
  136.       ),9 Z9 k1 k% _  K% x6 @- c9 Y- L- `  Z
  137.       array(4 i" m  M0 h; \+ Z( p# g
  138.         '$sort' => array("count" => -1),
    5 D7 ]( y! Y, G6 K+ e$ }
  139.       ),
    2 _# Z: G! D& O
  140.     );
    " Q  {3 j; B1 G5 ~1 {% e6 e9 w
  141.     $this->database->$table->aggregate($cond);
    & @+ \7 u: w# t' }7 F
  142.   }2 Q, t: P3 {5 d  q
  143.   /**
      q$ h  b8 \. ]4 G
  144.    * 删除数据
    $ `: {0 T; @$ P& o# |+ i. r
  145.    * @param $table
    7 d; S( c' {. g0 L
  146.    * @param $where5 _4 E' G( _! q* Y  e: a' C; s
  147.    * @return array|bool
    5 Y$ A5 s! J' a- ~  b
  148.    */
    2 H' w2 s4 ?# B" c1 }# l
  149.   public function toDelete($table, $where) {
    , e: t& F0 H- ?2 V! h
  150.     $re = $this->database->$table->remove($where);
    ) A( ?6 I: X7 [, h# d$ w
  151.     return $re;
    $ b* T5 A6 |0 b, _$ ]9 V9 h$ z' |
  152.   }& `+ c  ^" _' {# i% k9 W
  153.   /**! R3 u' W9 C8 J% ^
  154.    * 插入数据
    $ \# m/ o; T0 w7 t% z
  155.    * @param $table
    5 B3 |5 a/ t) z% M& f9 L
  156.    * @param $data
    . K" q2 ]& P) x; ~& Z
  157.    * @return array|bool6 m! ^: n8 W* U- e6 n# o
  158.    */
    . j+ ^# Y4 C7 n$ c- B; l
  159.   public function toInsert($table, $data) {+ t+ v* g! |7 O
  160.     $re = $this->database->$table->insert($data);: }, O: v3 ^. t$ o9 @
  161.     return $re;
    ! ~0 g2 c( w& L1 c/ a* [+ d
  162.   }
    1 {. p3 g/ n/ a- T, ^
  163.   /**
    . [6 {% k( r: Y& h$ E; i. l: c
  164.    * 更新数据/ M8 f0 D7 L$ m8 W) m. P
  165.    * @param $table  \. ]3 ?- {4 t" ~
  166.    * @param $where
    ! \9 A- ~4 n7 p% R3 a4 R! c$ n
  167.    * @param $data7 c$ g9 O: ]! ~$ u
  168.    * @return bool
    % N5 e# M% s! i; x" A5 K8 `
  169.    */0 H3 S; P6 c5 M4 z7 |
  170.   public function toUpdate($table, $where, $data) {% ]3 l8 @; o6 g& y- {
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    : V3 `1 y  g- X4 w/ Q9 G6 b# _" \
  172.     return $re;
    2 A* z4 i. R5 Z5 V& G; ~1 w
  173.   }
    & Q1 K' a, ?1 q+ T; F! H9 d
  174.   /**$ Y! ?  `" F( y; w
  175.    * 获取唯一数据! J! X2 p1 I& ^) x1 i( X  h
  176.    * @param $table
    - W. M; h+ I& C
  177.    * @param $key
    9 h) I. Z1 T' z2 n5 e% d6 Z
  178.    * @return array
    8 k, A2 M- Q! f2 k4 g3 Z
  179.    *// \1 S# x- k; Y& d% s; O7 T/ E
  180.   public function distinctData($table, $key, $query = array()) {
    : ?: x1 \2 m) `
  181.     if (!empty($query)) {8 Q1 b, G. B- U8 J, ~
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, v8 z) M0 s2 p; P
  183.     } else {
    ( K* q# z' V, T! t( Z4 G
  184.       $where = array('distinct' => $table, 'key' => $key);
    & d' I1 N3 ^, n# ~' ~2 Q9 c$ }
  185.     }' Q$ N) f, z4 s+ j/ w; ^, e
  186.     $data = $this->database->command($where);
    $ o$ Y6 V$ e/ y! E1 F
  187.     return $data['values'];
    . P1 }/ X% m$ k+ a/ L* l9 S- C
  188.   }
    8 ?, F6 n1 S' S
  189. }8 R: k2 N' u+ U6 Z& `
  190. ?>
复制代码

& n4 T* e% j: l' d9 t4 G8 o& J9 X. x( a% g$ x8 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:47 , Processed in 0.060169 second(s), 20 queries .

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