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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
* x1 b4 F% Y; l" i1 {模式自由。' l! G2 @/ F! q: ^' U
支持动态查询。
* r, u# F- e# s3 A3 _; @$ u! n  I支持完全索引,包含内部对象。
; d9 t5 {. s8 p% {3 R( s2 Y0 [支持查询。9 w$ z% Z5 q7 h, I
支持复制和故障恢复。: v: ^/ J  Z  c4 J# K2 ?
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 {' p0 f, p( P1 o# {. ^1 D0 j自动处理碎片,以支持云计算层次的扩展性4 X" F/ A; |, Z( u4 F  s' h8 I+ @! D
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。+ Y- w$ Y  \, e# h# a; ^
文件存储格式为BSON(一种JSON的扩展), S, L# D* E9 A. M
可通过网络访问

所谓“面向集合”(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
    8 e! L" q; B1 ^8 z/ X2 s: Y
  2. /**
    & l1 U3 x& ?6 z+ v' N' P9 @
  3. * PHP操作mongodb数据库操作类4 j4 [6 B% H5 Y
  4. */
    : L6 \7 |) m. H. p
  5. class Database {
    6 F' f( W1 i9 q! c+ v$ q
  6.   protected $database  = '';7 u) i& d6 W+ k, e
  7.   protected $mo;
    3 S( A/ `- T+ a! @3 ^) }: K) Z
  8.   /**5 E. T! v$ C! ]% \+ d
  9.    * 构造方法5 @- s1 @& o6 S5 P6 e) c
  10.    */) S2 L  W: o" Z
  11.   public function __construct() {2 J( v$ r( V) Q! M2 p6 Y( `6 X" v
  12.     $server = DBSERVER;. h  R3 D0 J7 y" V# b! y' ]& g! ^
  13.     $user = DBUSER;. g9 G' f/ g1 O8 D7 `: ]2 B0 |
  14.     $password = DBPASS;/ w4 Y7 A4 M; P1 ^
  15.     $port = DBPORT;9 L3 A2 _% V5 w5 n, h* I
  16.     $database = DBNAME;, T  [6 T' `0 ^! |- \
  17.     $mongo = $this->getInstance($server, $user, $password, $port);0 T1 X! y: p3 i) l& \, i1 B
  18.     $this->database = $mongo->$database;
    6 e# L2 i% a) T, f7 `8 h
  19.   }3 T: w% F. I* O& @% @8 q
  20.   /**% z  S- D8 m6 s1 w" y6 w& y5 f
  21.    * 数据库单例方法1 N/ O# D' ^8 F# ]* V' p2 G- x
  22.    * @param $server2 A; l' q( ]9 H! _
  23.    * @param $user
    & R: F& a( V7 q+ Q0 F
  24.    * @param $password9 X1 M- a; v; k
  25.    * @param $port
    " J9 y  q. g! v5 q* f
  26.    * @return Mongo4 s9 u/ |" n, s/ S3 P
  27.    */
    # H0 ^: T, i4 S7 p
  28.   public function getInstance($server, $user, $password, $port) {6 ?( ?9 I6 C/ e5 |7 A* E
  29.     if (isset($this->mo)) {
    5 e; [( v$ F9 q0 S: m
  30.       return $this->mo;
    6 A. E) t4 l2 [8 y9 H
  31.     } else {
    # q" L, x& k5 o" X, J* {  g* P
  32.       if (!empty($server)) {+ h" g% ^( `% B% ]2 u  X& p
  33.         if (!empty($port)) {
    ' n+ i$ k: X) g! O* s3 x
  34.           if (!empty($user) && !empty($password)) {
    % s# L: V% G; h, z
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");% `6 R$ B" F/ r2 @
  36.           } else {  G4 u" j1 ]( s8 [' G
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    4 Q* m/ p7 q+ _+ a+ N/ w* \7 m7 K
  38.           }
    % q" E: P4 D/ a& L
  39.         } else {+ C6 J; N, d0 Y& A4 K
  40.           $this->mo = new Mongo("mongodb://{$server}");
    % m) _. R- i- y3 C1 ?
  41.         }
    & l3 R& H. J2 B
  42.       } else {$ ~5 L: b) ^4 L  }6 `
  43.         $this->mo = new Mongo();( ~3 A* H* {1 V" k6 W9 @( e8 Z0 y1 q
  44.       }
    & n& b' }; p  S4 ?0 z! ?
  45.       return $this->mo;
    $ X. k% K/ Y& x8 a
  46.     }! R+ x. e6 {/ ?* ^3 j" x; u1 H, D
  47.   }$ `. g0 }' y; P- }! E. H
  48.   /**, q9 a7 |. h! A1 Q/ m6 q  c
  49.    * 查询表中所有数据' t# l6 f- D4 n8 Q  p( m) U
  50.    * @param $table: l4 F3 B1 f3 h
  51.    * @param array $where9 ]5 j( J6 M) t0 c* s/ f
  52.    * @param array $sort
    & P) c2 X- m2 r  v$ o
  53.    * @param string $limit/ T  n4 J. c$ k3 N
  54.    * @param string $skip# b: s# T. l: @& c! ^1 D
  55.    * @return array|int, u9 w" C$ |7 u
  56.    */
    6 _. U3 o' F) _+ ~# ?
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    3 X! n' @1 H' g, q  q. `
  58.     if (!empty($where)) {
    2 }# \/ A9 T. j+ u" _' U5 _8 ?
  59.       $data = $this->database->$table->find($where);8 x( L) v8 z2 y/ u
  60.     } else {4 k3 ~, Y" Q4 r+ B% T  r
  61.       $data = $this->database->$table->find();
    # v! m& T% W* \$ A+ ?1 A$ c7 S% I* x
  62.     }
    9 B( x; U9 b6 q( O8 R; Q
  63.     if (!empty($sort)) {+ D& ^2 q0 k# O9 X5 X
  64.       $data = $data->sort($sort);- d9 ^/ H, c0 u( t1 O4 t4 ^
  65.     }
    1 f+ q; J: S6 x2 j) k
  66.     if (!empty($limit)) {
    3 h# j9 J9 M: Z' H) g8 n
  67.       $data = $data->limit($limit);
    4 T2 }) E: s* ~$ W) t
  68.     }
    / L* G' z5 o. J4 R
  69.     if (!empty($skip)) {5 k' Y! I. J# \+ K8 T" @: ]
  70.       $data = $data->skip($skip);
    0 e# X, i1 ?- J* _, i
  71.     }
    / ^' y! a0 \4 G- K
  72.     $newData = array();% K3 K! D* C7 f6 J" m0 X1 x
  73.     while ($data->hasNext()) {% W& G( ^8 `7 f. Q
  74.       $newData[] = $data->getNext();- s0 J2 F9 _% H
  75.     }
    8 P( e# s" B: j% c1 s
  76.     if (count($newData) == 0) {$ `# ?( B3 d1 e6 q8 k9 Q
  77.       return 0;5 R4 N* r7 J+ I2 f6 G
  78.     }
    1 ~9 q( B" @6 X% r" [: {
  79.     return $newData;
    * Q7 Q; {2 ^# \- }4 ^4 t
  80.   }
    & p  K# G. }) R9 ~& L
  81.   /**
    5 E& B' u3 c3 d/ a, G+ @9 u4 J
  82.    * 查询指定一条数据
    ) {( k8 F# H0 l! t
  83.    * @param $table
    1 P- l  |8 ?1 r3 ?# |% l8 K# s' Q% q# {
  84.    * @param array $where+ v; j+ z2 F1 W* f" d
  85.    * @return int9 Z( U  l# q& Q! Y4 n5 P
  86.    */
    0 ^: D1 R+ `* x1 n5 `5 X
  87.   public function getOne($table, $where = array()) {# h. r$ o0 q6 B- ]/ u: `
  88.     if (!empty($where)) {" o6 @, ^$ U4 `0 a& w& ?# O
  89.       $data = $this->database->$table->findOne($where);. G/ o0 S+ z" s: R5 Z
  90.     } else {2 {* ]* o' ~, ^( M
  91.       $data = $this->database->$table->findOne();
    + n( N# \6 z) D$ E# H, s& V
  92.     }
    0 H8 m8 ~# }- O9 b0 G
  93.     return $data;
    3 t" _; ?; K& |6 i
  94.   }" q3 x3 g: g" O+ m8 g3 n  ^
  95.   /**5 a+ x6 D- u; n! M) b* y
  96.    * 统计个数
    $ q6 F% ^5 n" P* t, R5 H: v
  97.    * @param $table
      ]3 R, u2 u. d* }) J- d
  98.    * @param array $where
    $ m, n: N! N( ^$ U# d7 r0 M% `
  99.    * @return mixed4 P) o# i% O  R8 m2 o! E
  100.    */! i1 N) ~' z$ F9 e
  101.   public function getCount($table, $where = array()) {
    & }6 g0 C8 \* @: q9 h. i! W; Y! G
  102.     if (!empty($where)) {/ _! {0 Z7 Y9 y6 D  R! p) A0 ]7 P, O
  103.       $data = $this->database->$table->find($where)->count();
    : f0 ~$ d. V# L& l
  104.     } else {' \% Y" z8 b5 P6 e4 A
  105.       $data = $this->database->$table->find()->count();; @2 R) X; C+ D2 P, n
  106.     }
    1 Y# B9 w; g0 ]$ f4 D
  107.     return $data;
    5 Q5 r& V% q) H% `* n
  108.   }
    / `! ^* s' y; {' m& ]$ w, y! O0 M
  109.   /**" E+ w2 z5 D- t# Q" ]
  110.    * 直接执行mongo命令
    # s) v' ]; @0 L  [' q; {* J
  111.    * @param $sql
    * n2 D7 V* {& d
  112.    * @return array1 ?7 i% E$ k& j$ x
  113.    */
    * A8 f1 C3 \, o: Q$ M" b( E
  114.   public function toExcute($sql) {- s! Z+ w: Z7 {% I
  115.     $result = $this->database->execute($sql);( t9 u4 K/ d! x
  116.     return $result;
    9 s, ~) C  w7 v* e
  117.   }
    ! T  [* e  \: x6 f. p
  118.   /**
    2 S$ L& M2 ^3 [- v, `- D+ R
  119.    * 分组统计个数
    2 M6 @7 R& ?: o+ ?  a/ C2 n
  120.    * @param $table
    : a: T) ^, _+ t: U# \9 f
  121.    * @param $where
    3 E% L1 E' \% Z. g, \# u* J+ E
  122.    * @param $field
    $ `8 {: U* ?6 N9 X# {! {
  123.    */! T3 J1 N/ O% @* ^1 C7 j
  124.   public function groupCount($table, $where, $field) {
    ( E/ z$ O8 ?" b! \1 y) X9 u
  125.     $cond = array(
    % i% v( j% r5 Q- T
  126.       array(2 Q/ N. K3 C. w9 R, t; g6 ]3 a) M
  127.         '$match' => $where,# b+ z' f: U; T* V6 W& z# J3 ^/ s
  128.       ),
    . q- k! p: x, M0 @9 y4 x! O5 b
  129.       array(
    . Q3 w- }' |6 K6 s8 b
  130.         '$group' => array(
    ) z, h0 C  |2 t5 n
  131.           '_id' => '6 |$ D" ]/ r' B

  132. ; C/ z. p* m& {2 m3 ^, v4 ]
  133. . $field,% @- {0 o; H5 m' |
  134.           'count' => array('$sum' => 1),
    % e% e2 |2 H  V2 i5 A" h
  135.         ),4 G- N( M2 j& j" O) }- X5 @4 ^8 H9 G
  136.       ),/ A/ j8 I( W1 `( L
  137.       array(+ y4 U5 @* S9 L6 A. y- ]: d0 {
  138.         '$sort' => array("count" => -1),$ s7 z! {. r$ x
  139.       ),) x% g4 i/ B! [; ~
  140.     );+ S. y; v2 c" Y* V- L4 T# |
  141.     $this->database->$table->aggregate($cond);- l. ?5 Y' H' r  D) {* a
  142.   }
      I: Z- s: V/ T6 k* _
  143.   /**
    / I% ~* y/ ~9 ]  \: I- }
  144.    * 删除数据
    ; ?* T/ y1 m5 ~; Q; o% `# W
  145.    * @param $table$ p5 R) l  y/ ?5 w4 Y' z
  146.    * @param $where+ x0 u# l9 Y( Y5 g3 ^" h9 h
  147.    * @return array|bool
    % d1 F+ b8 X" L9 m5 x& F
  148.    */4 V! f) M% D" M: f  ^, v
  149.   public function toDelete($table, $where) {! u' @1 z: f* H2 C5 f
  150.     $re = $this->database->$table->remove($where);8 w% k- o: Q! b! D, f4 y* k2 G  e3 w$ h
  151.     return $re;5 y0 z" ]' m' f4 ]# V+ }$ Q
  152.   }
    ; v2 B/ L/ L; }5 h; [' V% X
  153.   /**
    " W( f8 L- W9 {( z+ x0 D) J9 S
  154.    * 插入数据+ }6 S) d% D/ ~
  155.    * @param $table# F4 O- n# f% @2 M3 V
  156.    * @param $data
    ; d$ t: c9 |4 w5 H9 D
  157.    * @return array|bool
    , v' l: o: }6 g& g" o0 s
  158.    */
    2 x* I- n  t1 J. l5 R* W# u) ]
  159.   public function toInsert($table, $data) {
    ! \4 Y3 S7 ?* h0 `3 W" F3 C
  160.     $re = $this->database->$table->insert($data);
    + }- c+ O$ Q2 ~8 c+ g0 `% r5 c
  161.     return $re;
    # R- T$ m! N$ l. F/ o" v
  162.   }6 G# r) Z- p; r9 r( N* k9 ^! D
  163.   /**
    " g; J  P. x5 y: F7 p4 T9 f
  164.    * 更新数据! ]" b7 @; W- M$ ~" b! B
  165.    * @param $table
    6 m% H# E& ]9 T* N
  166.    * @param $where3 F3 }; m2 a, Q5 J: e' d
  167.    * @param $data8 z9 z! C- h% T7 }
  168.    * @return bool2 S5 s# e  O: E6 x$ n
  169.    */
    / T4 ~1 j) f9 W# x4 y% O* Y) a
  170.   public function toUpdate($table, $where, $data) {
    5 w6 ?2 X9 e' x0 r$ l# [
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    : x" R: p7 V6 F7 [; {  P
  172.     return $re;/ d; U3 Z! q' q$ E6 r2 j
  173.   }
    " K' g; r$ c# b, f8 ~: [+ h# l
  174.   /**5 G+ U* ]5 a8 R
  175.    * 获取唯一数据2 S- x0 p3 i6 H; h. S5 ^0 D& z; M
  176.    * @param $table
    + ~. ~7 H; W4 @- n! J2 ?; s
  177.    * @param $key' R+ r" G, N) o. V
  178.    * @return array3 T8 h8 q2 c4 |" }4 ]# x
  179.    */6 i: r( y" P; N: r
  180.   public function distinctData($table, $key, $query = array()) {
    1 n3 c5 O. k( Y& n, j) [
  181.     if (!empty($query)) {' k# B( Q0 \' p4 s9 T( C% {
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);1 l6 @7 I6 V+ D! w' _
  183.     } else {0 o# H4 u$ y: ]( [7 Q1 p9 P
  184.       $where = array('distinct' => $table, 'key' => $key);
    6 G1 F, B4 q0 y- H1 C9 M" n
  185.     }4 r  D- m& Q* ~7 q/ [  x
  186.     $data = $this->database->command($where);
    + ~" j4 w' E8 E- Z0 y, u
  187.     return $data['values'];+ ?4 {; I% F# F8 H
  188.   }! z" G5 P; X% N- u( m* B8 T3 _
  189. }) V4 ?* G# \6 E4 a4 d
  190. ?>
复制代码
' x: i4 j. a- c

- z6 ]: p3 o0 U+ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:46 , Processed in 0.058918 second(s), 19 queries .

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