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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
. n+ q; [2 }) u9 N' ~8 k% `模式自由。9 g2 D; K$ A- k
支持动态查询。! y8 C! U4 X0 `
支持完全索引,包含内部对象。
8 r/ [# E3 V1 I  v; e支持查询。
% }! d% W  k( N6 s5 z; Y6 \+ d支持复制和故障恢复。
7 R3 v  S1 e# \7 I' c" d& b+ r5 F+ K使用高效的二进制数据存储,包括大型对象(如视频等)。5 f- q6 L# k$ b5 N1 H: [! d2 q
自动处理碎片,以支持云计算层次的扩展性/ y% J2 U, D  F4 {9 h( a7 N3 }
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
$ _( T9 K6 ~5 H: b) b* X: u文件存储格式为BSON(一种JSON的扩展)7 h# p1 r% t! x- X  I, Z! ^+ H
可通过网络访问

所谓“面向集合”(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
    9 |, k1 J) l9 D$ X8 [9 ?
  2. /**
    + ], n# o, L1 K, D7 }) u# e/ p
  3. * PHP操作mongodb数据库操作类
    + @8 u6 V9 w4 h+ }4 P7 S
  4. */% g3 Q+ X" v0 U
  5. class Database {
      v- `+ z+ w" e. ?0 R9 T
  6.   protected $database  = '';
    7 o0 ]. t+ C6 w
  7.   protected $mo;
    2 b/ F( l" P6 I  O8 w
  8.   /**; ~  V1 F3 B! X/ H3 r
  9.    * 构造方法
    3 J1 [; K; @* Q+ t8 b
  10.    */
    2 I# n# \1 ~' q8 I$ \
  11.   public function __construct() {6 A. m, [0 T) f& H$ Y$ M
  12.     $server = DBSERVER;  ^  m1 _9 s, x, F: X' @& o
  13.     $user = DBUSER;
    8 L5 q4 Q; B% u% s1 t  `
  14.     $password = DBPASS;* Z8 W" h+ I. U, S2 v! }
  15.     $port = DBPORT;
    ' P: K$ s3 ?1 O% @2 [! ?% @$ U  ]
  16.     $database = DBNAME;& s3 \6 u! q9 J4 b
  17.     $mongo = $this->getInstance($server, $user, $password, $port);9 o) s# y# l0 N( ^
  18.     $this->database = $mongo->$database;( A/ d/ ^9 F4 z/ g2 M5 s
  19.   }
    # t/ j2 c" B$ r, B/ O# c
  20.   /**
    7 s3 M6 a9 v+ W
  21.    * 数据库单例方法4 V2 E. {# T# L! r" M
  22.    * @param $server) @# v6 }- K5 a' ~8 K+ J
  23.    * @param $user8 [; A% {! D4 d. T' B3 D  C+ V3 w
  24.    * @param $password
    " P) T9 g! p' Y
  25.    * @param $port
    2 t" \) F7 V1 s- T: W  u
  26.    * @return Mongo
    / Z/ G4 f9 n- y7 M  F( G5 w  B
  27.    */) W3 X( a* B) M+ x
  28.   public function getInstance($server, $user, $password, $port) {
    ) o( A, y3 h5 K  W* y
  29.     if (isset($this->mo)) {& j9 ]1 K0 V! q8 }8 G, r( x3 X4 k9 a
  30.       return $this->mo;6 D5 q, n* E* Z- t9 a% b
  31.     } else {
    - z0 q2 O. u- [
  32.       if (!empty($server)) {4 q5 o, ^& ~$ v) W& E
  33.         if (!empty($port)) {, Y& W- l" |6 N+ B) k  \& q# F
  34.           if (!empty($user) && !empty($password)) {
    $ q& V4 R7 h2 B8 ^
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ; J8 N0 ]4 s# c
  36.           } else {1 @8 n/ w9 J0 ^7 D% @
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    9 e$ v1 ~# N* D& g, _
  38.           }
    # M& ]. e+ d5 C- c
  39.         } else {- _: M  S: n/ I9 {  y
  40.           $this->mo = new Mongo("mongodb://{$server}");: U( F$ u$ Z9 x* K
  41.         }
    , @1 `: _* d- g3 m1 }
  42.       } else {- T5 d1 ]) O, K8 k) h+ X9 j* e
  43.         $this->mo = new Mongo();
    , |# i. Z4 p2 h6 [
  44.       }
    5 E0 b" J/ F! g; G
  45.       return $this->mo;2 ?, F) d4 S$ J) ?: R/ }, K: k
  46.     }" J# F4 E9 P5 z6 R' ~
  47.   }
    - Y5 y% b2 E+ K2 S4 N; W
  48.   /**
    ! b* `0 L1 j. @/ e7 V  R
  49.    * 查询表中所有数据6 w3 b" ]. g! q+ ?6 M! A
  50.    * @param $table
    & P) U) e8 D; i7 Q1 Y/ G  v0 b
  51.    * @param array $where* U- c6 R( Y3 W5 p$ Z* G$ W  \, ]* B
  52.    * @param array $sort
    5 \5 t- h, _' Q- w0 O6 ~3 |1 ^, ]
  53.    * @param string $limit6 M9 l4 t( h% `" _$ A
  54.    * @param string $skip& K# f$ @7 ^6 P8 z. F+ d3 P- M
  55.    * @return array|int
      @% b3 l5 c7 z; ]4 p# s6 i
  56.    */
    ) N3 ?! M$ i$ E+ U! e
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    " F# Q! b& {( _7 o9 i$ z0 A) m
  58.     if (!empty($where)) {& e1 U2 `' l7 d5 C% v" J
  59.       $data = $this->database->$table->find($where);
    , G  e& m9 f& M* K& Q. A
  60.     } else {
    9 }9 ^/ ^* C% U5 p8 y, a, m
  61.       $data = $this->database->$table->find();
    ' T' s' `1 W8 {
  62.     }) L8 L/ E6 ]2 k: i5 i' g
  63.     if (!empty($sort)) {4 U9 y3 F% @4 H0 m5 M
  64.       $data = $data->sort($sort);
    ' S# Y9 ?0 q1 C( s
  65.     }9 D- D, v& S: K# V' \* U. b
  66.     if (!empty($limit)) {; v5 |9 K1 Q9 n, f
  67.       $data = $data->limit($limit);
    % |" i7 @, R- q5 J: ^0 l9 B
  68.     }
    " q0 a* c# D( [6 x) {
  69.     if (!empty($skip)) {
    & U6 d9 M) o, `/ g
  70.       $data = $data->skip($skip);/ @2 \! R$ f  |, o: }
  71.     }1 ~7 @% X% t; j& U! b3 q
  72.     $newData = array();
    % m+ `+ m( [6 `% P/ }0 T
  73.     while ($data->hasNext()) {. L2 Z+ [4 z4 y7 B. f  [
  74.       $newData[] = $data->getNext();4 t5 |' G& W* W# V  A9 P
  75.     }' M+ E( q) J3 L5 X+ j
  76.     if (count($newData) == 0) {* G9 w4 q4 Y1 {7 z3 F" o
  77.       return 0;, j, D# V6 {& o6 g
  78.     }
    0 J; [. G% f6 F: g
  79.     return $newData;
    7 V3 m7 V+ L" g) ^. N$ r
  80.   }: Y# j: [" ?- F' e
  81.   /**
    + A$ f& j& [' x& y
  82.    * 查询指定一条数据  Q' j. |( o1 \5 x) x, A! ~
  83.    * @param $table# o# Z7 G8 G% }# c$ W, a
  84.    * @param array $where, X) e- X7 {- ]& N6 r5 [! B
  85.    * @return int) w! P, ~4 J  A4 b- f6 f
  86.    */0 j/ S% k8 A* R% @( u
  87.   public function getOne($table, $where = array()) {+ U# F& v' A  m6 D
  88.     if (!empty($where)) {; h5 E) w, ], I
  89.       $data = $this->database->$table->findOne($where);
    8 E& R3 R  O  k
  90.     } else {
    ! M9 B( C7 F& n8 z2 v
  91.       $data = $this->database->$table->findOne();
    - C1 t% R/ x, T- g
  92.     }; W: E  v2 [4 a' Z
  93.     return $data;+ R# U3 g$ L. u1 q
  94.   }* |# E+ [" z: ]) p
  95.   /**( Z$ F, P4 _+ Q2 t
  96.    * 统计个数
    : @; Y2 m. q) a! O
  97.    * @param $table: A" Y2 t; P9 Q* v$ i% P0 ]4 B
  98.    * @param array $where/ D: y% V7 g( ?" F! L3 I) p9 N# ?+ _
  99.    * @return mixed
    4 j! U" m$ N* b& n
  100.    */) W  ~8 [2 ^4 s
  101.   public function getCount($table, $where = array()) {, g# m2 p, K9 @* K- ^5 C' }0 j
  102.     if (!empty($where)) {; G" _8 A3 g  \: }7 G3 o  H! E+ M5 I
  103.       $data = $this->database->$table->find($where)->count();) F% t$ L. \6 [+ N# l  J
  104.     } else {) ~7 h$ K' q( |* M1 T9 R! ^' J
  105.       $data = $this->database->$table->find()->count();5 T; C& P* {& S4 A* m/ i, i9 S  @# Y
  106.     }
    & v3 o8 f7 g" H3 B( D6 Y1 D
  107.     return $data;
    1 z! `6 b8 @; N4 ^, U
  108.   }
    ! B) Q, C7 ^& _+ M: M: I
  109.   /**7 L* p' B2 t  n/ `  R* w- ]" O
  110.    * 直接执行mongo命令5 z) ~( T* n# i. B) V
  111.    * @param $sql) s& t/ X+ y% ]+ P; h
  112.    * @return array
    # |, j% U0 ^' g. Q$ s
  113.    */# V; D' \5 z6 a2 [. A# K& a
  114.   public function toExcute($sql) {1 y& c% T1 e7 `- [% o9 r
  115.     $result = $this->database->execute($sql);
    3 _/ p8 X+ Q$ t
  116.     return $result;# j* X2 i2 [* s9 B7 f
  117.   }4 C' u/ ?( a. h/ A7 K, H
  118.   /**
    # s: m9 ?: T7 M1 {7 b- z
  119.    * 分组统计个数
    - B2 ^/ Q+ ]5 X, t$ a* Y
  120.    * @param $table
    - g1 j# d0 l  K) r
  121.    * @param $where
    8 H+ w% r) s8 e: v! ^0 Y9 C
  122.    * @param $field# _! J, c# m% x0 Z" V! W
  123.    */
    ( Z5 V5 n' k  Q  r
  124.   public function groupCount($table, $where, $field) {
    % U7 X3 ~6 t+ ^( K1 j7 O
  125.     $cond = array(: C" \9 B# }, Y3 q
  126.       array(
    + a- i8 p1 J8 V
  127.         '$match' => $where,
    ' H1 m$ \1 l4 r: ^! E- ?
  128.       ),
    5 Z0 D: m8 j6 ~( Q- @/ i
  129.       array(% |, W/ Q% t) ]7 I! Y2 j
  130.         '$group' => array(
    " C& C- i1 {' a1 q4 l
  131.           '_id' => '
    - O- u% n( V4 C! K: p, D# F

  132. $ S9 l. O2 u, K  ?% m: _
  133. . $field,2 o% ?( e( x0 @: Y
  134.           'count' => array('$sum' => 1),' ^; T/ L% ^6 [% w5 L
  135.         ),
    - w0 d/ A- j# F# r% U; E
  136.       ),% O- o6 Z7 |* G
  137.       array(
    : M* Z6 }1 E' e$ m' k8 {
  138.         '$sort' => array("count" => -1),
    # Y/ c0 f( ?( C
  139.       ),
    - x# ?3 C; V- x: j. e, O: X3 a9 _# D
  140.     );
    * k. v+ g# G1 Y! v, {, M
  141.     $this->database->$table->aggregate($cond);9 ~5 b/ v" n, X5 s+ A5 M( j
  142.   }$ `7 N2 T4 [, F+ X8 D
  143.   /**  R: C2 T, p7 @" h% h& l
  144.    * 删除数据
    / r, I' a. U% ^
  145.    * @param $table( ?  m; d2 q7 }# c
  146.    * @param $where& E! K2 ~4 P4 C
  147.    * @return array|bool
    ! ~  i6 M. F8 a! f, ]. z# b
  148.    */
      D3 w  P3 b, @4 G+ R1 t
  149.   public function toDelete($table, $where) {7 H' O% J- X1 d
  150.     $re = $this->database->$table->remove($where);, q' ~7 @& s) m& i2 E
  151.     return $re;
    ( w. I; \6 r' s9 u* [
  152.   }
    5 y! o( P! W. t8 p& i( i7 `  a
  153.   /**
    : d; H) N) o' J! f$ ?9 n
  154.    * 插入数据
    2 T. Q# v: b! C4 `
  155.    * @param $table6 w6 [  y1 F' u& Y6 Z9 Q
  156.    * @param $data: S0 f' M4 y9 B: @0 M
  157.    * @return array|bool
    / a3 u% a; Z8 Z! u9 C
  158.    */
    + A: L% ?6 J0 d! r  M6 [& A' ^! S) X
  159.   public function toInsert($table, $data) {- F9 J8 u0 B' d9 }) T
  160.     $re = $this->database->$table->insert($data);
    / X& G/ [0 o( ^- x6 P* R
  161.     return $re;6 C5 L, M& f* P2 q2 `* Q' }
  162.   }0 F" P0 |6 ^9 S$ a  j. |- X
  163.   /**3 j/ D/ g, g* }4 r& }: u
  164.    * 更新数据
      {& O9 O5 }; S9 _; U  q8 |9 a, a
  165.    * @param $table
    # L. r# p3 i% I" L0 P5 z
  166.    * @param $where5 {! y; M/ p+ ^# d# Q
  167.    * @param $data
    $ Y8 @+ D* K- Z( @
  168.    * @return bool
    6 v# Y1 l- w' Z+ z: ^" r' h6 H4 S, `
  169.    */4 A5 l3 I6 X% l  `& ]( n2 G8 V" w, Q
  170.   public function toUpdate($table, $where, $data) {7 i- ^# V# k+ P+ b
  171.     $re = $this->database->$table->update($where, array('$set' => $data));2 N6 C1 z- e+ ~) A, S: f) `" F, A
  172.     return $re;1 Q  T& R* I7 }( q, E
  173.   }
    5 `4 d0 ]7 @3 s6 |0 ], Q
  174.   /*** c/ N, B$ q1 h4 u- @
  175.    * 获取唯一数据
    ! i  G3 I* J7 V, l* W
  176.    * @param $table  V, q* u9 N2 U* Q' w
  177.    * @param $key
    0 a' x) t% S7 T5 c! H
  178.    * @return array0 n8 b, Y$ s& M" d( T7 l
  179.    */
    + {5 `+ X# M* M. Y  u( O3 n
  180.   public function distinctData($table, $key, $query = array()) {+ _% C# g2 {# i0 W4 G
  181.     if (!empty($query)) {; {: u! `) C4 c3 c- a. m
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    7 N* Y# T: m- K1 q0 z' w
  183.     } else {
    2 P' L' j2 b  H; J& [: u& L. |5 W
  184.       $where = array('distinct' => $table, 'key' => $key);
    9 h; W) j0 ?1 k) D* E8 o  \( F
  185.     }
    5 s+ z! U4 P1 {2 p4 g+ V
  186.     $data = $this->database->command($where);
    - h6 i4 r/ `/ O
  187.     return $data['values'];# I1 L' A4 {7 J+ Y
  188.   }
    8 p9 x7 o" w1 ^5 d: `
  189. }
    # E  h, R4 t7 w" s& V8 a9 |/ m
  190. ?>
复制代码
( r8 B* t4 h& z$ ~: A; s

" X. D6 p2 `1 c4 A4 X4 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 00:14 , Processed in 0.060553 second(s), 20 queries .

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