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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。; {% P1 d) Y' @1 h9 h. D2 K
模式自由。" k; j' ~0 \) I
支持动态查询。4 F+ b0 t/ x0 l4 I+ \8 M
支持完全索引,包含内部对象。
! o, o( r* Y& X5 j+ j3 N支持查询。* @4 s3 j; e7 P: B+ i
支持复制和故障恢复。
$ G& J/ n: R+ F; x3 @# F使用高效的二进制数据存储,包括大型对象(如视频等)。2 T& G, H) i7 H  O- F; O
自动处理碎片,以支持云计算层次的扩展性( R. q1 e' Z8 n+ |4 y5 L7 A
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
* M; q# j2 H: m' P* R" M文件存储格式为BSON(一种JSON的扩展)
, s' f4 f( U& w# k可通过网络访问

所谓“面向集合”(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
    4 t4 r1 W$ z$ L" I0 Y( _! K
  2. /**
    4 P, i% i6 P# E2 ^" _) _
  3. * PHP操作mongodb数据库操作类
    7 C5 ^- D5 u9 M$ N
  4. */" |5 z/ j4 M; G7 J* d: B
  5. class Database {6 ]+ f0 H( U7 i, ^4 S9 x- W8 J0 b+ ~
  6.   protected $database  = '';! `4 ]( y: B/ B8 S$ s: i
  7.   protected $mo;: @+ S% a" {  f" K, X/ a
  8.   /**
    ) a) I" ]9 J# V6 S' J
  9.    * 构造方法
    % W4 [7 V2 N. H3 k# Q
  10.    */- Q9 M, b5 v7 `' V% j
  11.   public function __construct() {) _4 D# D+ j+ |$ z+ T7 v
  12.     $server = DBSERVER;
    5 s$ V. I- B/ r) P$ c$ A" h  I
  13.     $user = DBUSER;+ d" s- G4 ^2 U% y( q# _
  14.     $password = DBPASS;
    4 O: {' I" A# k+ h. f" H6 {
  15.     $port = DBPORT;, x* V' j$ _( r/ `: \( E
  16.     $database = DBNAME;+ [! p! d; p* o( s' V0 [2 S
  17.     $mongo = $this->getInstance($server, $user, $password, $port);( D5 b7 w$ q# k9 `9 s* h6 Z2 E
  18.     $this->database = $mongo->$database;
    , F5 Q# H% P" p$ {, n6 y! R2 N
  19.   }
    # [% r/ V' S1 H$ M+ n
  20.   /**7 _, g" R. M; g( }5 T
  21.    * 数据库单例方法6 K# O, J: a# K3 y# v
  22.    * @param $server6 z# S: z$ U& d  T+ n
  23.    * @param $user7 d8 s6 ], o! S% A3 ~
  24.    * @param $password
    + J4 c8 Z+ a6 ~# W
  25.    * @param $port/ [% ^, |% H) M- l
  26.    * @return Mongo
    : J# f5 Q9 T0 A  u" x
  27.    */
    $ I, O# `7 l0 X, `
  28.   public function getInstance($server, $user, $password, $port) {
    3 e7 ]! z" Y" ?3 l, C  i$ L( ]
  29.     if (isset($this->mo)) {
    $ d. O5 f& B$ U# w. K* x
  30.       return $this->mo;
    ' o( [, @. @+ x
  31.     } else {0 x% p- P4 u& Q4 ]9 [! q
  32.       if (!empty($server)) {
    % U8 b' m/ }9 `3 X# v6 s& N
  33.         if (!empty($port)) {
    + I+ ]0 ]0 P, J0 o
  34.           if (!empty($user) && !empty($password)) {
    ! x& B6 |" z- p7 \% j
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, o% {# Q7 f# O  o3 _2 S/ W
  36.           } else {
    2 _& m. E: |/ y
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");0 I3 {, I/ v$ A% H0 F
  38.           }1 _' n1 m' [7 A2 D3 h( k
  39.         } else {  |3 `" c4 k" N& `# }
  40.           $this->mo = new Mongo("mongodb://{$server}");: L, z( Q- x, F& Z7 I
  41.         }4 F& b' z9 o8 g# [- _+ C
  42.       } else {
    7 W- p% r" ?5 Z% e3 `
  43.         $this->mo = new Mongo();" Y# o% ]! r! h& \: a
  44.       }7 z. D( [  Z9 C' e& d
  45.       return $this->mo;) m) e$ c: X: N* y
  46.     }
    % v1 D' D% E7 R, E- d4 L( Y
  47.   }
    $ ]0 A7 s2 F4 M0 ?0 ?- d8 l
  48.   /**
    . H+ Z) S3 P1 a8 o8 ~* m
  49.    * 查询表中所有数据
      ~1 }8 @! E7 I; A/ _1 s% c+ m: w( g
  50.    * @param $table) a8 ^1 f2 j$ G; D& z
  51.    * @param array $where
    8 H/ j6 b4 P( p- q" C  t
  52.    * @param array $sort5 O: u0 E( V7 y
  53.    * @param string $limit$ \% d( L( o, k/ P% s6 ?
  54.    * @param string $skip0 D& z3 ^7 `3 m
  55.    * @return array|int' q* H$ C) Y8 B9 Z6 E
  56.    */0 J1 a+ ]3 _  W# n
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    5 Q) B) g6 p1 k# w
  58.     if (!empty($where)) {
    9 N: D9 V% T0 C( x, ~
  59.       $data = $this->database->$table->find($where);
    4 h0 A! o8 Z* v2 D
  60.     } else {/ I0 b* S, k$ N% a2 D  u
  61.       $data = $this->database->$table->find();
    4 ^  V" _7 p( m9 }  d* k/ u6 `  p  f
  62.     }2 V3 N. f* g7 A/ g+ K4 v+ ~
  63.     if (!empty($sort)) {" g1 q" [! y. b6 X5 G/ ~; _0 d
  64.       $data = $data->sort($sort);- n1 p# N" S. \9 ]
  65.     }
    3 h( U; H4 D% M
  66.     if (!empty($limit)) {
    9 _' y7 b( g( Q* ?
  67.       $data = $data->limit($limit);9 G9 i  d( R- V/ n  d# S, ?; v6 v
  68.     }
    $ l; d2 E3 h/ u
  69.     if (!empty($skip)) {
    ; J8 `* W: L# y' e: v" g  X5 X
  70.       $data = $data->skip($skip);
    1 K5 h" b9 J. J% m
  71.     }4 u- r. B$ z& N
  72.     $newData = array();
    7 ^, [/ C( A* H0 q5 ?
  73.     while ($data->hasNext()) {) _- K, z. t6 B. L) x( i- F( j
  74.       $newData[] = $data->getNext();# ^5 \2 I; {) v3 P0 u0 T. f
  75.     }' Q8 P; h0 y  [
  76.     if (count($newData) == 0) {3 v( r* G' x7 Z% c  }1 p5 X3 j
  77.       return 0;
    + h4 \: f; d3 Q. S# X5 U, |% W, @
  78.     }
    ! v, }7 ]. j8 m+ N7 o
  79.     return $newData;
    ( A  a! B* d7 E7 K  x4 m, M5 c8 N6 @" X+ @
  80.   }
    6 N* O+ s* p8 |- X' J
  81.   /**
    9 V- \4 s3 b# i- S; `8 J. A
  82.    * 查询指定一条数据
    " d8 O0 W. a% p2 J2 S; m9 O
  83.    * @param $table
    * l7 ]+ _8 _9 p# Q4 Q. ]
  84.    * @param array $where
    3 j8 w% L1 N! e$ E, v
  85.    * @return int
      P, }# x  Y/ W9 h# U' a
  86.    */
    8 o$ [: o9 c& {2 o
  87.   public function getOne($table, $where = array()) {
    ; E2 Q0 b8 y2 i" V
  88.     if (!empty($where)) {
    ' s( n* j! ?1 o* W
  89.       $data = $this->database->$table->findOne($where);
    4 ?- ^5 [) F8 G& q6 d5 y' F) m& ~
  90.     } else {
    , }2 o. h8 A/ g7 y# i( k8 X
  91.       $data = $this->database->$table->findOne();
    . r1 Z9 Z* t6 P- e) j' q* p
  92.     }$ s/ S/ K# n% K8 S0 n
  93.     return $data;
    $ P, m$ K- c5 e# }9 c
  94.   }) `. b8 I! C; T9 r/ p# t" G) P
  95.   /**7 w( x' D) C2 n/ I, b5 w! x
  96.    * 统计个数
    # K# H" A, z9 |! p; {# @
  97.    * @param $table
    7 e& ?, ^( W: b1 [# ]4 P
  98.    * @param array $where
    ) b/ g+ h% k4 [0 L' u
  99.    * @return mixed2 S8 Q. s4 T- `# z/ s/ }8 E
  100.    */
    1 _( ^! A1 S% s+ \; `$ e
  101.   public function getCount($table, $where = array()) {
    5 Y) r6 ^  H' j, A
  102.     if (!empty($where)) {
    - p- ]) ^4 @- f* ~1 _8 Y0 c
  103.       $data = $this->database->$table->find($where)->count();
    7 X5 S6 M* e) Y" j8 p' d1 K% Q
  104.     } else {; w3 }0 [. X( R' ]( j: A2 Y1 x
  105.       $data = $this->database->$table->find()->count();  i3 R1 E# r2 M2 I. d: E% ~
  106.     }
    2 t8 A  G# L- @! q
  107.     return $data;
    , e4 K$ ?" X) w% f' h+ A) W  `" A
  108.   }( u( w' r% Q* a) m( |' b
  109.   /**6 Z( O6 S( ]9 P0 p
  110.    * 直接执行mongo命令3 _3 {# W' E7 {; V5 q7 `9 n+ f
  111.    * @param $sql
    ; [" y& B) P% M! c5 Q
  112.    * @return array
    3 P7 q  u* P- Q
  113.    */
    2 I+ M! M2 {* A
  114.   public function toExcute($sql) {
    " ^3 k4 L' n* E$ l/ Q
  115.     $result = $this->database->execute($sql);! u: f- m% R- \1 \" i
  116.     return $result;9 R, C* [. O# I! e
  117.   }+ t, A  v: Y; p& e2 L* k) V1 A4 I
  118.   /**- Z5 F! W" d: d" r# c+ W
  119.    * 分组统计个数+ g+ A7 x4 |/ ^* T+ ^- ?1 ~1 j
  120.    * @param $table- ^& H" m4 [. T5 C0 v7 m3 i; e8 i: t
  121.    * @param $where
    # o! Q, A# n' h+ L
  122.    * @param $field$ G3 b/ o/ H/ d7 J5 Y% E" h$ ~
  123.    */
    7 A/ x1 K& v4 v4 \: r' R
  124.   public function groupCount($table, $where, $field) {  f+ `( [. z* c: B7 d
  125.     $cond = array(
    # d& T4 ^! P) h
  126.       array(
    : U8 k0 V# p) x: ]- L, G6 c* h6 O# r
  127.         '$match' => $where,
    % o$ _. R# b; V
  128.       ),9 b# O3 N) I4 \3 A6 m
  129.       array(& M8 C7 t5 i6 R9 B$ q4 R
  130.         '$group' => array(
    5 s# q: x3 a' ^) J
  131.           '_id' => '
    - d& i% H9 }5 i' H
  132. ! Q+ I3 e0 `5 v- p. X/ H+ r& x
  133. . $field,
    $ K  s2 e) r1 B7 W
  134.           'count' => array('$sum' => 1),! e- S5 w8 b% H
  135.         ),0 Q9 n8 p, c7 x* j
  136.       ),
      e; i) ~2 Z" R; b2 Z, G
  137.       array(1 ]( r) v" q) Z7 ~
  138.         '$sort' => array("count" => -1),
    6 L# R) {) \/ b* u) p1 Y
  139.       ),0 [  G; N5 {4 u$ i; N
  140.     );
    1 d) B3 y, r% H5 |" K0 s3 ?1 t8 L
  141.     $this->database->$table->aggregate($cond);
    ! x' a' Y- n; V2 y# t$ H6 i9 L
  142.   }
    . V, o6 ]& E) D' H6 z2 i
  143.   /**2 y3 P/ S1 ~0 P( X2 P3 h$ U
  144.    * 删除数据
    , n& q1 x, [7 `$ E4 f; H( k
  145.    * @param $table! I5 ^( m5 p' K. h' m
  146.    * @param $where
    # l. [; s5 @  |+ q6 y: h/ J- ]
  147.    * @return array|bool
    ; h2 H; [( x! r" ]2 j
  148.    */
    ; P1 t1 }! t3 m+ `8 f
  149.   public function toDelete($table, $where) {. v4 b4 y8 t' l+ T% B( ~; i
  150.     $re = $this->database->$table->remove($where);
    : F9 j0 m# ?0 i2 `7 W( [, ~9 y' w
  151.     return $re;
    5 v  z7 S6 m* y9 K' W: ^
  152.   }
    + q! [3 @5 J: }# X, V% T
  153.   /**
    ! M" c) Y( F* w; q
  154.    * 插入数据
    / v4 L) V5 _* U9 y
  155.    * @param $table
    6 E, w+ R) a' n& q
  156.    * @param $data7 d0 r4 t$ }5 O% C
  157.    * @return array|bool
    1 Q0 u1 b* R2 t# E
  158.    */+ |  \2 P, `- g! c- D$ Y9 }
  159.   public function toInsert($table, $data) {& y1 m  n5 i" j, l0 T
  160.     $re = $this->database->$table->insert($data);
    3 m: j( m; N" b+ `8 w# E: X
  161.     return $re;! ~6 Q/ c1 W" t5 E1 |9 j4 ~/ g
  162.   }
    ) e" J6 C* i4 A
  163.   /**; n1 j2 s& @( @: E2 i. M) F5 x
  164.    * 更新数据
    0 R% x7 X, O) M: I
  165.    * @param $table
    3 _! T7 \9 A, k; @  `  {3 m' K  ^
  166.    * @param $where
    : Q* [1 a0 V3 s, y& [6 q7 ^$ [
  167.    * @param $data* ]/ @# i, }6 F. I
  168.    * @return bool# T( C1 }5 A+ G: B$ q. w# @
  169.    */! j' d6 ]9 K. X$ f; ]  o
  170.   public function toUpdate($table, $where, $data) {
    3 o0 X1 }3 I# ~
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    - I& X; y: P( r% |# b
  172.     return $re;. F4 [. }/ K$ m. x( n
  173.   }( h3 L- k# s/ Y: \& f
  174.   /**
    8 o4 ^0 d/ t6 f( g  z6 i2 C* ]" t
  175.    * 获取唯一数据5 w' r; {! g0 I" ^) Q; _" R* ~
  176.    * @param $table3 O$ c! N1 |5 v% d, Z5 P
  177.    * @param $key; u) K; U  U) M" Y- q
  178.    * @return array; \: O6 _6 m8 _3 v' R
  179.    */
    / W3 u8 N! ]# O! ^8 k+ b
  180.   public function distinctData($table, $key, $query = array()) {
    + ?+ _, U) L- n( ^2 D1 H
  181.     if (!empty($query)) {
    % n9 v3 v/ e2 W
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);. ~0 S& \+ P7 l' L8 I, y/ u
  183.     } else {# _$ V$ x! B! G) c' ]
  184.       $where = array('distinct' => $table, 'key' => $key);( @+ a) z7 q; A# b
  185.     }7 C5 |9 C8 b  \: q
  186.     $data = $this->database->command($where);
    : M; @7 j" _- G) b
  187.     return $data['values'];; I5 {7 n: |6 u, c8 k; H
  188.   }
    / H- g6 }% w, n
  189. }
    , z! e: G( e- D" H
  190. ?>
复制代码

9 L8 k9 C- ^4 ]7 S6 O9 G  O$ Y- I+ Z# H$ q3 s; l, Y$ t& a1 ?' x+ h( f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 17:31 , Processed in 0.119738 second(s), 19 queries .

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