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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
+ \0 i8 e, l/ r9 Q- U模式自由。
3 k  F3 p4 [" X- A. ], q3 N支持动态查询。
" c7 _& @0 u8 H8 H6 z支持完全索引,包含内部对象。
' r6 s7 f3 A" p: o支持查询。
9 X$ Y, `) B! ~$ E# s* l; R! Q) [5 @  n支持复制和故障恢复。# a0 l" q& I/ f/ g! P7 d( j; j5 q
使用高效的二进制数据存储,包括大型对象(如视频等)。
- V+ {8 [& n. i4 o自动处理碎片,以支持云计算层次的扩展性$ T! ^: D) G6 c( L. G. E# N# I
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。6 Y+ E( N8 x' |) R
文件存储格式为BSON(一种JSON的扩展)# x& W$ N' o+ f7 d7 T
可通过网络访问

所谓“面向集合”(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
    $ r! [& `; b# z" b7 U! T
  2. /**/ z5 R* t  g5 G' F+ ], d' I  `# z
  3. * PHP操作mongodb数据库操作类& B7 S  v* }$ ]2 q
  4. */% c2 O5 [# d9 `
  5. class Database {4 M- c$ \- [4 Z! w: A
  6.   protected $database  = '';
    5 y+ @8 z, L1 k0 x8 h
  7.   protected $mo;6 B; k# W0 q! X: @6 P
  8.   /**
    8 `* ?4 d/ S7 T8 E3 d* L
  9.    * 构造方法
    9 a% {/ \4 P6 p1 m% j9 B9 w
  10.    */
    8 y! v% F; {; T2 K+ f  d
  11.   public function __construct() {. `' f5 A7 a$ B5 Z3 H
  12.     $server = DBSERVER;
    7 ~0 A* r+ U7 b9 X* `$ [
  13.     $user = DBUSER;
    * b3 S. c7 R8 @0 ?! S2 a
  14.     $password = DBPASS;
      c3 {1 x$ L/ b/ |5 Q
  15.     $port = DBPORT;8 [2 T9 I) A" X) R
  16.     $database = DBNAME;
    : v% o$ u* I- h
  17.     $mongo = $this->getInstance($server, $user, $password, $port);9 |1 r! v! q- W$ C
  18.     $this->database = $mongo->$database;5 \; S1 O2 N/ u5 |
  19.   }
    0 _/ N- [4 X3 k, ~/ P, p
  20.   /**
    5 o. u% `0 v5 G8 i* K
  21.    * 数据库单例方法
    / F% t5 _4 ?* y5 A8 _( y$ @  E
  22.    * @param $server
    7 g/ B3 P/ w0 l7 C4 k
  23.    * @param $user) m5 G7 v( s% M3 Y6 _5 B
  24.    * @param $password
    9 ?  x; A9 v' p& e/ |9 i
  25.    * @param $port
    & H( K! Q' V& `0 b& M5 V
  26.    * @return Mongo; C. y; H3 q9 R9 }0 h
  27.    */* q* ?# P* R) b- ^4 L& w
  28.   public function getInstance($server, $user, $password, $port) {
    / p" A0 `( e! L  w5 u3 t3 d& I/ H4 f! g
  29.     if (isset($this->mo)) {7 f. Z) ?. i; b3 G: n/ U! F
  30.       return $this->mo;! i& y, ^8 W  {2 Q
  31.     } else {8 Q, {: d; x) l* x6 c
  32.       if (!empty($server)) {
      ~: j; ?6 N  k' l( L
  33.         if (!empty($port)) {7 ^+ j& t  L% _
  34.           if (!empty($user) && !empty($password)) {
    7 a& v5 V7 H/ u& ~" }2 b
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
      R- f. ]8 J5 m# a; C$ L
  36.           } else {& U$ W, K* ^  {% z) Q' C
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");1 u1 n* M3 u9 P' \3 D5 h3 u! A
  38.           }& ]' B8 j3 ]4 o- p; `
  39.         } else {
    # X- I' u, w( d, l$ ?6 d' ]
  40.           $this->mo = new Mongo("mongodb://{$server}");( |- y0 K, {9 u! F8 {7 F- G# d
  41.         }
    ) s# W) N; h& G+ T) d/ ?! B. t. b& L+ S
  42.       } else {8 y5 u  J% R" I4 J0 r8 n
  43.         $this->mo = new Mongo();
    5 h+ Z4 W& B! b9 V0 w" l$ U
  44.       }1 U/ H9 h- M0 d/ c
  45.       return $this->mo;) u! s3 w# n& d: S1 g( M: H! N
  46.     }
    $ {) }$ |4 u( l3 f& D$ o. I( F0 A
  47.   }( m2 F" r) T6 ]0 K4 k, p
  48.   /**
    " y! o" h" u+ J  c9 k9 U
  49.    * 查询表中所有数据
    6 b& h  I$ C/ \& c
  50.    * @param $table) m- X3 n" ^# K% G+ m& l4 p
  51.    * @param array $where
    9 u) i0 z5 I/ X2 h& S
  52.    * @param array $sort2 H* u9 f9 i) y+ a* O- S
  53.    * @param string $limit
    . b- Y5 ^7 a) Q- O
  54.    * @param string $skip
    6 U/ r- l7 o3 f" |
  55.    * @return array|int
    9 O, q: G" D! y% w& @: o3 F
  56.    */; v* ?( c! B; a" g1 i
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ) {$ L6 ~  z  X. B
  58.     if (!empty($where)) {
    ; |' U$ {5 v" O
  59.       $data = $this->database->$table->find($where);, D* M* P8 X% |# d
  60.     } else {
    * J3 X- X5 n" ?
  61.       $data = $this->database->$table->find();1 L3 N3 k) t) l0 _7 m. W; V
  62.     }
    2 X3 T  B" M6 b- \: j  w- {
  63.     if (!empty($sort)) {2 X2 K/ V2 |+ }  m; z' Q2 D
  64.       $data = $data->sort($sort);
    ' v" ]4 h3 Y1 G  f0 f- }. g6 {7 X
  65.     }  K. F% V3 t  ~& |
  66.     if (!empty($limit)) {& }+ e' @5 M' {2 J& ^
  67.       $data = $data->limit($limit);
    # }% K4 t/ d) q. l: j4 Y" _' R" {) p
  68.     }" j' V7 p: V9 A! \: {& M/ h
  69.     if (!empty($skip)) {- M3 v# I" N  W# ~
  70.       $data = $data->skip($skip);4 o# }! Q" W& [- k. ]. r+ y; C# G
  71.     }" V( n9 }4 c7 Z
  72.     $newData = array();9 ]8 V: L/ [8 l2 Z3 ?0 P
  73.     while ($data->hasNext()) {# I( o% R& m8 A- w
  74.       $newData[] = $data->getNext();
    # b1 p, y" I+ c" ~4 K. G
  75.     }
    . l" d! D7 Q7 c1 G2 I" \/ p
  76.     if (count($newData) == 0) {
    6 n. a! e3 Z' R, |& v
  77.       return 0;; ^: x; F6 [' ~5 m% w' t4 s
  78.     }
    1 x' n8 `" {& R
  79.     return $newData;
      [6 K' E# Q8 K4 E* v
  80.   }
    3 [( G. H5 Y3 d& q* n
  81.   /**
      U  D8 b/ v/ e; N$ R! _4 p
  82.    * 查询指定一条数据" p! y1 I  X! ]
  83.    * @param $table! f; [( A: k9 k) x. G8 S+ \
  84.    * @param array $where( ?/ K1 k) ?% z1 s' ?( Q
  85.    * @return int, _3 D4 ^/ t* g6 ~
  86.    */, D- ^- ]5 h# _" K, T
  87.   public function getOne($table, $where = array()) {6 w4 ~! F9 T" S* _+ U$ L( C; \
  88.     if (!empty($where)) {
    % ~; V/ ?4 Y) J! l# y
  89.       $data = $this->database->$table->findOne($where);
    & |0 J& u, ^" G
  90.     } else {0 M" C/ O. e6 u/ U! B5 S. e+ `
  91.       $data = $this->database->$table->findOne();) _* \3 W; o& Y' ~6 G
  92.     }
    + M, N) }: V. f7 [/ U, v
  93.     return $data;1 F" \* U6 I% n6 r5 \* N
  94.   }
    4 M7 T4 e3 m8 K
  95.   /**% M% c8 {& b  M- F
  96.    * 统计个数
    ' e$ ?/ _' k7 X2 L  V) }% c- j; R
  97.    * @param $table
    8 U7 N4 b; f" x. g9 K1 p
  98.    * @param array $where
    : y, v: u+ O- K9 y
  99.    * @return mixed0 K! B& ~& C6 O
  100.    */
    : j0 j8 i& W, M5 S% w2 ^
  101.   public function getCount($table, $where = array()) {/ a! s2 b) A8 N! b8 r% Y" u
  102.     if (!empty($where)) {. G! k) N" \6 `7 L# y) Q& f
  103.       $data = $this->database->$table->find($where)->count();
    " a1 k  r8 E7 v& l6 {" l" D' {  s
  104.     } else {9 A4 |/ p4 G/ a1 N, |0 U
  105.       $data = $this->database->$table->find()->count();  i& B9 S' ^# l# K; J
  106.     }  O+ u" s+ |4 b
  107.     return $data;
    2 y" |/ V9 m* V
  108.   }
    2 t/ Y+ H: ]+ ^2 o3 G2 V% E7 k- g# {: B
  109.   /**$ [$ t0 ^+ V( R1 p9 u; Y6 Z
  110.    * 直接执行mongo命令( [4 @9 j( e  k* [5 E# y( y# I
  111.    * @param $sql
    $ x" m; ~! j  b7 ~; Z$ S
  112.    * @return array
      c; h- u8 \  X; g- C$ j4 k
  113.    */
      z6 J0 }' V/ O# f
  114.   public function toExcute($sql) {. ^( ~: I7 {8 Y
  115.     $result = $this->database->execute($sql);& y, R. A( |7 X8 q/ |3 g
  116.     return $result;8 v& K* Y) P, H  E9 {
  117.   }
    0 f6 F9 R" ~: ]% U0 D
  118.   /**5 B% n" ?( N: \! B$ G
  119.    * 分组统计个数
    ) B: x- k& B# j6 E2 o0 m1 I9 Z) e
  120.    * @param $table- W$ W3 B! \/ o- G8 q
  121.    * @param $where
    # B( f+ M. b- }; L
  122.    * @param $field9 Q/ e, t8 ?+ P! t" O# }2 C* {8 ?
  123.    */
      @7 R2 ~+ R- Z  w% A! V; {8 j. V
  124.   public function groupCount($table, $where, $field) {  Z! O8 o6 Z% v) l
  125.     $cond = array(/ @( w' @5 g, L: c6 `
  126.       array(
    1 {+ b4 b1 ^7 g" a
  127.         '$match' => $where,
    / C" w" W6 K. M- J. @0 @& a$ [/ v
  128.       ),; x  F$ u7 B* C8 A0 E, s
  129.       array(
    4 D1 k2 c/ x: V2 M/ z! L; \
  130.         '$group' => array(
    7 p/ j/ ^; A/ A! Y; c# \& r
  131.           '_id' => '" {; s$ M4 u% c" R) u  z
  132. 1 P0 k* M# E! _# A2 e7 x
  133. . $field,! `, W( v; j7 W5 \. g% h3 r' E
  134.           'count' => array('$sum' => 1),
    . }$ \  u9 A) G# o& }
  135.         ),
    5 C0 m# M& I- t& x7 @7 X: n
  136.       ),
    5 x" G: ^9 I) K7 v6 X, B7 L8 f
  137.       array(, D( J2 e; D$ {
  138.         '$sort' => array("count" => -1),* s4 p: Z% S. u# x8 C
  139.       ),8 q6 q3 i7 |7 K& A
  140.     );6 ?, X  O/ Z3 l. [+ i
  141.     $this->database->$table->aggregate($cond);
    ' K$ A; S/ ]5 Q* ~% t& }+ [$ `3 `
  142.   }
    * f- j" g& x/ ]; t5 V
  143.   /**! s5 B* D. r# p3 G
  144.    * 删除数据
    ' ~, m; s& H, p' _
  145.    * @param $table
    & O. z, c2 N% r
  146.    * @param $where% `; {1 L* @! e8 w* @3 ?( ^
  147.    * @return array|bool
    9 w3 U; s7 \, W1 Q
  148.    *// a$ _( v' ^0 F* [2 p! q% N
  149.   public function toDelete($table, $where) {% C* S9 t4 N2 P+ {! s
  150.     $re = $this->database->$table->remove($where);
    # q/ |$ R* {4 U/ G' N# e3 y
  151.     return $re;6 f0 l3 R3 W. P! m5 M
  152.   }0 t  C8 K; r% X4 Y
  153.   /**
    2 z: @$ D, q/ H2 k, l( f9 m. P  c
  154.    * 插入数据/ U2 H7 x5 [. s! C2 f
  155.    * @param $table
    + r* @8 N  Y) ], E
  156.    * @param $data+ E' _0 n9 A! H1 [; v  B) D
  157.    * @return array|bool1 T& r4 t4 j6 i7 c( }
  158.    */
    4 b  C3 |- g8 k! W
  159.   public function toInsert($table, $data) {) d6 F1 w2 C$ C! c
  160.     $re = $this->database->$table->insert($data);! e+ {6 J2 S5 Y0 d' B5 W1 w4 \
  161.     return $re;+ S, X" X+ h5 g: {9 {" H; D
  162.   }6 B) P" f) Q$ D6 w" F
  163.   /**5 U6 M. j7 Z" w3 V' }
  164.    * 更新数据  h! _8 i( u0 k) X+ e5 g, q9 R
  165.    * @param $table8 j1 `! t* R3 u0 ]4 s
  166.    * @param $where
    $ L; w/ k2 o$ O4 J/ h' C
  167.    * @param $data
    9 D; N) ?5 S" L& _, c! w
  168.    * @return bool3 w0 b. C$ r9 m. ?5 U
  169.    */  c9 C% U/ J1 _' ^' N) {
  170.   public function toUpdate($table, $where, $data) {
    * ~* ]; H, y! G, y
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    4 U  ]5 c& h# F2 f) c6 i! o
  172.     return $re;
    / _, {) C5 H6 U/ O. p2 I
  173.   }1 Z  W8 A. |, b6 k
  174.   /**, ?3 x" h! |9 h% G0 H4 p6 |$ T
  175.    * 获取唯一数据+ U7 \7 S7 _1 {$ X! m$ x
  176.    * @param $table
    , [: `5 D0 Z& `7 {, P
  177.    * @param $key
    $ i) j, ~  N) N6 c+ T  Z
  178.    * @return array4 v) \. m5 b) A3 r; X
  179.    */
    * T. _/ U& `( E! F+ X# b7 f
  180.   public function distinctData($table, $key, $query = array()) {) w3 ~& I4 ^3 B* \% J
  181.     if (!empty($query)) {
    . @2 N6 n( _3 |' a2 x
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);- ~" ^- f8 D1 T
  183.     } else {
    * K( [% J. A$ i8 d* f8 I; Q/ Z
  184.       $where = array('distinct' => $table, 'key' => $key);
    / p6 u4 A  ~  u+ ?- S
  185.     }+ J* a! Y, g. g6 A; d! `: f
  186.     $data = $this->database->command($where);
    / p7 M+ P4 f7 y9 O
  187.     return $data['values'];
    9 y, \6 ~" d* ?8 m! m: L9 [( M
  188.   }
    9 I- ^  r) N9 B% d5 E% Z
  189. }+ z$ v5 @% s2 P$ e' @$ `$ S6 q" F
  190. ?>
复制代码
. c" ~& e3 N' B4 W  |8 k9 u8 W
' ^, _& W7 [) w8 n7 L3 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-22 04:12 , Processed in 0.096150 second(s), 19 queries .

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