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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。, h7 Z  _: q% |
模式自由。- e/ E3 Q" U5 d9 [
支持动态查询。
! J5 E$ l2 J* @支持完全索引,包含内部对象。
8 f4 M8 q' q# Q. j( B, r支持查询。# j8 z6 \3 m7 p. w& g5 b
支持复制和故障恢复。3 g9 e: G! r5 d
使用高效的二进制数据存储,包括大型对象(如视频等)。. |( q- V0 J+ ]& u5 `  v
自动处理碎片,以支持云计算层次的扩展性
& ]5 }9 I( B  W7 P6 J0 h7 ]支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
) L+ ]' @# K- d2 l! N' C文件存储格式为BSON(一种JSON的扩展)
- B! K8 a' A9 Y) j可通过网络访问

所谓“面向集合”(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
    % _- t9 G5 q3 i. R# _
  2. /**
    % i# S8 g8 |3 R
  3. * PHP操作mongodb数据库操作类
    3 d' m8 B. d& ]& q
  4. */
    2 J; u( `6 r0 w( k8 {$ v* e, T4 Q
  5. class Database {+ m! U- V: N, e. B5 s; S5 ?
  6.   protected $database  = '';7 |+ a2 v; }; M% k5 v0 q* A: @8 S
  7.   protected $mo;
    & R, @& l4 L8 ~1 v
  8.   /**
    ) E- x8 Y/ t  p' i3 a
  9.    * 构造方法; X/ G' V# T4 r  T
  10.    */9 _6 Z% k/ [, t* G+ }( U
  11.   public function __construct() {5 B/ T9 I5 R8 P1 d: I- a1 g3 a
  12.     $server = DBSERVER;/ C; Y+ h' M7 d2 b
  13.     $user = DBUSER;+ K7 F2 S) e3 U& d: J: e
  14.     $password = DBPASS;
    . c: |! _; Z; Z% `/ K8 {
  15.     $port = DBPORT;
    * g8 S  Z+ r4 V' c, k
  16.     $database = DBNAME;
    ! r6 L7 d! k7 X1 a0 j
  17.     $mongo = $this->getInstance($server, $user, $password, $port);# S8 [5 P$ F. i, P# m# j
  18.     $this->database = $mongo->$database;
    & W- G$ Z0 a$ @: u! {3 i! A
  19.   }
    % Y% l* r1 g/ K( K
  20.   /**
    5 W- a, e+ o1 r9 U
  21.    * 数据库单例方法, \  P6 R; C- n) S5 g
  22.    * @param $server# N) h4 y( N- o4 H, W5 x5 m
  23.    * @param $user
    $ ]/ @: o  ]. S+ M$ O7 P
  24.    * @param $password5 W6 ~  o1 d5 J7 T8 ]
  25.    * @param $port& D1 G) Q1 J/ j* K
  26.    * @return Mongo
    . [! V; R+ j1 V7 t
  27.    */* q: t& N+ P# J# x1 ^
  28.   public function getInstance($server, $user, $password, $port) {( U6 i  x6 ?- Y
  29.     if (isset($this->mo)) {
    . T' M2 c7 d3 P/ L5 e. C
  30.       return $this->mo;
    2 {0 K# u7 Z+ a$ [: d9 r7 T
  31.     } else {3 q; q; U, @0 F" @# M; s
  32.       if (!empty($server)) {
    9 b# h$ K7 ]1 E
  33.         if (!empty($port)) {
    ( O& `: R$ J0 y0 z$ D
  34.           if (!empty($user) && !empty($password)) {1 K9 ~7 |, I, f1 L
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    8 z5 S6 v1 h1 m* z# o) j
  36.           } else {" J$ g. l6 K. I1 O. T5 g
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");9 ?* R3 m+ K) |2 w' B2 F
  38.           }
    : B; B. V5 g+ ?4 ~4 _: M
  39.         } else {' c3 h: r3 \) ^) S6 ^- L7 |, m
  40.           $this->mo = new Mongo("mongodb://{$server}");
    5 _) d( a$ t7 H" n1 G# v' S4 l
  41.         }7 w0 Y& D& I# z) @" g8 \
  42.       } else {
    ! q, z5 r; B) t9 l; R3 m
  43.         $this->mo = new Mongo();
    % c6 W4 Q8 d# a: l3 p
  44.       }- Q' E! O/ h( O1 y- s* Q
  45.       return $this->mo;
    $ P! |( n( m" J9 @! @& I3 t
  46.     }. r0 i  Y5 n+ _9 R% q
  47.   }% C, j5 a) M! }8 J0 ?
  48.   /**
    " s! x+ ~# h% z9 V, ~8 ~- H( I* c9 m
  49.    * 查询表中所有数据
    , Q3 j2 M  _1 q. B! m
  50.    * @param $table5 o% w( R' h$ B" d7 L
  51.    * @param array $where
    ! e5 `% `  y3 s5 I" ^- ^
  52.    * @param array $sort
    6 T; [0 r1 k8 s$ f  ]
  53.    * @param string $limit1 \* S( X4 H8 i" D! _/ |
  54.    * @param string $skip
    5 C/ s# a$ H: @/ m' f4 d
  55.    * @return array|int( S7 G* _  l% C
  56.    */6 }* G2 A; n' h8 p
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {! ^; B* g  K; @/ i  t
  58.     if (!empty($where)) {
    + g) x: F/ ]8 Y0 w( C1 w* b7 r
  59.       $data = $this->database->$table->find($where);+ r* a+ [7 A! l2 J0 Z
  60.     } else {  i. V) Q1 k  `
  61.       $data = $this->database->$table->find();* _3 w# ]& [8 A5 R
  62.     }* q0 p* i6 L# o  P+ ^! S/ R
  63.     if (!empty($sort)) {& y# q/ _. w1 B% p7 @
  64.       $data = $data->sort($sort);) }8 @6 h5 a+ y. g0 i6 x/ ~2 I
  65.     }
    8 r$ Z4 p( |& ]7 W& u8 d) h
  66.     if (!empty($limit)) {
    0 U, n$ W: f/ N$ I7 X/ M1 ~
  67.       $data = $data->limit($limit);" q6 B. L+ A2 L  i7 U
  68.     }5 z7 Z9 t8 d- k% e- E' b
  69.     if (!empty($skip)) {, C8 i& }8 |* Q( J  V) ~" `- b: z
  70.       $data = $data->skip($skip);1 D; E. g* q1 s$ Y  z, U
  71.     }0 }& Q$ \! h; L% G
  72.     $newData = array();5 y  K: p3 ]3 z& U
  73.     while ($data->hasNext()) {
    , m) C" J" _* C+ Z7 Z: R
  74.       $newData[] = $data->getNext();
      u* Q! N. N9 Q# g" |- d1 I
  75.     }  J9 T" U3 z- i8 m$ h$ w
  76.     if (count($newData) == 0) {8 r% Q% n0 {/ o3 ?( m
  77.       return 0;
    * o5 q6 M! s9 X
  78.     }2 x3 M5 K0 F3 ?- T! w# J
  79.     return $newData;
    1 k: I  s& i# @4 a  |1 Q# B# D
  80.   }
    5 Q: ?6 o" B3 F' K5 }  L
  81.   /**
    + E* g0 ?& Z  s) R
  82.    * 查询指定一条数据
    0 f' V9 g) ~3 T- a' x8 _7 D
  83.    * @param $table
    - }* [& t+ [0 P2 p8 k
  84.    * @param array $where' ~( }& L2 A, [3 A8 Q
  85.    * @return int
    0 ^. V+ D# @3 e: K3 f# _, n- z
  86.    */$ Z& f- L7 S1 p0 O& k8 G/ f2 w
  87.   public function getOne($table, $where = array()) {
    2 M$ G% x0 O1 \% \: \. ]
  88.     if (!empty($where)) {* U- G! e/ s6 T7 v8 e; }
  89.       $data = $this->database->$table->findOne($where);+ V; g, w+ p# _  F
  90.     } else {
    + `1 G7 e; @* M
  91.       $data = $this->database->$table->findOne();
    . B* l$ Y. i' o7 {) f0 g% G! B
  92.     }
    / j: |2 M0 |9 h. ]) Y* M8 l" t
  93.     return $data;
    ! H! V. j4 {1 c9 b" D9 F3 {! v  r
  94.   }( V$ }6 R8 q) m; K" `
  95.   /**: U3 k1 M1 e, {+ j' K1 m5 S* ?6 f
  96.    * 统计个数) b$ o1 |( I! }
  97.    * @param $table
    4 N% O  }* d/ \6 ^
  98.    * @param array $where! k7 t/ ~* ]# a3 A
  99.    * @return mixed+ P  B( E* X- b0 v: n
  100.    */3 T$ J7 G0 T6 C" S
  101.   public function getCount($table, $where = array()) {, N+ F. [4 I* v( t
  102.     if (!empty($where)) {
    ' w9 Z) C5 }& g6 ~, j# G/ ?
  103.       $data = $this->database->$table->find($where)->count();
    . I8 W, ^% }8 A
  104.     } else {
      o: r) g, _1 S
  105.       $data = $this->database->$table->find()->count();5 q6 I! p* A2 q' |* v+ H
  106.     }8 r3 W7 p1 n8 ~/ I3 A4 z$ O8 |
  107.     return $data;
    / |! F# O1 b9 n; A
  108.   }
    ! f: }5 L7 j7 g2 n
  109.   /**% ]: y% k! o6 L( [* ?
  110.    * 直接执行mongo命令
    " u7 w! ^2 H: F8 i7 a4 @) X
  111.    * @param $sql# T  ^' ?2 [  T0 {* C' `) O3 H
  112.    * @return array  _% ?5 [+ [, Q; D# a3 @) B
  113.    */
    : g) c" c, X& O9 C  j
  114.   public function toExcute($sql) {' w6 m% J$ L& V5 u
  115.     $result = $this->database->execute($sql);
    - e+ d- t5 N% W1 ?( b8 k. V, v
  116.     return $result;
    5 }" D& x/ S& k# t. Y& T: |4 [$ h
  117.   }; {3 t7 j/ y) F7 k
  118.   /**6 m# m  i! h8 K8 c$ b8 ?7 q1 w  i! L
  119.    * 分组统计个数
    8 X+ y" s. M5 ?% R
  120.    * @param $table
    * f% m+ @. ]8 L  Q$ `+ p4 m3 d
  121.    * @param $where2 W6 H  k; A2 M; [: l: \7 G" v
  122.    * @param $field! y+ u0 s' g. P! X  I. j+ z
  123.    */
    * a# B; x7 n5 `! ~1 p. ?* ]
  124.   public function groupCount($table, $where, $field) {
    * w! U3 w' \  |: s2 P
  125.     $cond = array(
    : y5 X! Y& H4 n! h& K, M: `
  126.       array(
    3 I7 x' Z7 U, u% L
  127.         '$match' => $where,! ?) }5 V9 S% _: n
  128.       ),1 S$ t* |, M# b1 h) J7 N, U
  129.       array(1 a  g8 |. ~  v8 K; a
  130.         '$group' => array(
    " g* \$ K. j; V% F% ^$ T
  131.           '_id' => '' O9 \2 f) N8 w9 t9 g

  132. ) g5 P7 Z! U! J! W5 m" J* h) ^" W
  133. . $field,  ]: U5 a7 A* o
  134.           'count' => array('$sum' => 1),
    0 N" T3 m9 Q7 A# o4 N
  135.         ),
    9 I7 J$ X# e% q8 t# @
  136.       ),
    2 l  Q( C. Y) q% G6 Y
  137.       array(
    ; m7 i) ?& h+ h& s; e" T  f
  138.         '$sort' => array("count" => -1),
    ) `- Y4 \2 g/ o* w& K
  139.       ),
    + ~- ?* A6 F. P* j7 p
  140.     );4 H- b/ ~/ ?& G* J" @) n
  141.     $this->database->$table->aggregate($cond);
    / g( ]6 T! e7 t. Z+ b
  142.   }
    0 x* A* K! l3 @8 @4 C4 x  o
  143.   /**
    9 M! q0 e% E! D0 Y
  144.    * 删除数据
    , ~; v2 \( u- t; U
  145.    * @param $table0 ]# Q& c9 l/ g& c  H4 `( V6 I
  146.    * @param $where/ e; S2 {' h2 _" \9 h" G3 c! S* j
  147.    * @return array|bool- Q( c6 v9 ~8 O0 l: D) y& P
  148.    */
    ( ^9 L, F* \2 H( G* d9 J
  149.   public function toDelete($table, $where) {
    ' |; v0 o) a( Y- n- s$ W2 d# k  ?
  150.     $re = $this->database->$table->remove($where);" S/ X  F1 {" x+ w% \8 Q. R* s% ^
  151.     return $re;9 S0 p& h  c9 G
  152.   }8 r- k/ ]% Q3 j2 z  x
  153.   /**' n' c. S! s3 ^$ x
  154.    * 插入数据$ G/ N: G: K) s1 _
  155.    * @param $table5 ]! n1 b! p) A, s+ ~7 N' P
  156.    * @param $data
    8 O1 |* M. \" s  N
  157.    * @return array|bool5 T8 K0 Z, h2 ?  q
  158.    */
    , E# z4 d' x- H. V4 Y
  159.   public function toInsert($table, $data) {7 _+ C- Y  r" D& D
  160.     $re = $this->database->$table->insert($data);
    6 N/ g4 Y$ q, x( G0 |
  161.     return $re;( k* ]% A) V3 U) Y. q' Q
  162.   }
    ' q/ R3 Y3 a0 ]7 X/ B! C
  163.   /**6 ]7 e2 ]  S0 I
  164.    * 更新数据
    # \6 l- h. k: ?+ @6 W
  165.    * @param $table$ G' v1 ]3 }- i& a
  166.    * @param $where0 ~& b% O; |; z; W0 c5 h
  167.    * @param $data& q1 o/ V) [- [$ Y6 t
  168.    * @return bool8 f6 A5 V% E" \4 z6 K5 D# C
  169.    */
    5 W# B2 N$ m- t
  170.   public function toUpdate($table, $where, $data) {
    - H8 m: h4 ?' N
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    " |( k+ `, ?7 a2 U; `% [2 ^4 R5 ~9 k
  172.     return $re;5 u# {; W; ^6 u8 u
  173.   }, z2 v6 C  n/ a, W- p
  174.   /**
    2 B9 o+ \. K: ]4 Y& h
  175.    * 获取唯一数据" v, `, Y5 Y+ v0 p5 v. H' M3 n
  176.    * @param $table0 j# H2 f0 v" P+ R
  177.    * @param $key0 m4 m5 Q" T5 R5 T4 H
  178.    * @return array
    4 [7 a2 |: H5 h, v) X
  179.    */
    # x: C: H; A2 N$ ^+ ~  y- G& m
  180.   public function distinctData($table, $key, $query = array()) {, B8 d3 H6 M1 }! f8 d& j0 y: r
  181.     if (!empty($query)) {: c. m% D; ~: K
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 q) k# Y  s- [' [2 n
  183.     } else {# {, I- r- ^. ^
  184.       $where = array('distinct' => $table, 'key' => $key);6 Y8 t. J" W4 c9 q" v
  185.     }, i% Q4 W  U+ }1 l! S" {
  186.     $data = $this->database->command($where);) N* n4 x( |( G6 \% I1 M6 Q8 D
  187.     return $data['values'];
    % J; s+ E; ^0 X2 V$ m1 y5 t
  188.   }
    % q& n7 T( M) M% N" {
  189. }
    4 `, W: U3 A; @4 ?7 G( B& \  I2 o" a
  190. ?>
复制代码

6 R1 g; _- Y2 w, v4 ^
. v! X- J, C% a# h8 r4 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:20 , Processed in 0.114205 second(s), 20 queries .

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