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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
! F% @8 F8 u! [3 ^) z8 e) \& \3 W模式自由。  K3 r/ f+ V# Q" r5 c# ?
支持动态查询。
% e# @! w  v/ h7 Y% C+ i6 N) w支持完全索引,包含内部对象。
. z+ Q; J! d. h) [支持查询。# b' w, ]/ R5 K8 H+ f
支持复制和故障恢复。
6 \1 e. N: U! v+ H0 R使用高效的二进制数据存储,包括大型对象(如视频等)。& M* N% e) O9 L, |
自动处理碎片,以支持云计算层次的扩展性: q  l5 V1 c$ N
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。; Y7 M0 n* S' \" G
文件存储格式为BSON(一种JSON的扩展)
5 q. f5 ^" E2 g, T. [, I* }可通过网络访问

所谓“面向集合”(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. P( ~) m6 f5 X5 Y
  2. /**( f  U  ~# `+ ~& v) I
  3. * PHP操作mongodb数据库操作类7 e( G) k- H6 J( N' b% o
  4. */. G. ^* `( {$ z$ p
  5. class Database {
    5 F: l5 _/ t! E, C
  6.   protected $database  = '';+ }6 R1 g' b% O+ k& a: A- R1 d
  7.   protected $mo;2 J) z/ G! {8 P+ p& C/ R, j1 `
  8.   /**
    * U! Y' i, g9 C1 `0 q" w9 d
  9.    * 构造方法. l$ X7 A( k9 M8 \" J3 R, K# u2 y
  10.    */
    0 q% t) \6 f& W. y& w# E
  11.   public function __construct() {7 A1 u/ Q- \7 u/ ]
  12.     $server = DBSERVER;
    + [. U" L" w+ L+ j$ u' ~4 A
  13.     $user = DBUSER;
    2 I# Z* \' n4 k; N: Q5 Z" `
  14.     $password = DBPASS;& \; u- F: h5 J! j4 p
  15.     $port = DBPORT;
    + g3 W3 \. N1 A" A9 Y
  16.     $database = DBNAME;
    7 K" n/ M: }, F/ R' Y5 O/ x; B3 W
  17.     $mongo = $this->getInstance($server, $user, $password, $port);3 D, R$ r0 B) d; b, n
  18.     $this->database = $mongo->$database;) a0 a* X+ f0 p4 d( A
  19.   }
    4 B3 {+ [* r. ]9 n4 B
  20.   /**
    - U/ F6 k& M7 Q! }
  21.    * 数据库单例方法, v* P+ _8 V" G9 O5 N3 Q- t6 @
  22.    * @param $server% h8 p2 r/ p' i1 j  I
  23.    * @param $user
    * a& |0 v# Q8 L; \
  24.    * @param $password3 e4 B5 L1 T; ]" z! s- `9 p" t0 i
  25.    * @param $port: l- H/ r- \* E6 e: U3 W7 m
  26.    * @return Mongo) h' ]" l) e! \# p
  27.    */$ ]7 B$ `9 j5 W' b
  28.   public function getInstance($server, $user, $password, $port) {% K' f# x, Q7 }. j) h8 B0 B
  29.     if (isset($this->mo)) {
    # h8 ~) Z1 X' o0 w# x
  30.       return $this->mo;
    3 X! I% b  `+ _; l* s) _
  31.     } else {
    ' N( T: K/ y& ~9 k+ `' ]
  32.       if (!empty($server)) {1 Q7 S& Z& A$ {, M$ X" w
  33.         if (!empty($port)) {# R* @5 p; k% n$ q/ @
  34.           if (!empty($user) && !empty($password)) {
    4 ^: k& Z* Z" A, y
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");7 w# I) I1 U* D1 Y4 m& b, j, l" p  Q
  36.           } else {
      [3 z& V6 l5 E* b9 `
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");% z# K* p9 [% u+ m6 ]$ B+ L
  38.           }- d' u* l* Z" L0 I
  39.         } else {  ~5 y" S7 U+ j: S% Y; B. l; H
  40.           $this->mo = new Mongo("mongodb://{$server}");
    , ]% D* B& f4 W% d- o3 ^
  41.         }
    ) m. H6 C4 J3 i8 V' t
  42.       } else {8 _( Y/ P; v( f5 D2 ?1 d
  43.         $this->mo = new Mongo();
      q0 U6 j0 ]; ?3 @/ O2 u3 P
  44.       }
    & r/ c% [; t- l8 w& B
  45.       return $this->mo;9 Q; t% f$ B* y9 ?6 L
  46.     }
    5 r5 k# g8 I# Z( J% c1 R& N, G
  47.   }
    4 {9 g& ]; k& r& k. o
  48.   /**9 h/ X( o, ~/ m% e$ Z" B- ]6 P
  49.    * 查询表中所有数据
    ! o5 e5 C; c5 ?1 j) t2 k6 D& T+ r
  50.    * @param $table. o0 f3 W* i# }- d& M9 ?
  51.    * @param array $where2 }+ j$ J/ w+ S" ]6 f
  52.    * @param array $sort
    # ?9 y) q2 X  i8 v5 s0 {
  53.    * @param string $limit
    % q) v9 I; n* |5 J
  54.    * @param string $skip
    % S% ^7 Y# z1 M- d$ n5 l
  55.    * @return array|int- b. P% F2 i' y6 C! n5 V9 u
  56.    */9 k7 V7 `( X5 S' K8 _# j0 I( h
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ' U" K7 T3 }1 S
  58.     if (!empty($where)) {* u3 K# ]+ d0 U1 u0 O1 j; A5 X
  59.       $data = $this->database->$table->find($where);8 P1 U! g9 u5 }" O
  60.     } else {
    - I6 [7 n2 w5 O& t& A7 V
  61.       $data = $this->database->$table->find();
    ! S, T8 a4 ]( [/ B& l$ M
  62.     }
    1 l& }, s" Q. }, ?/ v' q
  63.     if (!empty($sort)) {
    $ ?: T  }3 A1 }
  64.       $data = $data->sort($sort);9 q, n( a5 l+ y- @# C8 L+ @( D
  65.     }- L: z1 T- h' \
  66.     if (!empty($limit)) {+ h+ E: _1 Z- b& M1 v. I9 `: n
  67.       $data = $data->limit($limit);
    % w: J7 e9 i6 n. V% H& {
  68.     }
    " O+ l) U" b& V! a! b
  69.     if (!empty($skip)) {
    8 y, f# @2 \' }5 B
  70.       $data = $data->skip($skip);2 |" p! C$ M3 l$ t
  71.     }
    . T+ G( ~( H/ G+ O% M
  72.     $newData = array();) Q! v6 U' e6 t- C8 P$ v. `+ v
  73.     while ($data->hasNext()) {
    : K  c7 }4 L1 l3 r8 d
  74.       $newData[] = $data->getNext();- m  [4 z" Q  b6 K" p
  75.     }8 @9 K7 N2 a" f+ C  h
  76.     if (count($newData) == 0) {9 [0 p4 s# x5 U. r4 F% U
  77.       return 0;
    1 g& R8 w; P9 A4 P
  78.     }
    $ H, S& J* ?/ |% D; `9 ]' s  g- Q
  79.     return $newData;3 v$ f9 J6 `' W. ?
  80.   }
    , r( U, n3 O; \5 n: a6 S+ P8 ?
  81.   /**
    * D  i7 v9 r, q& _% Q
  82.    * 查询指定一条数据
    ; F1 N5 r2 p  S
  83.    * @param $table5 {' l0 [! C# b0 t
  84.    * @param array $where3 Q0 ?0 Y1 o5 ~  K6 s
  85.    * @return int& G1 `& p+ ^+ b' {6 ^* S1 }) x2 a
  86.    */
    # {# I+ d4 @" p2 H& L
  87.   public function getOne($table, $where = array()) {
      P, L' g* w  k; F/ Q
  88.     if (!empty($where)) {. X- E( k$ r/ T- o0 J: I' a
  89.       $data = $this->database->$table->findOne($where);( k7 N* ~3 ]0 K$ {
  90.     } else {) t6 [% t8 u  k; C; n+ a
  91.       $data = $this->database->$table->findOne();
    * q/ V8 u& g' h# d( S# p5 l8 ^9 |
  92.     }
    : a. j1 R9 ~/ |
  93.     return $data;
    : K/ t- e- E+ q- i5 P! {3 `
  94.   }0 w2 }4 e( B& k3 {
  95.   /**
    " U1 A5 M& g1 r! \. E
  96.    * 统计个数$ h& r$ @$ k$ q; c1 E9 S# n
  97.    * @param $table0 T8 G. q5 ~+ ?: I" ^; ~, i2 }
  98.    * @param array $where
    ( K$ x; m9 a( {( h. m  w) w3 U
  99.    * @return mixed; q, i) Y$ x, z% h+ F
  100.    */) H4 y) y* q. P7 }
  101.   public function getCount($table, $where = array()) {$ d  W5 P/ D4 Q, ~7 _- a7 e" L
  102.     if (!empty($where)) {
    . |1 Q. ?. f0 U* \
  103.       $data = $this->database->$table->find($where)->count();& n: B) f* @8 T
  104.     } else {) d3 {/ k. d" |% X6 {
  105.       $data = $this->database->$table->find()->count();
    ) R5 U& y6 Z0 v6 H# |
  106.     }: e9 ~% n/ u. P2 U
  107.     return $data;
    & B7 \. Z8 \9 @7 a3 ~8 d
  108.   }
    - d9 V, l) `8 r( s& b
  109.   /**) e8 T3 A8 Z2 u9 v& [
  110.    * 直接执行mongo命令
    * W, S! i% j" b" A3 ?) Q' }4 m
  111.    * @param $sql# n- H- |# w$ }
  112.    * @return array
    1 p+ U1 t/ ~! k- m# h7 J; G! u, r* D1 F
  113.    */
    6 g: F% u7 G5 C7 V8 H$ W" n
  114.   public function toExcute($sql) {+ I. m" E( N. Z9 l
  115.     $result = $this->database->execute($sql);- y$ V1 G* J* s
  116.     return $result;7 Z" V! ^7 Z" c9 T
  117.   }
    ) `0 g0 `. R. J
  118.   /**6 j, b5 B3 {9 b. e' S. \
  119.    * 分组统计个数
    ( h0 d7 _* N7 |/ e4 K# m* r
  120.    * @param $table# Z: p5 m3 ]) A8 W, ?4 @
  121.    * @param $where& u* `8 I4 E9 \& p
  122.    * @param $field
    + N7 V' I6 d5 M" }" A' j' F, D. A
  123.    */! k: H# _; d& b% L: ?# m: }
  124.   public function groupCount($table, $where, $field) {
    4 `2 d2 T0 S: ^. i$ A
  125.     $cond = array(/ ^  T3 n! g6 E2 l$ J- D$ P
  126.       array(
    8 p9 n5 S" Y0 V& I
  127.         '$match' => $where,
    % }# S9 |* l3 M9 u7 M7 E8 A9 F/ l
  128.       ),
    * L, G8 m( y8 E4 z# L5 S- w: f+ q
  129.       array(
    $ I* p% E8 o; s5 l
  130.         '$group' => array(
    * b/ m, v+ d& c! C
  131.           '_id' => '" Y# H7 i- G* Z- N/ B/ }

  132. 9 U. y) e7 M6 `4 |6 w, F% i
  133. . $field,
    0 h# c" P' h+ l+ @: ]7 [/ c
  134.           'count' => array('$sum' => 1),) c/ X' `! N0 G1 o7 T
  135.         ),; B" Q8 r1 G  }/ `8 b( \: s
  136.       ),
    - h4 ], q+ a/ d! d8 o1 I
  137.       array(
    : q" X7 n& x2 G- a* _# G
  138.         '$sort' => array("count" => -1),
      ]3 k& {% t- G- f6 X  s
  139.       ),
    4 X- R& \7 n6 {; a- |0 C
  140.     );" X: H, V: k, t4 E. s0 f
  141.     $this->database->$table->aggregate($cond);
      R! S+ J( l2 I% I" |! x0 G! q
  142.   }
      d) I, f8 f8 `
  143.   /**
    - F/ z8 T, V3 B8 H$ N! V+ v+ e
  144.    * 删除数据* X8 v7 }& X0 D$ ?% p
  145.    * @param $table9 L' W8 U0 o- c# R& i8 ~* f8 R0 Q  V
  146.    * @param $where+ G7 ~' e  M# i) L" w! ]6 U/ V
  147.    * @return array|bool$ R: e% }/ z( T
  148.    */4 Z' @) R) D; i, l! K
  149.   public function toDelete($table, $where) {
    & ]- N7 T# I& D  u! F) P- q
  150.     $re = $this->database->$table->remove($where);5 h7 c- E+ d4 u0 l* G
  151.     return $re;
    ; }7 v2 W4 n! P; \; t
  152.   }/ ^( t& p, q* b2 J1 v1 {
  153.   /**% G" X0 o3 b: E; n' ]/ `
  154.    * 插入数据5 \! m: l6 Z$ e
  155.    * @param $table
    3 M4 r& b* r9 z$ A( G+ U
  156.    * @param $data
    9 p0 f% X4 A/ ?- u5 ~
  157.    * @return array|bool
    ; O5 @+ F: f. U" o7 k" b# b' x
  158.    */7 K2 S' H2 {6 H! q
  159.   public function toInsert($table, $data) {0 G  h# y- {! R( ^
  160.     $re = $this->database->$table->insert($data);* i  y4 w- a6 n
  161.     return $re;
    ) w+ a5 b0 u1 b9 b! i- Y" J, J" s
  162.   }
    % @" R/ E+ W8 `2 u# ~( Y
  163.   /**5 L: p& Q, _% N& ?- D
  164.    * 更新数据
    % @3 |; `* n1 ]8 v, y$ G+ F
  165.    * @param $table1 E% q! f2 |3 Y# X6 ~7 D
  166.    * @param $where$ a( A3 R& g0 D0 W
  167.    * @param $data
    & G% s. @* @! s: N0 t' @: ?
  168.    * @return bool( v4 F* N) u3 ]- p8 C; |
  169.    */# p" N* m7 `* x5 @
  170.   public function toUpdate($table, $where, $data) {
    ! z' ]; l! F" X, X1 O
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    1 G2 y6 a9 z3 q
  172.     return $re;
    + [( K, B! n& D
  173.   }  l+ L, y( @* o
  174.   /**8 M+ ^3 o5 B2 [  A$ u6 a) f3 {
  175.    * 获取唯一数据
    # R- b- V, T( R1 j" a$ H' o  p  h
  176.    * @param $table
    - G* G0 p3 i! l( K6 o8 t
  177.    * @param $key
    2 F& M# d% G& f! D7 _
  178.    * @return array
    * Y* `$ V+ M: _2 ?7 u! F" x' E
  179.    */+ J) G5 H  p1 z- K" `4 m
  180.   public function distinctData($table, $key, $query = array()) {) H. {9 B9 l$ B4 v  h
  181.     if (!empty($query)) {
    : M9 k* y( C4 E) A8 N
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
      K" p: {+ a, x* R* f
  183.     } else {
    & M: E1 I. f/ T3 o- I
  184.       $where = array('distinct' => $table, 'key' => $key);# m$ J- Q8 n7 I! y6 F6 O. L5 }& N
  185.     }9 t" l! I! q7 |' Q& R
  186.     $data = $this->database->command($where);
    , w$ ]+ @4 r. ]5 v4 O
  187.     return $data['values'];2 |- S  ~( B2 }
  188.   }
    ; H2 P7 P/ q, d9 `- ~( b- H$ R1 {
  189. }% q" o- L# E, }9 G/ [
  190. ?>
复制代码

3 Y# t2 ^. r( g. g: i7 i
) `) Q" V* U$ C% r% d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 21:28 , Processed in 0.113255 second(s), 22 queries .

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