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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。. Q+ t3 Y7 k0 f9 Z
模式自由。
$ Q* z, m. i! J支持动态查询。
& r  d/ n3 p5 P& \支持完全索引,包含内部对象。8 R# B0 K3 E! Z: D( W
支持查询。; k. E( U, X' h3 s
支持复制和故障恢复。
6 ]& k- I6 j# T" ~2 F使用高效的二进制数据存储,包括大型对象(如视频等)。
; l8 ]3 [2 |% @  \7 A自动处理碎片,以支持云计算层次的扩展性
9 E/ V9 k3 ?3 r2 H* h支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
4 @/ H( M; ^; O: b文件存储格式为BSON(一种JSON的扩展)( x5 a5 j( G3 l6 R, P5 t) 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. <?php9 n- h) ]) l' Z: O) I  H
  2. /**
    5 H- w7 ^. q, O
  3. * PHP操作mongodb数据库操作类( F  x  Z1 K" u1 l" z
  4. */$ I- G# V8 d5 {2 V; w
  5. class Database {4 u7 p+ N  f0 i0 g+ A1 n# b' F
  6.   protected $database  = '';
    ( \! U6 W3 s: P+ m
  7.   protected $mo;7 i4 p, v6 a9 D$ e8 Z7 w! L
  8.   /**
    * u  ]) m, o. F5 {
  9.    * 构造方法0 f; d: F* ^9 m- u% E. S, Q
  10.    */
    9 c0 L4 Q9 X1 h6 G2 P6 n
  11.   public function __construct() {( c2 E2 f% _% W' u9 Y7 t5 m$ N. i
  12.     $server = DBSERVER;7 Y  n, O9 s- }6 `, c
  13.     $user = DBUSER;
    " c8 {! K1 V, S  @
  14.     $password = DBPASS;
    " A. d' U# P: }" U
  15.     $port = DBPORT;
    - c+ X3 H% ?2 v& t  @" m
  16.     $database = DBNAME;
    9 D" h  a: c" V( p) x
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    0 E% M8 y8 U8 `
  18.     $this->database = $mongo->$database;
    1 q7 D0 ~$ E1 q: }$ V/ P0 l
  19.   }" B  r# m8 k* c* g" u
  20.   /**
    7 J. ^/ O" b+ @( ~# F) H
  21.    * 数据库单例方法
    9 r, W, |- D3 i* c3 Y/ o2 Z7 M% P' U; G
  22.    * @param $server- M# S) f; h* b5 [* b9 ]. ~
  23.    * @param $user
    & i/ y! m# S: i! _5 {9 F
  24.    * @param $password5 i$ O5 Q7 b8 b7 g* I
  25.    * @param $port' Z8 \3 Q+ @" a9 W' ?, a6 \) c
  26.    * @return Mongo
    3 A* E; M3 R; H9 W7 b
  27.    */
    ( Z* v0 h' h6 W( T) k/ t9 g$ D7 a  W
  28.   public function getInstance($server, $user, $password, $port) {. e0 E  z1 u' H3 K$ r
  29.     if (isset($this->mo)) {: r8 f" Y3 Y' ?
  30.       return $this->mo;$ e: F/ ~: Z+ Y
  31.     } else {
    7 o( B% V" t; _5 c+ P
  32.       if (!empty($server)) {
    5 `! Q  f# M8 C/ [/ y; _; I) P
  33.         if (!empty($port)) {
    ) p; S* }6 B* x' e% H0 a
  34.           if (!empty($user) && !empty($password)) {
    9 m6 R( K  O- U7 r! X9 l7 \
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, h- I# d! d3 b, Y4 T% m
  36.           } else {
    , C& v( s2 R6 K
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    & Y# l( L, {1 ]7 r' u% f
  38.           }
    ' p4 B: v! X# a* m. c7 y9 X
  39.         } else {  r: S4 e  h+ I; @: o
  40.           $this->mo = new Mongo("mongodb://{$server}");# x& z/ m. H1 O. s& N  p/ ]
  41.         }, t, K6 y; y) N" e  z0 L) H; r6 A8 F
  42.       } else {
      U  h% F" l0 _6 n1 S- ?
  43.         $this->mo = new Mongo();
    9 n4 g0 U& Y4 _+ v8 C- r8 Q/ c) L6 r% a
  44.       }
      s( L: P) ^! l$ H) ^+ I0 z
  45.       return $this->mo;" y7 i+ Z! ?; u9 K% i
  46.     }( R% b* N% K" X
  47.   }* c* K7 h- A5 G( }
  48.   /**' p+ y5 D& g0 K) C$ A
  49.    * 查询表中所有数据+ a6 `: X' S, _5 g
  50.    * @param $table
    + K! R; T0 a6 Q1 H5 n: N
  51.    * @param array $where
    4 M* r" L5 i8 w3 w  R
  52.    * @param array $sort
    8 y" l2 l& R: _$ z: Q5 a
  53.    * @param string $limit0 ?4 F4 M6 ?3 a  K
  54.    * @param string $skip  M. G- B  j$ O; X+ P* t' ?" E: b' D+ D
  55.    * @return array|int
    ' w' @  W1 e5 o1 k/ H! S$ ]* R2 h
  56.    */& ~" x  Y, i; S3 }
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {# ^# p8 T/ k6 }  S- k8 C
  58.     if (!empty($where)) {- p. h& y9 a5 e
  59.       $data = $this->database->$table->find($where);
    - P# K* @2 @; z; f) r
  60.     } else {
    * N7 R4 u4 G* Q0 v$ J% a+ k4 f
  61.       $data = $this->database->$table->find();
    / n5 V( m2 s4 b
  62.     }
    ! c. r. @& T- h- p6 ?
  63.     if (!empty($sort)) {
    1 _' E" n- i0 G
  64.       $data = $data->sort($sort);& q" E9 w7 k! ^
  65.     }
    , q) k; [/ ^1 R
  66.     if (!empty($limit)) {
    7 F' Y& ~$ k# m5 a4 P
  67.       $data = $data->limit($limit);# B3 W9 o& Q7 k- y. d1 H9 R
  68.     }+ n6 Q+ e4 M: {: y
  69.     if (!empty($skip)) {
    * d' d* E, H* _* K' s$ Y$ |# J
  70.       $data = $data->skip($skip);7 b& n5 @1 a! M
  71.     }. `. M6 @" t5 r3 S# S$ {
  72.     $newData = array();* G+ ~6 S& s3 }: _# u3 c; {
  73.     while ($data->hasNext()) {
    , {; b& l9 E0 l2 X% C7 p, p
  74.       $newData[] = $data->getNext();
      Y5 S7 i2 f& \$ I- X0 D5 m+ A! O6 S
  75.     }& C- w1 {* x" I& N1 n
  76.     if (count($newData) == 0) {
    1 R0 F; T- \! u/ \% Z' d7 C  k& V
  77.       return 0;
    + B9 {& }* b! A
  78.     }' u9 ~+ ]: R2 g
  79.     return $newData;2 R0 B  {$ t0 v5 f4 ^  C
  80.   }# r! ?* |" D; U3 s* X2 L0 ^- c
  81.   /**
    ' P$ H( Y& r! ?) ]
  82.    * 查询指定一条数据
    ! p0 d0 O9 @. Q8 g
  83.    * @param $table
    0 M6 P* n$ ]7 U- U2 l5 O
  84.    * @param array $where
    $ s+ I) z( Q6 a3 c
  85.    * @return int9 `1 _$ g, D! \& \0 _$ Y) S
  86.    */
    5 o" V7 u" ^# w/ G- T
  87.   public function getOne($table, $where = array()) {
    / P6 A# r$ y3 K2 u/ X. z) N
  88.     if (!empty($where)) {
    , Q) x) S& {( ]9 L) g' [
  89.       $data = $this->database->$table->findOne($where);
    * i; T: h/ N6 i$ O: M
  90.     } else {
    , ?3 G) Y$ C( P: l: l8 i
  91.       $data = $this->database->$table->findOne();& }4 u  s) w8 j
  92.     }
    % g3 |) |* F! F6 {6 O9 H  T  q
  93.     return $data;
    0 X1 @* R6 t3 i+ v2 s6 P  v  I3 O
  94.   }
    ! L" j6 i* {9 O7 E: F
  95.   /**# I3 h% a! S# y
  96.    * 统计个数4 u7 C5 r. E8 v- m
  97.    * @param $table
    * \9 `3 {. H  T1 E2 p
  98.    * @param array $where
    ) f( x. h3 r$ x& x; p8 a
  99.    * @return mixed
    * V, Z: a( {% a" |/ E2 a( z
  100.    */5 e  y* l8 {% u% Z$ q
  101.   public function getCount($table, $where = array()) {! ^5 J& z3 [' l, o( T% _6 R; l
  102.     if (!empty($where)) {
    1 o3 w9 @) j6 }3 a  c
  103.       $data = $this->database->$table->find($where)->count();# p( e$ }) y; B* r! T; q
  104.     } else {
    . ^/ `# @; s6 c" T
  105.       $data = $this->database->$table->find()->count();
    + N4 ]; _" q5 A- H
  106.     }. m& A3 b7 c' s) A
  107.     return $data;& q2 I2 F( n: u, Z; |( s
  108.   }/ J9 a  {" N9 O8 @! \* v4 f
  109.   /**2 S( ^& P0 M% O3 X& Q; F) D3 Y
  110.    * 直接执行mongo命令( L$ C! ?3 U; l" u9 w
  111.    * @param $sql
    # D( B! G: r0 d8 j$ }" d( S* C1 h
  112.    * @return array6 S5 s/ A2 j+ _$ C2 l5 T7 C
  113.    */
    $ t# j" g0 C, I8 t& f
  114.   public function toExcute($sql) {
    $ I5 k% k0 B  |6 P
  115.     $result = $this->database->execute($sql);
    ! m" s# z, U8 S4 d# V* N, d
  116.     return $result;
    " ~! g" D6 N" [3 Q9 q4 L
  117.   }& K8 v/ _; i+ [5 ?. j* Z
  118.   /**/ W. L6 O3 `" m( h; d) m3 w
  119.    * 分组统计个数  H1 N( j" X' q7 N6 L1 X1 _) O/ b
  120.    * @param $table
    ' u3 u) U" f0 h' v& ]# f- A
  121.    * @param $where/ d  C6 E9 w7 a  m, R2 a) i6 [
  122.    * @param $field% d( i# o# t! t3 u: `; {( {
  123.    */4 D' A* H0 P% [1 q
  124.   public function groupCount($table, $where, $field) {+ J# o; t% O5 M
  125.     $cond = array(  Q" c7 U# X9 _) L
  126.       array(
    4 `: k* i6 R: y3 @2 G
  127.         '$match' => $where,! B8 L  s( Q) \: d! ^
  128.       ),
    0 T& y6 v  x, V3 g3 J
  129.       array(" _# c! |& H& ]- M
  130.         '$group' => array(7 H7 r+ w& R$ L" }
  131.           '_id' => '* K: |2 C* y8 N4 Z; V8 \2 n, m1 F
  132. 7 q8 X4 H) l4 t4 y
  133. . $field,
    & d8 E! A0 _, w% ?; D
  134.           'count' => array('$sum' => 1),) p5 |1 ?2 w. D; j$ e. ]
  135.         ),5 t; P/ X3 l) b8 `, h4 z$ |
  136.       ),# n- z: b, q% n' [
  137.       array(
    7 C& {. a0 U! f% C% y: Y
  138.         '$sort' => array("count" => -1),
    % S/ ~8 d+ p7 o
  139.       ),2 r' T) Q+ ~& `/ Y/ p! v( C; `
  140.     );
      p( u$ Y9 ]; [2 e% T
  141.     $this->database->$table->aggregate($cond);
    % c4 r8 q; B% @# Q
  142.   }" T% ]/ y' M0 a" ^9 M7 U1 u5 {
  143.   /**8 l3 O& X5 q+ s4 G6 Y2 }
  144.    * 删除数据* }7 S2 r. Z) l' i
  145.    * @param $table
    6 p; c2 w+ p5 _
  146.    * @param $where: ]! o3 D7 q; R; l( _, t1 G
  147.    * @return array|bool- y4 M5 S5 x/ @0 Q
  148.    */
    9 L6 R3 N+ q, I3 |
  149.   public function toDelete($table, $where) {" s. S7 _) \0 u- P; t* q( r
  150.     $re = $this->database->$table->remove($where);5 t! f4 Z0 F$ x
  151.     return $re;8 G& U. K1 B0 c* M$ n$ c& O
  152.   }; A( l1 j: o' I/ h
  153.   /**
    4 [2 B. j4 n0 I, x) V- Q8 U: M
  154.    * 插入数据
    5 E) ]9 w# ?9 H/ D  W& f( Z+ `
  155.    * @param $table
    4 @. m: P. W% c" e/ n3 ~; Y* w
  156.    * @param $data" a+ y$ i/ z  p+ \
  157.    * @return array|bool
    8 o6 M, m' a) M& s& i; o# _" f% [: R) s, G
  158.    */* p  V! b: \* J5 o
  159.   public function toInsert($table, $data) {
    $ c, s& H) `: u4 p5 x% p
  160.     $re = $this->database->$table->insert($data);2 g# F$ `9 F- w
  161.     return $re;$ ^& ^* O, x0 J9 H
  162.   }
    3 T2 P( R) d# Q% F8 z
  163.   /**8 X& S# a* W5 b  M7 p
  164.    * 更新数据3 Z: j$ A# \1 L: z
  165.    * @param $table
    / O+ G' y! o# D0 V
  166.    * @param $where
    ' ], p& ~! _  t- C$ K( q- w
  167.    * @param $data; ^- @0 n$ V0 u8 Y& g8 n. ~
  168.    * @return bool
    # e$ u' z7 W0 c& ~/ r: f7 p
  169.    */8 e# ?. O9 J' ?, I6 W" K
  170.   public function toUpdate($table, $where, $data) {
    , _; }* g! U8 s0 V3 e: f: ^4 Z
  171.     $re = $this->database->$table->update($where, array('$set' => $data));$ V0 X( x; e7 V. X
  172.     return $re;
    6 I6 ~; S* ]$ B; F8 d
  173.   }6 U/ V# Q7 J0 ?; s* c
  174.   /**
    " x3 w* Z% `8 d& p/ B
  175.    * 获取唯一数据
    * i; o' B1 p2 \# e6 c# [
  176.    * @param $table
    " a6 j4 l2 o' C# h: ~' h
  177.    * @param $key5 S2 F& t5 `  X: O9 K% f
  178.    * @return array
    4 h8 L1 h$ G  Q. N
  179.    */
      S9 K* I# Y, g# ^) e* V& t
  180.   public function distinctData($table, $key, $query = array()) {
    ; N" L; I* R8 {) |/ ]4 j( g. @+ ~/ F( ]
  181.     if (!empty($query)) {( C4 Y, E# T+ c. G0 _8 p
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, r+ k) x. H4 M; ]; |# ^
  183.     } else {
    + T7 A, v9 p' Z- f# c' z
  184.       $where = array('distinct' => $table, 'key' => $key);
    6 e# }( h- z' y' P
  185.     }8 D7 D! W3 i* f7 i
  186.     $data = $this->database->command($where);
    4 k9 R5 B+ r' _
  187.     return $data['values'];
    9 W  }2 A" \" O
  188.   }! a" P0 a7 m4 j! D: u+ e- m9 h/ O7 o
  189. }  y6 h) y- F) i4 b
  190. ?>
复制代码
! ^7 Y2 U5 A0 W

: s' b! j: G: x& J! c! Z5 @) G* Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:29 , Processed in 0.053085 second(s), 20 queries .

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