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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。5 _& s/ i* J" c9 \) [, Y
模式自由。
6 p/ j) ]3 Q9 {7 ]( V+ A6 F* t支持动态查询。: ]/ l* ^4 V& P1 u  t& B- s
支持完全索引,包含内部对象。
' @& P( J+ K0 o3 P( p  }支持查询。) z) ~, x" V7 S# K! D- \7 P
支持复制和故障恢复。1 t; N5 n6 h- {, g2 ~& P, H; C
使用高效的二进制数据存储,包括大型对象(如视频等)。
3 u5 W0 i0 s' X7 P5 D, R7 t) r, u自动处理碎片,以支持云计算层次的扩展性6 t4 i2 U" D4 J$ e: u; k
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
0 ?( Y7 H, H5 [5 ]* m文件存储格式为BSON(一种JSON的扩展)
/ ^# V3 k# f  h. ]  M2 |可通过网络访问

所谓“面向集合”(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+ b$ e/ W& n+ f/ A
  2. /**
    ! a. Z: b0 a  D6 X( J1 }
  3. * PHP操作mongodb数据库操作类2 s$ G* l# y2 N5 Z5 J. A# _' l# r
  4. */
    2 w* g1 @' E/ Q" y& `/ O
  5. class Database {! ^6 M' D! C2 i
  6.   protected $database  = '';
    ; U# q' G% N3 s" C2 k; w" l* k
  7.   protected $mo;1 K9 H/ M: o7 n* Q% B
  8.   /**' T* q0 L+ P6 [* T' {8 ~
  9.    * 构造方法: S* W4 b5 Q1 x* W: N# g
  10.    */
    9 c8 V' j" R( f0 u3 o
  11.   public function __construct() {
    7 U) w, b7 U# }+ W) u% \& [
  12.     $server = DBSERVER;
    * n7 L# l" W2 m$ j' K
  13.     $user = DBUSER;
    , G" T; Z# i1 u! y
  14.     $password = DBPASS;
    ! }# Y5 Z, x- q' d
  15.     $port = DBPORT;
    - f+ c: Z8 v" Y' b' w5 @
  16.     $database = DBNAME;2 R4 O2 E- d# N2 m" C6 P
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    3 R7 x8 y5 }6 n- Y2 Q, m
  18.     $this->database = $mongo->$database;6 ]- f5 ]3 E% b) Z
  19.   }
    2 ~6 ^  [' w8 o+ W: y
  20.   /**
    8 r' G7 Y' C: R7 R7 U) X
  21.    * 数据库单例方法
    1 O/ K4 S' f' t" P2 o9 D
  22.    * @param $server
    4 D" g* M, a8 ~+ T2 I
  23.    * @param $user
    * Q5 @0 l- e: c) |$ s+ ?
  24.    * @param $password4 D5 u+ b9 l# o1 C
  25.    * @param $port
    + k8 X- z& p& E  R. ~" O5 A7 u
  26.    * @return Mongo7 u2 w' q7 h+ z) q3 h
  27.    */
    6 f* o: R; O- K5 ]! b; _
  28.   public function getInstance($server, $user, $password, $port) {
    : _7 u! p3 v! V2 J  W
  29.     if (isset($this->mo)) {
    ' j- M5 U' K+ e
  30.       return $this->mo;
    - s2 [# |( f1 G! G
  31.     } else {
    % n: ^0 a1 H8 I6 T) M. p. b
  32.       if (!empty($server)) {
    / w# D: _+ b* N- z0 O9 C. B
  33.         if (!empty($port)) {/ J- T& |* @5 j2 |% ^4 \4 d
  34.           if (!empty($user) && !empty($password)) {+ [8 R0 C* L; H6 a9 h, d4 C- d
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    + J$ R4 j: z9 Y* M* V, M7 O. c
  36.           } else {$ W1 M% C4 d3 A3 y
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    3 I$ Z& x  N# d1 g: @+ T
  38.           }
    0 h5 x" G; X9 |2 J( a
  39.         } else {, N- O6 W2 d6 a% b, P: w
  40.           $this->mo = new Mongo("mongodb://{$server}");* }# |9 b. _+ I. s; M! F8 c
  41.         }2 }* w9 `0 d, \7 N8 U% P
  42.       } else {2 \8 C9 V$ N# g* `0 t: n
  43.         $this->mo = new Mongo();
    + ]4 n% P; _( [0 o0 c5 h/ M
  44.       }
    8 s1 [6 P& W$ c  z, e) S9 D' N
  45.       return $this->mo;
    7 D' x, B% q1 d0 G
  46.     }+ b3 Y- K% M% l7 [" E
  47.   }4 C& @4 {9 C1 l
  48.   /**
    1 i5 c8 o% Z+ @# \
  49.    * 查询表中所有数据$ f4 o8 O% K% }! A; [7 R$ t! ]
  50.    * @param $table
    % n9 J: Q5 p6 U1 D6 b
  51.    * @param array $where
    - s  P0 A& j6 Y7 U
  52.    * @param array $sort$ B' g: L; x  w& L% N& ~
  53.    * @param string $limit: x4 Z* g: E1 j. k8 H4 J+ I5 Y
  54.    * @param string $skip
    ! C8 }2 ~% G, C4 R, W
  55.    * @return array|int
    ! ]! s& O! r0 X% X
  56.    */9 D6 f: J( t' V
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {# [* t# T+ S) }% U, S0 `
  58.     if (!empty($where)) {9 c2 S& \$ |# u0 |5 G, N$ w
  59.       $data = $this->database->$table->find($where);- M( W( w5 w3 L# ~$ T& N+ ~
  60.     } else {0 \3 E- j: y7 t/ D) V% R8 j$ b; f
  61.       $data = $this->database->$table->find();( [, U& `' Q) y# J) E
  62.     }1 P8 N6 x0 P/ a
  63.     if (!empty($sort)) {
    , U, k9 q, @" H8 L
  64.       $data = $data->sort($sort);- @5 P0 ?3 W- I2 C
  65.     }- V4 E2 V! X5 h0 _
  66.     if (!empty($limit)) {  X% G, C1 m8 w
  67.       $data = $data->limit($limit);
    % X8 h; F6 K) b  s$ s+ E' u8 o
  68.     }
    ! p& c. Y# z7 ~7 B: d' |9 _& u
  69.     if (!empty($skip)) {2 W6 h, m& p% o- [; b4 P* R
  70.       $data = $data->skip($skip);: w+ x" G2 V* }3 F$ q! j4 @  r
  71.     }1 ~4 C) X6 G+ `8 l9 a
  72.     $newData = array();, w  @, x! t4 C6 }
  73.     while ($data->hasNext()) {# ~' K' t1 o4 q3 Z3 i! j
  74.       $newData[] = $data->getNext();
    ( i6 z0 |. V; D2 U) Y/ \4 a
  75.     }" l3 H, a7 r2 Q/ b
  76.     if (count($newData) == 0) {
    2 b$ @# O4 F4 K) k3 Z( J! P
  77.       return 0;5 g  L, Y$ i+ a# P8 W
  78.     }7 s/ n  }$ [' _" B- P
  79.     return $newData;1 @0 L# e) U  s0 o7 Z% B
  80.   }  o+ D8 Q& i) r3 a7 @
  81.   /**0 ?4 x+ r. s7 _& m  W+ o
  82.    * 查询指定一条数据8 D: Q4 f/ K6 R3 W6 f3 |
  83.    * @param $table* E' d8 C3 Y5 T* |
  84.    * @param array $where# |: n1 c6 ?  D0 A# g
  85.    * @return int
    ! I$ e. X/ O% I$ p
  86.    */
    ' o* v5 Q+ T) V6 Y9 R
  87.   public function getOne($table, $where = array()) {7 \  J/ T& F* V  g( q+ l) F2 [, [* `: O
  88.     if (!empty($where)) {
    3 s5 D$ f  y; c( m* t. u
  89.       $data = $this->database->$table->findOne($where);
    & H/ {6 ]1 w; E& z- G
  90.     } else {
    ( U7 l4 }3 U5 I3 A2 c, l! w
  91.       $data = $this->database->$table->findOne();
    ) P2 h3 v+ Q% k+ H2 x
  92.     }
    8 Y3 A/ o' S2 M  L8 d' t/ E6 M- D
  93.     return $data;
    0 ^( ~8 p, a3 Q* H& o
  94.   }
    " x, t6 y3 G! o& T# E& @  `6 W
  95.   /**
    ) f4 V3 x7 _- W* M- ~4 J  }7 N! J
  96.    * 统计个数0 A4 u; j* W0 K6 O
  97.    * @param $table
    % g2 U9 y6 y& N: J% H3 E6 T* q
  98.    * @param array $where3 C. c$ @' h6 E8 t* g
  99.    * @return mixed: q1 i4 p9 p2 \( W1 ^8 \3 u
  100.    */
    : ]( T- p/ {4 g! V+ P
  101.   public function getCount($table, $where = array()) {
    . X2 n% @4 o- j( ?8 B! H$ d! R
  102.     if (!empty($where)) {
    9 B& s4 l4 }. x7 A1 g7 q
  103.       $data = $this->database->$table->find($where)->count();* y1 y& m" Z" g+ U) W8 x
  104.     } else {! f: D5 |# l! Z
  105.       $data = $this->database->$table->find()->count();
    6 F8 m& A/ |! p
  106.     }
    ! X1 |" n0 a( D6 X0 a  m
  107.     return $data;
    # S2 i  I' t, ?. P  L( G7 R6 L  v% ^
  108.   }9 m$ T4 ^/ q* O% G) j
  109.   /**
    + q5 S, o' p. N$ [
  110.    * 直接执行mongo命令
    , k# W# Q6 _! v4 z3 q* `
  111.    * @param $sql
    2 O. k# m' E9 I- O+ _& P% m
  112.    * @return array* s0 H$ a5 p0 l
  113.    */# Y% C' ?! }$ Y: i( ?
  114.   public function toExcute($sql) {  s1 H  o. U) Q5 m
  115.     $result = $this->database->execute($sql);" g" D0 |/ b/ p; M9 A4 x. E  n
  116.     return $result;
    2 v, o% L2 [$ `) B: U; r& L
  117.   }1 q; P) }3 \2 S9 G
  118.   /**
    # j" D4 X4 ]) {0 r5 s
  119.    * 分组统计个数
    ! S. h. _8 b5 l" T8 G4 {
  120.    * @param $table
    0 z( s7 E8 Z6 A9 m
  121.    * @param $where9 U: B  }/ V$ P8 T( v: Q8 n
  122.    * @param $field4 y7 w1 N4 Y1 B- x
  123.    */! T, B4 D2 [; @0 u
  124.   public function groupCount($table, $where, $field) {
    ( Q' u0 |% S, C, X- y) \! }
  125.     $cond = array(
    2 L$ ~/ p1 {) x
  126.       array(
    6 `+ A" ?, H  L) Q) {8 K" }
  127.         '$match' => $where,
    . [3 |- m7 P  p# u8 z* `- o
  128.       ),
    ; @( ]3 c& P4 L
  129.       array(
    & y" B: w9 K, O' j& r
  130.         '$group' => array(* v, c. u5 G! z
  131.           '_id' => '
    * H. J( }2 F5 I2 w$ \. G

  132. 1 u# |6 u) n% ~- s  _
  133. . $field,( |5 ~3 o" q0 p
  134.           'count' => array('$sum' => 1),( |; W0 K$ Z- v' \+ l# X: I$ I2 }/ H# R
  135.         ),4 c  V; k' E( S) Y6 R6 t
  136.       ),) @" l3 g4 L( }) _
  137.       array(6 y6 {1 ^6 F- o1 D6 E% U6 P, G6 z
  138.         '$sort' => array("count" => -1),( ~: h0 Z4 C1 j! d1 M: c
  139.       ),
    0 K0 J) I$ M, v5 I7 W  W
  140.     );% a% Z' E# x9 _* ~2 C6 G, _5 V
  141.     $this->database->$table->aggregate($cond);
    . }  d  D3 p( m6 V7 b' d. }; L- Y
  142.   }
    6 T( ]7 _/ x$ }% A
  143.   /**+ E* Q8 I; _- z8 q
  144.    * 删除数据
    5 O4 M9 u8 D9 b9 I' W0 s
  145.    * @param $table# o, `& e# |8 B! R4 b# z: H+ Z7 Q
  146.    * @param $where3 y+ D$ H* u( @' V% K
  147.    * @return array|bool' r" S0 V" K0 p5 I- ^
  148.    */& G1 z$ ~, ^, R6 J
  149.   public function toDelete($table, $where) {& K9 H' u. d% V
  150.     $re = $this->database->$table->remove($where);
    : ?6 e* W4 X# ?: C% A
  151.     return $re;) F4 w* N  V0 N4 v
  152.   }( ]: g  w7 E- u, }( Y8 d
  153.   /**1 _& q% [# K6 M8 f  x! K
  154.    * 插入数据
    9 J% l' p4 h: t; d+ C. R
  155.    * @param $table
    * V( N* M/ S8 s
  156.    * @param $data7 g5 z# g3 Y& o1 k9 \1 X4 ^
  157.    * @return array|bool- R1 C" l+ e+ w1 I' r
  158.    */) r3 Q1 W& L! i' y
  159.   public function toInsert($table, $data) {5 V& X! i# G! P, j
  160.     $re = $this->database->$table->insert($data);) Q8 g9 X4 c$ E' K( S. X
  161.     return $re;$ d7 F# n/ l/ d( T& M( [2 I
  162.   }
    . w1 d1 Y) ]1 @, M$ P# M" F- q' H
  163.   /**% Z' H4 x) K5 {' p
  164.    * 更新数据
    ) ?2 e8 b% X- p3 ~; Q% J
  165.    * @param $table0 U4 v5 M8 C: G/ I5 w( {
  166.    * @param $where
    5 J* G& f' v- x* K% i8 T* Q* x4 S
  167.    * @param $data
    1 \5 R2 r3 j" l  c  U
  168.    * @return bool: f& E: g: J. Q/ H) V
  169.    */
    ! q- f6 N6 z' X8 \# P/ j7 g
  170.   public function toUpdate($table, $where, $data) {
    , n$ S( \+ a; i* p- E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    . H( C  f; P0 S" D! Q# y* m
  172.     return $re;4 M, e! t& \# I, ]! M
  173.   }
    / t9 `9 r% k4 q" D( r5 ~5 p
  174.   /**) Y6 P, u2 A; q- n, z1 Y  d; W
  175.    * 获取唯一数据/ M' ]  `: F+ k4 I
  176.    * @param $table" P; T- j# M3 F3 Y3 s; j  _) E6 I
  177.    * @param $key
    % }! w  i( [& k  {: W" D& K
  178.    * @return array) V3 P/ Z' }5 j/ d3 Z2 y3 X8 j& j
  179.    */
    9 W' Q7 [" Y1 w7 [3 O) M
  180.   public function distinctData($table, $key, $query = array()) {0 s; Q* W- W! g8 l% s
  181.     if (!empty($query)) {' ]2 ^* D5 |( T* F
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    ; E5 v. q1 f, M7 K3 b0 t% b% n1 L
  183.     } else {
    + r  h6 E) B- m1 ~6 s; A) `
  184.       $where = array('distinct' => $table, 'key' => $key);# M+ F+ j  q: H3 m6 a2 j3 K
  185.     }2 M! ?, a# E7 f
  186.     $data = $this->database->command($where);- O" r# w# H! J5 Y9 s
  187.     return $data['values'];
    # y& u$ X4 v- x5 H) n  V
  188.   }
    8 N& G5 R2 {+ A" [) V
  189. }
    ' x. k+ v- A) I. T
  190. ?>
复制代码
5 n, J5 r3 n: d, f, z4 L6 l/ W
% K* D& ~( Y$ z* e$ }; S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:03 , Processed in 0.053746 second(s), 20 queries .

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