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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11421|回复: 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 u9 p& }) r/ D$ y0 V+ A4 t8 p% c  |
模式自由。
* v' ?% T8 i7 n; ~: w3 `/ v支持动态查询。, U/ s8 I; d* R( W
支持完全索引,包含内部对象。
1 R8 U, G# g4 ]& d& _支持查询。
; g9 [% L; i+ O  H7 e' L# S# N5 J支持复制和故障恢复。
) ~9 R9 ^7 r8 X2 d' Q& ]8 w使用高效的二进制数据存储,包括大型对象(如视频等)。) K& I- E; r# y; F
自动处理碎片,以支持云计算层次的扩展性
/ n. a" f8 h/ m' Z支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
" B3 R1 _5 g# A2 B. P) Z/ [文件存储格式为BSON(一种JSON的扩展)
* |- W( t! P% n( n: 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. <?php6 q! c+ }8 P0 [
  2. /**
    ; |9 [) f) I& W' R3 l
  3. * PHP操作mongodb数据库操作类
    / q( [- ^4 f1 ^
  4. */
    3 D2 K! L, q: }( \
  5. class Database {' B! ~$ x2 ?* P& s4 `9 j" {/ C
  6.   protected $database  = '';
    , {+ @/ Q5 z  w. m. s
  7.   protected $mo;, K6 {* x) g$ }6 J
  8.   /**
    , l6 {% @2 ]+ X% z$ _' v; |- A- c
  9.    * 构造方法2 K# f, k* @; e; p1 u( b
  10.    */
      [5 |' j6 v# ^+ ~) L
  11.   public function __construct() {
    , q5 M: z0 s- K5 {/ j$ Q
  12.     $server = DBSERVER;, k( w9 Y: T9 x8 Q4 K# z9 a
  13.     $user = DBUSER;
    - j6 k* c1 R) {6 R' t8 n: i! Q' j! ?
  14.     $password = DBPASS;
    ( Q' n/ j5 t0 A9 ]6 n
  15.     $port = DBPORT;
    1 B& A" E: Z4 X
  16.     $database = DBNAME;
      d7 V: t( x/ a
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ' p# h, f% b# C
  18.     $this->database = $mongo->$database;
    & H* o/ n) a/ s/ @
  19.   }/ t1 m$ n; `0 Z& q8 f9 Y. }, n& @9 V
  20.   /**
    0 _+ Z% o5 f) d# F
  21.    * 数据库单例方法
    4 E' ~, S6 H+ q$ }/ `: d6 ^+ t8 Y; \
  22.    * @param $server5 R5 W0 N3 f, T+ m/ t
  23.    * @param $user
    ; S6 m$ j) Q. K& l
  24.    * @param $password$ m( g7 D" D) b
  25.    * @param $port
    " ~& _3 t4 d& |% M$ Y
  26.    * @return Mongo$ ?( d" V$ V9 ?4 o( J5 l
  27.    */- M% |7 q1 @  n# `; @( v
  28.   public function getInstance($server, $user, $password, $port) {' K! V/ ]  {2 G: B  i2 ^
  29.     if (isset($this->mo)) {
    4 e6 W- ^  u4 I
  30.       return $this->mo;
    4 r0 u4 ]6 L: ^
  31.     } else {
    / U: z6 Z& D. s& P
  32.       if (!empty($server)) {
    & N6 `2 T! X3 H5 H
  33.         if (!empty($port)) {5 P) c4 |2 E+ Q; u% v" a
  34.           if (!empty($user) && !empty($password)) {
    & u9 h" t4 R4 t8 ], n% {& e
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    1 J0 ?6 X. R1 W8 M% ?# r6 x& m
  36.           } else {
    3 }2 l4 j2 L; I, p
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    - X1 M, ~( y7 E+ Y8 c0 l9 ~
  38.           }4 ^$ e4 ?% c# j8 c8 }$ Q
  39.         } else {
    8 M3 U8 g' z4 i8 ?$ X, w! p$ B
  40.           $this->mo = new Mongo("mongodb://{$server}");! t/ Z0 f  `3 C
  41.         }
    % X4 H+ L( z# W2 Z/ _5 ^' b- Y; O
  42.       } else {+ P, i1 M, |$ [) K
  43.         $this->mo = new Mongo();) T! ~- m3 M2 x& b
  44.       }. N$ U- Q. \0 E0 U2 w/ M
  45.       return $this->mo;( E% i% C, p6 u/ `+ \, _
  46.     }$ z' t* S, M$ B, S& D; A2 S
  47.   }
    : X0 C* n3 {+ w, \! t
  48.   /**
    & ^* d" @  S4 t/ y: B' F$ }: Y
  49.    * 查询表中所有数据
    / J% [1 A/ C; Q9 f
  50.    * @param $table3 m1 Q9 ~- B8 M2 |+ Q8 g$ e* P  D
  51.    * @param array $where% I9 H+ |" J. O6 F9 M) x# A2 d. A
  52.    * @param array $sort
    " e, i# h- }. D6 }
  53.    * @param string $limit$ {/ G9 @, b" l. P- X' C7 d
  54.    * @param string $skip5 W2 B5 ^9 g: J% W0 b) |5 f# H
  55.    * @return array|int3 `+ f! p# h; D: i, X; {1 `% Z, M
  56.    */
    - J# H6 ?2 Y4 [( c/ `
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    : O1 b- o. l" t# a; ~
  58.     if (!empty($where)) {9 f- L1 E7 o, A  H9 F/ |; K
  59.       $data = $this->database->$table->find($where);3 g" w6 Y- s' b7 g" r# Q( O; k6 c0 |7 t
  60.     } else {
    - n( K: n( X6 A. m
  61.       $data = $this->database->$table->find();
    : l! l0 J& s' E
  62.     }
    5 V4 D3 A) E: t
  63.     if (!empty($sort)) {- @5 ?* Q# t" Q$ J
  64.       $data = $data->sort($sort);
    2 F) T( W4 ]7 ^8 e
  65.     }$ q' k" _% p2 `. _
  66.     if (!empty($limit)) {
    ! N+ M2 g2 A- O6 f; A5 T9 x
  67.       $data = $data->limit($limit);  m" s( _4 t6 Y% q2 s
  68.     }6 q+ _  ?. a4 O- n, q
  69.     if (!empty($skip)) {
    & k7 u1 Z- x8 |( r) w4 a
  70.       $data = $data->skip($skip);. J% U9 H" Q: _2 G: j
  71.     }- @% i: i$ [; |+ y! G
  72.     $newData = array();( ^- T% c) _* S( I, R
  73.     while ($data->hasNext()) {
    ! A0 w9 S8 V& h$ }) `2 R/ a) y
  74.       $newData[] = $data->getNext();
    & }- {# R6 D$ e, [- e. a1 g) R# t
  75.     }
      K' F7 c( M9 ~
  76.     if (count($newData) == 0) {6 \. T& ~" J' T, @. Y, q
  77.       return 0;- A/ y. M8 A+ H3 d$ O3 W& u8 N
  78.     }+ s' k& O% |* e# a( i0 I
  79.     return $newData;, n0 A$ {+ @  m! M8 H' E
  80.   }4 y% N- ~/ ?/ }9 c7 M8 h6 o8 P
  81.   /**
    : q7 |6 z5 J- P! I; _
  82.    * 查询指定一条数据/ z1 N2 U9 ~, _, b
  83.    * @param $table
    ! Y4 ~4 A! ]6 w. g: }1 r
  84.    * @param array $where
    - l% ?9 l* w, R( {
  85.    * @return int
    0 \4 x0 p  ]6 \
  86.    */
    6 Y4 s: W4 O% q! I: K# b. h
  87.   public function getOne($table, $where = array()) {& L, k+ j% ]/ `1 W! t1 C) `
  88.     if (!empty($where)) {: Z& R" I- N& b: a8 h# T* n
  89.       $data = $this->database->$table->findOne($where);7 B4 O0 K: d9 \2 A- l
  90.     } else {' Y2 f+ p& _' q% t+ z* I
  91.       $data = $this->database->$table->findOne();
    2 x1 \  _! s# L7 Q1 F/ B: a
  92.     }7 a6 S0 F1 Y3 t
  93.     return $data;
    6 l% _2 [2 Q5 ]8 D1 [
  94.   }6 i5 t) D+ |; _6 x4 q
  95.   /**
    2 V8 ~$ M' `; B: |+ H
  96.    * 统计个数" R5 ]6 l0 M! x" g& Z' ^" P
  97.    * @param $table& r. y$ j% }6 K$ e
  98.    * @param array $where9 W8 H  H7 m" v) M( c. r  p
  99.    * @return mixed
    , B' Z. i3 ~( T2 E9 _; V
  100.    */
    * Q; T2 \1 k8 z8 I7 g
  101.   public function getCount($table, $where = array()) {7 n% Y- O  Z0 r+ S) I4 |' U
  102.     if (!empty($where)) {9 k9 g( H7 o. N9 Y- [  f
  103.       $data = $this->database->$table->find($where)->count();& ?2 v! w+ E- E1 r2 F
  104.     } else {
    9 O& }8 ~1 F" I# j  W+ ?
  105.       $data = $this->database->$table->find()->count();
    5 K) o. w% G8 O/ @2 R; S, |  A
  106.     }! S6 B# y1 p& B$ q, N
  107.     return $data;
    7 g& F4 l: s! Z1 g1 q# _: j0 O5 f
  108.   }
    ( Z/ j+ }6 l3 Z8 f9 I0 m
  109.   /**  G. p( h' e7 y/ E$ q# J$ s# n" j: }
  110.    * 直接执行mongo命令
    5 F" \( K! I9 }) E
  111.    * @param $sql
    # @! e% w6 ]8 a" U
  112.    * @return array5 L1 q1 |: |1 f* e
  113.    */$ u* n) S4 w4 W$ h1 f; Y7 ~
  114.   public function toExcute($sql) {, P/ t8 O# p" `$ q, n
  115.     $result = $this->database->execute($sql);' ?/ B. W# T) P6 u! {$ S0 \- r
  116.     return $result;# q6 m/ s( p2 R* T( o1 |8 }
  117.   }% {" W3 F9 Q  o
  118.   /**
    2 E7 w4 R9 W  \* t1 r
  119.    * 分组统计个数
    ' C- \. u( t4 W4 n/ a% b
  120.    * @param $table
    3 u* g+ b/ [# q
  121.    * @param $where
    7 t, b; X, ]/ J' M2 R& I
  122.    * @param $field7 d) e0 P, B; i+ r. O1 K2 |
  123.    */2 R5 m- I  W. O( k$ ?
  124.   public function groupCount($table, $where, $field) {
    : B1 B" k- [, }! q
  125.     $cond = array(
    : ]! V0 ~- i3 {# I- o1 R) k
  126.       array(
    5 m+ T  O! K& k% A$ [" Z$ [
  127.         '$match' => $where,
    2 p2 Q. [* {/ X* B8 H  f* c
  128.       ),
    ) X$ v* Q) U  b9 b+ b
  129.       array(8 f7 e* N8 P/ Z
  130.         '$group' => array(
    ' k! J! w" L) z$ l$ k  Q8 n* E
  131.           '_id' => '
    5 r- t' h" a- C3 `
  132. . g5 Q! F( n$ R
  133. . $field,  b/ ?" ]8 u' Y& Y% C) Q
  134.           'count' => array('$sum' => 1),9 G/ V4 n8 g; D/ w3 a. P
  135.         ),
    - ^/ _8 V- ~. i3 d! S2 |
  136.       ),
    8 Y! r- q: h* @
  137.       array(
    1 h: M  b" J% s4 _8 [2 @- g* z
  138.         '$sort' => array("count" => -1),7 W- B' U( k7 q9 b
  139.       ),3 }1 m" \( ~* b; x% e# n' I
  140.     );: _8 e) J5 G1 v' f
  141.     $this->database->$table->aggregate($cond);
    ( k: y$ w, A+ w
  142.   }; Y7 [6 r7 j% {5 z& c
  143.   /**' K% @5 q8 k+ k: R8 d$ p
  144.    * 删除数据
    9 A. _9 U& V* U8 D+ y" i
  145.    * @param $table+ s: v) ?# o( c$ P3 k0 @
  146.    * @param $where
    7 \. S, h% @) L8 A6 i8 a4 ~
  147.    * @return array|bool
    - B0 M" h5 E1 q  A, W
  148.    */
    ' F2 Q. q& H: b  u. n% }% w2 r+ b
  149.   public function toDelete($table, $where) {
    " h% M3 M8 k  `2 f) \
  150.     $re = $this->database->$table->remove($where);2 h: W7 E& ~; {
  151.     return $re;$ X; J, F9 R; R' I# P
  152.   }
    3 P% w, H4 B2 J- F# x, G$ Z, s
  153.   /**
    $ v' j" Z3 E4 I! V* o6 ?
  154.    * 插入数据4 T+ ~8 _9 w7 b4 Z; L0 m
  155.    * @param $table- n: }6 Q+ n; g7 b7 c
  156.    * @param $data5 [+ C( ^7 @5 F  C# R
  157.    * @return array|bool% V/ L( l8 q( V% I8 w. @: _3 B# I. u
  158.    */
    6 J- S, l: g7 o  z8 @# k
  159.   public function toInsert($table, $data) {
    + E4 k( d# s8 e5 z) J- ?9 `" P
  160.     $re = $this->database->$table->insert($data);8 F, }  O$ W+ C% H* k
  161.     return $re;
    $ I% c* |0 a) y- f( u9 k
  162.   }  H' X7 k8 b. Z3 o- ~' z, Q
  163.   /**
    7 S: P  Y# G" w7 R# F
  164.    * 更新数据
    / W5 m" w# }: Y/ t: j& J
  165.    * @param $table  V1 O6 f& I6 w$ C; j
  166.    * @param $where
    , k( b/ H0 S; t8 o- q# X: v
  167.    * @param $data5 J- X& {1 J- ?7 B6 |7 P
  168.    * @return bool
    / A/ a; z$ b9 e; p
  169.    */
    1 E" n0 H! [) r4 ~7 N
  170.   public function toUpdate($table, $where, $data) {
    5 A9 D  V2 e* j8 @7 c% r) S
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    / S/ o2 {& p& Q5 W
  172.     return $re;6 }% t! Z0 R! @' y# a9 O! p. C
  173.   }
    3 R% P' p3 C( n  s+ x
  174.   /**  g. W# v% y8 t# W4 t1 B+ `$ `6 c
  175.    * 获取唯一数据% j5 j+ }  w* J: R4 N) O5 @% T
  176.    * @param $table8 r! ?/ ^/ y9 _, ?+ Q3 ^: w
  177.    * @param $key7 N+ V1 J" b+ ^" x+ q; k1 I
  178.    * @return array- P1 t  K( b5 [# k
  179.    */
    0 K, _/ W! [; s3 o! k: S* r
  180.   public function distinctData($table, $key, $query = array()) {
    , Q1 |- y4 v" |/ }; k: N6 d
  181.     if (!empty($query)) {
    ) P0 |' z+ p4 V0 ]' A6 u  [
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 c) S/ }& G: `7 ^
  183.     } else {
    - z4 g# b, o$ i& z% w  |2 Z
  184.       $where = array('distinct' => $table, 'key' => $key);4 I4 ^" {3 J6 J' B( V0 D+ {$ r
  185.     }
    ! Y& \: Z9 g  P1 b4 x
  186.     $data = $this->database->command($where);. N; Q/ M, M% C! c# @- f8 D
  187.     return $data['values'];
    * S( c% Z, R: B! H
  188.   }
    + p5 g- H5 [: t! ?1 g, N( Q
  189. }
    % Z; ^+ ?% h6 @
  190. ?>
复制代码
( d" N) Z; }. t0 c4 _9 ^. }6 L
$ b5 F1 h3 w. {  S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-26 10:09 , Processed in 0.152008 second(s), 21 queries .

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