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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10338|回复: 0

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

[复制链接]
发表于 2019-3-9 02:49:05 | 显示全部楼层 |阅读模式

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
& g  T* ~; v$ [" U6 `模式自由。' p2 I9 \0 k) n
支持动态查询。9 P4 I; q- V9 S: ?2 D' S
支持完全索引,包含内部对象。, w% {: t4 T4 @( ?
支持查询。
9 U+ w% }' r+ k. p支持复制和故障恢复。1 M# X: y. q6 k% ?
使用高效的二进制数据存储,包括大型对象(如视频等)。1 X- U/ K2 V0 @+ Z! N
自动处理碎片,以支持云计算层次的扩展性  U, D1 H+ O6 r
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
5 k; t0 C$ c  g( T6 i文件存储格式为BSON(一种JSON的扩展)
, \1 y5 V" v! p# v* 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
    1 x" W9 K  }' N# d2 F) ?
  2. /**1 P0 z: d$ s  E# w
  3. * PHP操作mongodb数据库操作类
    ( {* Q$ ]6 {6 M, t( ^) V2 A% h9 l! b
  4. */
    $ V$ o. |2 J/ E- Y: R  @# p
  5. class Database {0 w+ N( U% M4 c  M0 l8 `5 Z' S* C
  6.   protected $database  = '';4 O7 l$ ?: f6 f
  7.   protected $mo;) x  I2 V9 F0 I7 @2 K) \' \4 U
  8.   /**
    3 \" z" L! w* A
  9.    * 构造方法
    ) f1 I4 K+ q; [( M! q
  10.    */
    , t0 K# q9 Y/ [! F  f6 X
  11.   public function __construct() {: K, F. o! u  B& r2 M
  12.     $server = DBSERVER;& h% o1 m9 k/ g6 ]2 f
  13.     $user = DBUSER;
    # v( u' G& ^/ Z
  14.     $password = DBPASS;- w- o4 b7 l8 g" t1 m( R$ Q) ]
  15.     $port = DBPORT;
    - m3 N$ [/ y+ B, E
  16.     $database = DBNAME;; P6 n, B- V  i& n! C; J8 ^$ f
  17.     $mongo = $this->getInstance($server, $user, $password, $port);9 d1 o( s1 K! k" P6 I
  18.     $this->database = $mongo->$database;$ x* ^- D/ Y% {
  19.   }
    4 b* ^9 j& A" O1 r
  20.   /**  @3 m& V2 Q; Q0 ]" g2 M: C
  21.    * 数据库单例方法
      p1 C  P5 W+ {6 [8 P% e
  22.    * @param $server% p( \6 x0 C8 i* s0 n8 o1 ?9 G, p
  23.    * @param $user- u6 r- |# d3 Y
  24.    * @param $password$ c$ a+ C6 M; C8 Z0 c! e$ G7 i& R
  25.    * @param $port
    - \. S$ G, X3 O! v
  26.    * @return Mongo
    $ c) W7 F. f0 m9 c
  27.    */& r; R1 |/ \/ V- E1 S' ?
  28.   public function getInstance($server, $user, $password, $port) {8 E( \3 x9 Z/ Y, v) t# U$ \
  29.     if (isset($this->mo)) {
    3 o9 x/ M! f7 P" m% F
  30.       return $this->mo;
    - i: O( E/ M7 D: U$ j
  31.     } else {* e2 g/ G9 b% y& y7 }- d4 a1 d5 z$ s
  32.       if (!empty($server)) {
    ! w( i# y6 ^3 ^4 Z
  33.         if (!empty($port)) {4 v/ m% i/ o% n6 y5 k# w
  34.           if (!empty($user) && !empty($password)) {
    4 E  x4 X; I; r! {
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");+ u+ O/ L2 L" L" w0 ~7 n* s
  36.           } else {
      u4 j+ B4 L3 m6 q3 _( \& W) S
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ; F$ B& k  s- x, M3 T: Y3 Q
  38.           }  Q+ ?6 ^3 _% @; j" X
  39.         } else {
    : k3 o3 n  j, |" g8 w9 q
  40.           $this->mo = new Mongo("mongodb://{$server}");
    " X0 w- o1 Z. Q  l5 v! ^
  41.         }% x3 |/ E9 \( l$ a( H
  42.       } else {
    ! P; J5 ?7 w% x' g5 a. y
  43.         $this->mo = new Mongo();
    " Y3 k3 v  _) U3 r6 ^0 P
  44.       }4 P/ s* z: Y4 `6 k$ x
  45.       return $this->mo;
    ) `9 }3 ~4 n/ L; c
  46.     }8 e# R1 G& n* @5 ?" I
  47.   }
    4 e& f1 D- z3 u2 P- ?/ p
  48.   /**: _* t2 S/ ], f2 k
  49.    * 查询表中所有数据
    / K  A% O( Z! i- J
  50.    * @param $table# [& C2 c) i2 w) ]$ h
  51.    * @param array $where
    4 |. o) L9 G- L2 d
  52.    * @param array $sort
    ( h* G) I/ o$ M$ R5 ?& H/ B+ ^
  53.    * @param string $limit/ z4 `. Y) e5 u2 A- S8 [  i' s; @& P
  54.    * @param string $skip
    4 V# v2 L1 h7 `( ^" e
  55.    * @return array|int& h( S) q1 a' W
  56.    */8 t7 ?! Q$ _* w' f2 \
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ) G4 t4 k8 J1 }% K5 `, K3 }7 D2 g
  58.     if (!empty($where)) {8 o; J  f# z. `, j0 o
  59.       $data = $this->database->$table->find($where);
    ' D* V/ D, r8 X4 u  N
  60.     } else {2 t  @: W: Z* k. U( W) \! Q$ u& b
  61.       $data = $this->database->$table->find();
    2 U, H; _2 v6 N- w: \6 X% A+ n* ~
  62.     }7 w3 B9 n8 i2 I; `
  63.     if (!empty($sort)) {* b) Z/ P' _0 _! f' _
  64.       $data = $data->sort($sort);2 a6 a: O& L0 T* ^, V/ m
  65.     }! p5 }( K! l$ F: y
  66.     if (!empty($limit)) {/ v$ j  Q9 f( L) ^' _! E, q9 A! `
  67.       $data = $data->limit($limit);. H* W4 [1 Z8 R* f0 l& N- E$ p
  68.     }
    % }* A" q/ B7 A% W  Z* _
  69.     if (!empty($skip)) {
    * t( S, Z9 F! `7 P. g* x+ o' Z& n8 r
  70.       $data = $data->skip($skip);
    , y. }' I# y& l- [6 @" y/ g+ P
  71.     }
    4 t! S# ~5 x( C5 X3 w. b# g
  72.     $newData = array();
    7 x0 h4 j9 T" |9 g9 [% S
  73.     while ($data->hasNext()) {/ j# Z, _4 b5 V) u
  74.       $newData[] = $data->getNext();
    & t  L: l2 C! d+ p
  75.     }8 \+ g6 H0 f! {9 H
  76.     if (count($newData) == 0) {
    8 ?8 i6 C+ ?& z& n
  77.       return 0;( Q& k# U4 ^0 Z9 |; R+ {
  78.     }
    ) a4 ~- x' Q$ d: Y9 ]; ~
  79.     return $newData;
    9 ]0 f6 \" ~2 a& x% s
  80.   }+ l! W( r3 ^( p$ p
  81.   /**
    3 d- D/ S+ R( m3 C
  82.    * 查询指定一条数据
      Z) ]* @$ l" w9 v; [- |
  83.    * @param $table4 m) I+ ?, f6 V
  84.    * @param array $where; C. E/ i" l( H! x: G/ e, p
  85.    * @return int3 U) n- t& {- V4 f% r) H
  86.    */
    + \- p4 x$ o# B9 z2 `# \- n
  87.   public function getOne($table, $where = array()) {* U+ X+ \  b" t* }" E
  88.     if (!empty($where)) {
    1 f$ W  M" F5 j3 w, I
  89.       $data = $this->database->$table->findOne($where);; I! m0 F; k9 F
  90.     } else {# v% P! N- K$ l1 Y4 o* I
  91.       $data = $this->database->$table->findOne();% u6 k  {/ h3 W" ~' U1 Q( K+ T( o# C
  92.     }
    1 H6 s' i1 m8 N% l/ ?( J/ F
  93.     return $data;
    & G6 p0 r6 M3 n) s, \
  94.   }) l1 R/ D. T" ?& u2 j; D
  95.   /**
    + U$ k5 x) i8 }; `) Y0 a/ d4 S
  96.    * 统计个数
    : G$ q$ P2 m9 ^" ~; p& U
  97.    * @param $table
    4 `% J5 U6 L% t2 h
  98.    * @param array $where
    ; X, k& v! \# i& y+ H/ w
  99.    * @return mixed! k* P7 l3 u7 y8 s5 }$ {: W  r& f
  100.    */
    7 @7 O* _& Y) V, R8 X- K* C4 r- c' t
  101.   public function getCount($table, $where = array()) {
    ! y# G" w% e' X" B8 v: z& S' y
  102.     if (!empty($where)) {
    * ^& G: ~; a! ^$ `6 z1 ~" d
  103.       $data = $this->database->$table->find($where)->count();
    ; t, T) _; c$ @" J3 p
  104.     } else {
    ( w: o; E8 w4 ~% I6 }( S
  105.       $data = $this->database->$table->find()->count();9 W) s9 k8 ?9 y4 X" S6 D7 R
  106.     }
    : w* I8 ?! H  T+ `7 q2 r
  107.     return $data;
    : Y* \, d+ \, b+ c
  108.   }' x1 x& @# e3 m, r$ D( O) o8 Z
  109.   /*** Z: o) b* V9 R. Q# a; [
  110.    * 直接执行mongo命令. J* b: v7 h; E
  111.    * @param $sql5 j' D5 {4 E9 K: A
  112.    * @return array# \  |% O( s: r0 w  x0 M: \
  113.    */
    # e6 g3 q: X: z' }9 Q1 D
  114.   public function toExcute($sql) {0 H! U! M- u+ n8 W* E
  115.     $result = $this->database->execute($sql);
    ' s% T5 N' c7 q( ^& O/ d! I
  116.     return $result;( ^9 o$ z* M0 C: @' ^
  117.   }- \/ d: q$ F: ~4 W. c( ?
  118.   /**
    9 ?9 c* G& @% g5 o
  119.    * 分组统计个数
    / T2 c7 L+ A1 {9 \0 s. d3 p) J
  120.    * @param $table
    9 m7 T- u2 j3 o
  121.    * @param $where
    * w; {' `3 Z" ~! k. S2 p0 }
  122.    * @param $field
    7 [2 p  z( v5 q/ |
  123.    */
    1 V1 K3 A9 k1 ^) J+ k
  124.   public function groupCount($table, $where, $field) {
    ! g. s4 n; Y3 \4 o$ M5 L- `
  125.     $cond = array(' B( t0 W+ M+ g
  126.       array(+ Z4 q+ M! _- w( a9 v8 {- l2 x
  127.         '$match' => $where,$ h0 l' ?8 g* Z- S' D0 w* s+ x
  128.       ),
    6 z# ?$ ~  [! }, x8 _7 x" L8 v
  129.       array(2 z3 P+ l  y' P) S
  130.         '$group' => array($ i% w, m( `6 C
  131.           '_id' => '
    ; G  @3 {7 K  h  v# o

  132. 8 t. u+ ~5 M) l+ Y7 `" S4 u& W
  133. . $field,
    , z" T/ }7 e, z. C4 H
  134.           'count' => array('$sum' => 1),
      s6 j  @% O' y  D8 ?' T
  135.         ),
    6 X! E4 t& |& U; ?" s. x
  136.       ),
    % l' n9 R/ e. a& g1 x7 k
  137.       array(
    , M; i' {1 U# }+ l* M
  138.         '$sort' => array("count" => -1),. C/ S* K: T& K, B' V0 f
  139.       ),# \/ B. s4 c! v1 _  K
  140.     );
    * ^0 N) A  G7 J- I
  141.     $this->database->$table->aggregate($cond);
    , ?1 C! ]4 a, Y2 r4 I) X5 Y
  142.   }- i" p$ b7 N6 D: J; [9 \
  143.   /**
    , U( [* D4 j: C) M
  144.    * 删除数据1 R# |4 S* ^& J; l: ^$ f, S6 s
  145.    * @param $table
    $ K1 n0 G7 p- a8 L3 y
  146.    * @param $where
    5 a# P6 A" f# b* U( J9 F
  147.    * @return array|bool
    8 T0 c" `& k/ d
  148.    */
    : N1 j' N) ~( \  ?; [
  149.   public function toDelete($table, $where) {
    : [) w; M# C( R
  150.     $re = $this->database->$table->remove($where);1 ?- X/ d/ C& m& t  D' ]7 @
  151.     return $re;1 ]1 i: v. F7 l) Q( k+ h
  152.   }
    / Y  H7 r: B8 T# n' T3 Y% D- i
  153.   /**0 z( R! t) A& @
  154.    * 插入数据
    5 \$ w( s) n) R: m' u& L6 ]/ m
  155.    * @param $table
    - _" R8 R5 g. v  j) V- B
  156.    * @param $data
    5 B: Q3 d0 U6 y+ L
  157.    * @return array|bool: R. M2 H) u  P- l. p
  158.    */6 m8 D2 w6 f+ [& }% i, f% g+ v
  159.   public function toInsert($table, $data) {$ X" o' M" S' t7 T
  160.     $re = $this->database->$table->insert($data);# _! R* T& X) ?4 O2 n, _8 U
  161.     return $re;- p1 U+ Q3 {, M9 X* T- T/ m* w
  162.   }2 I2 h( u9 a+ x+ N
  163.   /**' t+ l7 ^( [4 w" F; Q' g
  164.    * 更新数据0 w1 x3 l0 r$ l* U( r
  165.    * @param $table; R1 U( Q1 Q" l; ?/ n$ X
  166.    * @param $where* S* \1 Y9 h$ u- y
  167.    * @param $data  Z) i! M% h9 B; e
  168.    * @return bool# _& r) a# @  M& ~
  169.    */
    " \0 ?5 l! m4 H2 b7 }
  170.   public function toUpdate($table, $where, $data) {% p1 J4 R5 W5 h/ u5 _) |5 o/ V6 c
  171.     $re = $this->database->$table->update($where, array('$set' => $data));! P( l8 t1 g3 o8 x: k/ F2 s
  172.     return $re;2 Q6 q& Y2 `" E  q5 u# X- _: _  s5 p
  173.   }
    + h. j) V- X9 `, t& K+ H
  174.   /**
    ' u& L/ Q8 C+ p4 W& O
  175.    * 获取唯一数据
    ; g& R% U1 S3 T. x+ ]+ b) `
  176.    * @param $table
    7 t2 H: r$ m9 X3 U/ @( F, r7 Y7 [% q
  177.    * @param $key- v( |/ M% n$ Y" v
  178.    * @return array
    7 m6 x# I4 v% Z' W0 F
  179.    */% t' \  [- F" \
  180.   public function distinctData($table, $key, $query = array()) {
    ; z& w* B9 }$ c1 S/ |) v
  181.     if (!empty($query)) {
    0 a* w" c& ?. q1 i
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    . ]7 l1 Q; k) M. J; V
  183.     } else {
    6 p+ X1 s' F" N5 c
  184.       $where = array('distinct' => $table, 'key' => $key);0 ?2 f/ b6 P9 P5 I- M
  185.     }
    - w" V, N- k6 L' \
  186.     $data = $this->database->command($where);5 U. `6 w3 y; R
  187.     return $data['values'];
    ! I8 F% z2 b4 i+ K/ H0 \6 _* d+ r
  188.   }
    0 Q& a) c3 Q/ a  q' r# t- h3 r
  189. }
    4 @2 T" t4 O1 |. Z
  190. ?>
复制代码

" c6 k* W& b( t  C" x
2 o4 |; L" G- g
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-3-29 06:54 , Processed in 0.122366 second(s), 20 queries .

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