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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
9 ^' V& O% B. D  E模式自由。  B3 j3 O, C+ U. Q
支持动态查询。
' t" o5 J2 m# F, f- X6 Q2 V支持完全索引,包含内部对象。
0 l2 K. g# {  W" T) K支持查询。
, @& b" J1 N# O! {% i! b* k8 X7 O- }支持复制和故障恢复。
% G2 b$ P, l+ F: a使用高效的二进制数据存储,包括大型对象(如视频等)。! y) _1 d5 X) R: ~
自动处理碎片,以支持云计算层次的扩展性3 s. ]+ X7 m- }) @2 L1 J
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。7 U: A/ t& w% I
文件存储格式为BSON(一种JSON的扩展)+ T4 s: m! B# l3 z% x) C  O: ]5 D
可通过网络访问

所谓“面向集合”(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+ L4 E% D/ [- {9 ^1 X8 r" a$ [
  2. /**
    . U" M( n. h3 b1 G+ j; \5 Y) p
  3. * PHP操作mongodb数据库操作类
    / q  }6 D9 a( H: C5 Y! U6 F6 d
  4. */
    9 U3 Y% F+ V6 W' g! L3 Q* t/ }
  5. class Database {
    & M0 k4 x8 |* n- ]! U
  6.   protected $database  = '';
    ; T, R( u, H3 Z
  7.   protected $mo;2 u5 `6 t. U9 i1 F9 p: P& C
  8.   /**) ^% m. E+ u6 \6 M1 `; V+ e. z
  9.    * 构造方法! Z+ [' T+ D1 j
  10.    *// R/ I3 u* z) |' z
  11.   public function __construct() {
    0 W2 @/ h( n/ g
  12.     $server = DBSERVER;; _" K6 C4 C8 b% m6 `( k/ \  ?: ~
  13.     $user = DBUSER;% Q- F6 Y% I. d# X' l
  14.     $password = DBPASS;
    * |) p4 W4 {8 P, k/ v
  15.     $port = DBPORT;
    & `1 c" z6 L. F, Q! V
  16.     $database = DBNAME;
    5 {8 E9 g$ `9 k: u
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ' a4 @, Y" c8 \1 K  K* a- k
  18.     $this->database = $mongo->$database;3 V+ l! p# d: J) l9 H7 v
  19.   }, p7 e) Z; K; Q7 }0 _! K
  20.   /**+ _( ?6 e' b, K5 @7 v- b
  21.    * 数据库单例方法
    3 H) G, i; ~' J; i5 x
  22.    * @param $server3 p# E! D1 x2 F6 J3 B5 R% f
  23.    * @param $user' h' ~# e7 ?; Z. O/ @5 D  r" N7 Y
  24.    * @param $password
    4 i4 d* p  X* K3 @3 e+ R, h
  25.    * @param $port0 i$ X6 _4 C# _7 `/ v
  26.    * @return Mongo6 q& a- K1 X/ |) G) [/ V1 B3 m
  27.    */' U% w5 {; p% ~" a: i3 H
  28.   public function getInstance($server, $user, $password, $port) {4 J* ]( j. n+ y  j0 \
  29.     if (isset($this->mo)) {
    $ q! R* }. D4 k' B3 Q
  30.       return $this->mo;" a$ V+ h6 V) O9 }& D) {; Y
  31.     } else {! j7 ]0 L3 K, A( q% O) O" s7 m" w
  32.       if (!empty($server)) {0 \5 T: y+ `% W2 B' C
  33.         if (!empty($port)) {
    ) F9 O, `3 @" K9 @
  34.           if (!empty($user) && !empty($password)) {5 E8 W4 h9 |! ~9 i2 N+ t/ J; N1 U" N
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");9 S* R' A; t( h# n, g' M
  36.           } else {
    0 M1 o! U9 y" W+ }
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    2 ~+ x4 ?. t$ @; n) \
  38.           }; n* n) T% U: h7 h
  39.         } else {
      F/ f1 e9 N& @! l# g" p; a, p9 C
  40.           $this->mo = new Mongo("mongodb://{$server}");
    : F- I# E/ w  S6 G5 G1 a+ f: J
  41.         }
    0 L; E  b5 l3 l( d9 y8 H+ \
  42.       } else {
    0 ]6 n+ g3 P0 Z2 E8 v6 g
  43.         $this->mo = new Mongo();
      R% l8 a" ?  f) |+ V
  44.       }9 W, ~5 T! O) j1 a
  45.       return $this->mo;% ~" i8 A/ \6 X6 n! X
  46.     }! m; }" w. j. B, g
  47.   }4 W. E2 Q( u% d& K& |5 p
  48.   /**
    ' n! O# [8 B3 y* S9 ]; o4 e* q: A5 T
  49.    * 查询表中所有数据5 W. C( M/ F) o3 o( R+ [) k
  50.    * @param $table$ A( ?) D0 D4 ^, [+ V0 ]
  51.    * @param array $where5 h( P+ a4 O- D% }/ g, G# e; M2 f
  52.    * @param array $sort
    ) D: ]- m+ M! ^; r. R0 W7 h
  53.    * @param string $limit
    # Y$ n7 v! I) y3 w) g
  54.    * @param string $skip: `. X- q( A4 H9 v0 Z( ^
  55.    * @return array|int) @; `! O% ?# f2 @
  56.    */
    6 A( R9 Q$ ]. L) y& H
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {1 R6 \3 D* N8 n  W, a
  58.     if (!empty($where)) {/ A; x9 R/ t/ d3 R7 e3 |% ~, ]: x7 }
  59.       $data = $this->database->$table->find($where);
    & e  V: w, E" s# l0 _: i
  60.     } else {
    / u7 Y: e2 O! x7 q0 J! Q
  61.       $data = $this->database->$table->find();& K  m8 a% n/ G7 r9 o3 j1 x2 F6 H
  62.     }
    9 t& e8 D. Q: Y8 j0 A$ n, Y1 {
  63.     if (!empty($sort)) {
    . L/ ^+ T7 K, f* M, p: a
  64.       $data = $data->sort($sort);# |- V& y3 @) O& H4 Q3 i8 q
  65.     }  P) j. P; p/ N. P# m- g' @% H) b
  66.     if (!empty($limit)) {
    " u  G7 }* Y3 o1 J  S
  67.       $data = $data->limit($limit);
    : q4 z5 Q0 t9 R7 E1 K; x0 L9 z
  68.     }* q, ~% P. M! j; L9 I
  69.     if (!empty($skip)) {8 z2 e5 l. X& F9 J
  70.       $data = $data->skip($skip);
    ; Z$ ^' B, ^; w
  71.     }
    ' E1 |, ^; z; U6 C& A) L
  72.     $newData = array();% |( H, s4 z* V, s% p7 m' x1 }
  73.     while ($data->hasNext()) {
    / z* l" z9 ^) \; J0 D: `5 R$ y
  74.       $newData[] = $data->getNext();" A- O. q" J8 n1 u4 Z3 }
  75.     }$ B6 X0 ^2 g: W; z7 v" f8 }( D/ @
  76.     if (count($newData) == 0) {
      f* ^+ `: R$ d/ D$ {0 L! p- b
  77.       return 0;" j' w1 {* B& W
  78.     }
    6 j" U8 X7 |( Y8 V
  79.     return $newData;5 q% C! s: R4 ^* F- W0 S) {4 P
  80.   }5 w6 V- c. N# c6 m9 J- E
  81.   /**% ?4 K% L. o7 `' V' W7 ]
  82.    * 查询指定一条数据" u5 d- w% A, f+ @1 }
  83.    * @param $table1 Q$ O# s5 W/ ]) U, B
  84.    * @param array $where( v+ Y( b% C9 O! f) z$ u  L
  85.    * @return int
    9 ]7 F: D9 i- T
  86.    */3 Z2 p" o$ ?; Q; E! ]: k
  87.   public function getOne($table, $where = array()) {
    : q' ^6 H0 b$ ?: @! C$ L- t: u  ]
  88.     if (!empty($where)) {
    / a8 y4 q/ q: p! L2 ]
  89.       $data = $this->database->$table->findOne($where);. B3 e1 l+ Q/ W3 l" s- {3 |
  90.     } else {
    $ Y! c- F" x# |+ P1 j% v
  91.       $data = $this->database->$table->findOne();( y2 x, d8 X3 V2 `
  92.     }
    ; T, S' t, C* q- m
  93.     return $data;
    4 F) {+ p/ U  R  G5 f% v
  94.   }
    9 Q$ q3 W8 ?" W! n
  95.   /**5 X+ L, F& D! q; B" z- |
  96.    * 统计个数
    - |/ f! ?) I! |8 R
  97.    * @param $table6 w2 \7 J' g9 h5 M# D% h
  98.    * @param array $where
    $ `7 Q; P+ _6 Q5 d
  99.    * @return mixed
    2 r. n, n: G4 u3 `, P& h
  100.    */( W+ s! K3 P1 o
  101.   public function getCount($table, $where = array()) {) e2 p6 k3 s+ v3 f! T) I7 W
  102.     if (!empty($where)) {
    * _! w' b/ `' {5 @+ M! `
  103.       $data = $this->database->$table->find($where)->count();
    $ O6 h$ S* q  t
  104.     } else {6 a% R* s- S* H- U: i0 d
  105.       $data = $this->database->$table->find()->count();- {: Z6 |. t& F) I2 l
  106.     }
    3 ~+ z; w# f$ B
  107.     return $data;8 D# l! t. Y2 Y9 y# y6 E
  108.   }  _0 D9 y# ?/ V! m/ r2 s
  109.   /**. b! X# X: C# Y# l# Z
  110.    * 直接执行mongo命令
    " |5 R, \( }( G# Y
  111.    * @param $sql
    ! h# B: d( c: ?% G  ?
  112.    * @return array& ]4 ^; @: R. ^5 l
  113.    */
    % }& M( _0 {1 G) @
  114.   public function toExcute($sql) {
      I: `1 D& L3 d2 y( s3 G
  115.     $result = $this->database->execute($sql);4 Z% l3 S' d# }, F5 U
  116.     return $result;
    9 M. K7 [$ F( H# Y1 h
  117.   }
    5 x1 v- y/ M( @+ r' O
  118.   /**# ^9 D- R* f" r0 B  W
  119.    * 分组统计个数1 Y. g& d1 X! E( b, B6 Z- p4 n1 M3 W
  120.    * @param $table
    # H2 S+ l( s' f3 X$ ~2 B
  121.    * @param $where4 g/ {4 y1 S7 d6 @1 ^& J) |
  122.    * @param $field  M. j% g- N6 ~
  123.    */3 a# M) L8 V+ }5 k( M
  124.   public function groupCount($table, $where, $field) {* l0 a) R3 v, o( F. ~( I
  125.     $cond = array(+ j7 \" g( |+ [2 a; L% `3 q& r$ m
  126.       array(( Y# F* @% T% D( ^9 m! X
  127.         '$match' => $where,' T9 u6 _) L7 H2 i
  128.       ),
    4 L0 x$ Q; o3 @; E! b7 i7 o4 ?/ h
  129.       array(+ N: L. n/ G5 R" l
  130.         '$group' => array(8 ]" j( Q7 x' k2 [! M" p# y
  131.           '_id' => '' e, L1 ]2 t7 `, {+ o1 I
  132. 5 b9 a$ D( i7 l
  133. . $field,$ M# l( [+ Q: X0 r0 F7 i
  134.           'count' => array('$sum' => 1),
    . C# i+ a; X  V/ X
  135.         ),
    : b& t4 G' c: U+ M- i
  136.       ),9 q: `7 Q% L! n; a0 Y
  137.       array(" x% B* u4 K* ]1 g
  138.         '$sort' => array("count" => -1),# P2 W! U* I; w  {) b
  139.       ),
    ! s# g( B8 F- e# [$ O
  140.     );+ r3 D3 I. Q/ a7 w
  141.     $this->database->$table->aggregate($cond);8 g3 S$ g7 Z" @, n9 c4 B: ~
  142.   }
    * |/ O2 f- \: D2 u& ]$ `" F
  143.   /**
    ( g" |# t. J. L' k
  144.    * 删除数据
    9 [0 E7 u$ m4 q) p) S- N4 G
  145.    * @param $table3 C4 M, T5 t8 ^7 J$ A8 f
  146.    * @param $where
    ! R; \  S! \  D2 \. Q
  147.    * @return array|bool
    ; k/ _7 Q# L3 j& j) A7 j
  148.    */
    + y9 H3 W! ^( v  Q- e' s
  149.   public function toDelete($table, $where) {0 W5 C% ~. d& c% `$ q+ y
  150.     $re = $this->database->$table->remove($where);; S. X* }, Q. \
  151.     return $re;% P8 n- q. q& ?9 u) g; T
  152.   }
    * A7 j8 `7 X/ y& w
  153.   /**7 l! w- d* k: M& d! r4 Q
  154.    * 插入数据0 W2 T* ~6 M3 K8 V$ e
  155.    * @param $table
    , Z7 I) e2 T7 p. ?: R2 c+ S- e  V
  156.    * @param $data+ N( c+ d5 k' \' }
  157.    * @return array|bool2 L, x5 S% I( A0 ?
  158.    */, s8 x/ o* H- o
  159.   public function toInsert($table, $data) {  l8 u/ N5 \4 f2 A
  160.     $re = $this->database->$table->insert($data);
    - ^6 Y! J8 J! j8 \
  161.     return $re;% f+ A2 x- O& J7 f: e# R+ n
  162.   }* s( ]; `5 |/ |6 d6 }
  163.   /**
    3 r( M& L$ b( z) ?0 A' r
  164.    * 更新数据  h, L9 |# Z# S- h
  165.    * @param $table/ E4 G* |" |9 n
  166.    * @param $where; o3 y, R- R9 G
  167.    * @param $data' n8 q% O. w- y
  168.    * @return bool# B# W# e6 `. I# e  a: m2 Z
  169.    */
    6 T& r1 g  O! i( R3 [
  170.   public function toUpdate($table, $where, $data) {2 Q1 V; G+ W4 ^  z+ h
  171.     $re = $this->database->$table->update($where, array('$set' => $data));5 M/ \0 W: o9 A
  172.     return $re;1 m' a! Z  R/ f, R2 x
  173.   }
    & u4 t% `6 o& @% d$ t
  174.   /**/ n5 S5 J& [) x% k. t9 U; W( i% p- o& c! _" H
  175.    * 获取唯一数据
    0 ~9 x; N# H+ Y, g; ~+ G
  176.    * @param $table2 \0 \: t) u% w& ~& W8 C. A3 m
  177.    * @param $key/ V+ C6 h; Z0 |5 ~2 b& @- D
  178.    * @return array1 C* l& B0 y# r% t% d( F5 e3 p) H
  179.    */
    - ]" q; u) |0 O3 p5 F# T5 ^
  180.   public function distinctData($table, $key, $query = array()) {7 |) W9 V) y" b1 W. f) `- q
  181.     if (!empty($query)) {7 Q5 }: M. B2 A8 y9 u3 d! L! U! A
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    ) X. _. p- ^- O
  183.     } else {
    / C, r3 L6 J; G8 ^  ?3 f
  184.       $where = array('distinct' => $table, 'key' => $key);
    ( Y: e8 F1 e4 m9 M
  185.     }' |7 Y* ]1 Q1 D7 O" y
  186.     $data = $this->database->command($where);8 r2 O1 X" W) F* x  x/ A$ Z( |
  187.     return $data['values'];
    - @. \  L$ d9 Z9 y
  188.   }/ ]; ^  r) S) P) |+ e2 I
  189. }4 L" T4 I6 a! j; x
  190. ?>
复制代码
: c) s4 u, s$ S( b" @

% Z0 z9 b0 J  y" ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 02:55 , Processed in 0.112215 second(s), 19 queries .

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