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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。0 O8 b; C" ]" R1 w
模式自由。
3 l2 A0 l" s0 x% ?支持动态查询。
5 n" j5 z) \! ^1 p- D0 r支持完全索引,包含内部对象。/ _3 x% p' w' R5 \% t3 T7 D2 o
支持查询。
4 x4 f* B* i* h$ f" j: }支持复制和故障恢复。
- I5 w0 J2 j: m; h使用高效的二进制数据存储,包括大型对象(如视频等)。
9 ]: o" P  r) B) h# t" |自动处理碎片,以支持云计算层次的扩展性! P# L$ T5 Y; }
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。' l# U) l+ u2 K( X
文件存储格式为BSON(一种JSON的扩展)! Z: a5 z' q7 e& Y- {: Z
可通过网络访问

所谓“面向集合”(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% c  ~9 b# Z# c) I. ?5 n
  2. /**
    ; t. f/ N- ?7 D3 H! _( R3 A
  3. * PHP操作mongodb数据库操作类
    : T# B& G/ J, d8 M0 S/ @
  4. */0 b1 Q2 p/ B' M6 ~) d) Z) ?
  5. class Database {
    7 q1 Y# Y( F6 K' ~' t( W; F* y
  6.   protected $database  = '';! z4 u1 q: ?8 n9 ?2 _- |9 d5 V. w
  7.   protected $mo;7 r$ E5 E9 x) v
  8.   /*** `$ H/ X& [8 K, Z+ E' n4 L3 A+ k
  9.    * 构造方法
    9 y7 `; a# t0 m, G  n
  10.    */
    . h# X7 d( o- o/ h1 R* I( X
  11.   public function __construct() {
    - p9 ]; U- e+ `7 i' Y5 f0 }
  12.     $server = DBSERVER;& x2 f% l- ~% r1 w; [# d6 s8 b
  13.     $user = DBUSER;  d. U: A: l* w6 a% v, }9 ]% \& t
  14.     $password = DBPASS;; X- s( [" Z: _4 j2 |
  15.     $port = DBPORT;/ B; U8 m  `2 I: d/ x  E8 b0 i7 y
  16.     $database = DBNAME;
    " p/ ^# G/ b, a2 J
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    0 f! x' z& ]+ G: L/ U& }- Y. q$ F- z
  18.     $this->database = $mongo->$database;; Y7 Y( L5 [9 a, H; G6 Q
  19.   }( w5 G) [) S% s6 w% f+ _, B
  20.   /**) j$ o8 r% N5 _% M# `
  21.    * 数据库单例方法& t. Z4 q3 e5 a2 ^2 t' p4 b
  22.    * @param $server5 H/ T2 p$ M5 f; }& T1 Z# Z4 j
  23.    * @param $user
    8 v0 t, m0 H$ C- J4 h( U0 D+ y
  24.    * @param $password! D) Y# a) v' W2 K! Z, V
  25.    * @param $port
    & E7 b* R, _0 r* u+ Z$ o4 k
  26.    * @return Mongo
    0 e$ Q; s3 q& F
  27.    */
    ; ?8 \4 k5 N# U& l+ ?0 u( p, R2 O
  28.   public function getInstance($server, $user, $password, $port) {$ m' R5 r% [; m  x# R
  29.     if (isset($this->mo)) {
    $ }+ L' P- n: i. i& ~5 |" N1 a
  30.       return $this->mo;- k3 e' q. K0 w: Z
  31.     } else {
    * M7 H' Z0 E8 m# D* I% W
  32.       if (!empty($server)) {
    * O! T' r6 R+ m1 g
  33.         if (!empty($port)) {% z- m+ E+ w5 c, S  H
  34.           if (!empty($user) && !empty($password)) {
    8 K5 |( B; e9 G' Y4 s1 w
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");1 x7 K2 Y5 b- o8 b* V# P) |
  36.           } else {
    & x' `# \) O' M& Y, y. P) Z
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");5 \! K4 Y# c: S4 f
  38.           }
    0 u+ }$ y1 S3 \" n
  39.         } else {+ y4 w) b7 ]% W% B, _
  40.           $this->mo = new Mongo("mongodb://{$server}");8 ~5 S2 K6 K  O- I
  41.         }
    3 M" A# a1 t/ S& W! ]8 U
  42.       } else {/ r/ u- W! G9 J6 j
  43.         $this->mo = new Mongo();% ?2 @6 ~. w6 z
  44.       }
    ! T! h7 x* G9 N1 c0 i# }
  45.       return $this->mo;
    0 o8 s/ k4 Q+ `* ]" W- A. C% G
  46.     }
    8 d4 K+ ~9 M2 ~% [, p+ G
  47.   }
    2 S; h, ]$ w! g2 i/ b: a, O
  48.   /**6 a/ b% \) z$ a7 y* Y  r" x
  49.    * 查询表中所有数据
    . d8 [& u3 _- G2 H$ E. o1 j$ S
  50.    * @param $table# i) C* n0 l1 x6 r" a. i" U
  51.    * @param array $where
    7 _1 t0 w, `! ^& m- \; T( E
  52.    * @param array $sort! r3 ]. }( z  f' }
  53.    * @param string $limit* K& }. S4 R8 n6 O; V" L, {
  54.    * @param string $skip
    & n' Z/ C, V4 z& e* ~
  55.    * @return array|int
    $ N/ J5 {" v0 r2 ?0 B
  56.    */$ ^9 j7 @. W1 r' y
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ; c% l! D8 ^  m$ |
  58.     if (!empty($where)) {% E4 U  }  Q# w( h# z- C
  59.       $data = $this->database->$table->find($where);
    + O" \3 V  E* A5 o, m) T
  60.     } else {
    ( w4 A' |- q% q+ w3 W8 P
  61.       $data = $this->database->$table->find();
    ! e  t8 `2 l3 r/ e
  62.     }
    1 ]  R' t- S6 p) t2 q
  63.     if (!empty($sort)) {
    6 s5 j. Q# ^. l7 w: R) c% i7 r
  64.       $data = $data->sort($sort);
    9 m% R$ N0 c' u# P7 }+ O
  65.     }
    ' m5 h( c$ @  U2 t# G
  66.     if (!empty($limit)) {
    1 o, G% u9 Y) Z4 s# v
  67.       $data = $data->limit($limit);9 Y" e' {7 ?' Q: |" g7 M& b) i, F
  68.     }$ C5 r* C7 I% ~. s9 {
  69.     if (!empty($skip)) {% ~* t! w3 F$ x* n) I0 E4 V
  70.       $data = $data->skip($skip);/ p5 b8 ?6 Q+ C% a6 I
  71.     }" _* a6 P, J$ k' f4 r
  72.     $newData = array();
    ! t( I. h4 y# `& c! e$ }
  73.     while ($data->hasNext()) {
    6 U, J# u8 _- U' D% v. z
  74.       $newData[] = $data->getNext();
    # o0 T7 J; v. h' E2 J, w+ B
  75.     }& G1 j2 g% r# k6 A5 p
  76.     if (count($newData) == 0) {
    8 d" x# B2 n% D5 t) e
  77.       return 0;
    0 t; X# x1 A; E1 b
  78.     }+ b2 ?! E/ t7 m* ?( \0 W8 `$ I1 K& A: F
  79.     return $newData;
      v5 ]3 g9 L6 r+ j1 j1 N0 @
  80.   }
    - s; @) q' e; N8 P
  81.   /**
    . l- r! L$ T4 ^& i2 ^7 x% v& S, L) Z+ C# `
  82.    * 查询指定一条数据% f) d! u8 y0 C  E/ ?/ j: w
  83.    * @param $table
    ( Y  c7 E3 e) D3 E: W) h8 v
  84.    * @param array $where
    3 ?1 ]0 u- ]: `# m" u
  85.    * @return int
    , c; {+ ^- b9 n$ G6 r/ Y- z
  86.    */, u; y& T/ [/ L# w9 q, y
  87.   public function getOne($table, $where = array()) {
    3 t# e! U, {: ^; H  f  Z& V
  88.     if (!empty($where)) {, E0 h9 q1 d8 r, Y/ R
  89.       $data = $this->database->$table->findOne($where);
    8 A5 }0 y0 F- E! {
  90.     } else {4 P# V, h" D7 u1 u! G" `
  91.       $data = $this->database->$table->findOne();4 h8 z6 b& M' q+ \0 T
  92.     }/ @7 M4 m1 K, V5 T/ A( l8 C1 d
  93.     return $data;' v7 p  ~  |+ f$ q$ L* w
  94.   }$ [7 a1 @7 G* }  {- s, w& _3 ?4 ^
  95.   /**& P  d2 ^0 `# A5 \( S7 {( b. c
  96.    * 统计个数
    7 q7 j, O4 O$ J* i/ u, y
  97.    * @param $table- t) ~5 |) o& U8 I
  98.    * @param array $where
    , H( ]1 }7 L. y$ x5 R
  99.    * @return mixed! n- U# M4 \, b; {+ @+ g
  100.    */
    ( I% Y6 J' r. G0 `5 a
  101.   public function getCount($table, $where = array()) {* o, E& j$ U% G
  102.     if (!empty($where)) {
    7 {  L8 o- g1 T  a* `$ [& F% r) W. I
  103.       $data = $this->database->$table->find($where)->count();
    7 z* p; ~# t4 F- |/ [
  104.     } else {  M2 l" d, |. p' T8 G, X
  105.       $data = $this->database->$table->find()->count();/ c5 ^/ h" ~% \2 j9 P
  106.     }
    6 F8 x, g% ]3 |
  107.     return $data;6 ~3 r3 u! l$ S' O) p$ w
  108.   }
    / Q& [$ o3 j  @/ U* r" i
  109.   /**
    ! u9 R8 n7 |( u
  110.    * 直接执行mongo命令0 M% }7 u7 c, C8 H, I: ?! K
  111.    * @param $sql4 {0 Q6 ~+ Y" v
  112.    * @return array
      U1 c- J$ ]8 s
  113.    */
    4 `' {/ ~9 _. t1 H! y8 O0 S* v2 y
  114.   public function toExcute($sql) {
    3 ?4 _+ c: u6 b5 N& J
  115.     $result = $this->database->execute($sql);3 f  d! u9 Y  b% O8 m
  116.     return $result;
    ( L0 \8 r, f; ?$ J, [
  117.   }
    " |7 w: S! E1 P! o
  118.   /**
    , N$ g- [; n9 Z; U) p/ b
  119.    * 分组统计个数
    3 |2 f& w. Y: a5 Q6 u. n6 g
  120.    * @param $table! Z. |+ Q6 z% n; T1 T
  121.    * @param $where
    % d5 B- e( l/ _, D7 b: ~9 a% X% {
  122.    * @param $field: \( s, W/ q6 n5 H- G
  123.    */
    & Y$ C  g# z; [6 d/ b( e! h
  124.   public function groupCount($table, $where, $field) {% o, U" \" \% }3 L0 T
  125.     $cond = array(8 E/ E* `+ L- m. X( `1 t' m) o
  126.       array(, N4 ~4 R1 z/ Z+ G
  127.         '$match' => $where,: j2 X/ O, Z% G3 |0 J
  128.       ),$ l* w9 T/ u2 d6 l6 i7 f
  129.       array(
    : w6 p! {: y1 l, p5 x( {
  130.         '$group' => array(
    $ z  m1 O1 G' t) f+ |2 x4 m) L4 O
  131.           '_id' => '
    * o7 V% F' x3 U$ Q

  132.   ^% U1 _4 V" \% p/ x- }& Y9 t
  133. . $field,
    / I0 O/ o, \" ^( H
  134.           'count' => array('$sum' => 1),8 P+ S& y8 Z1 [! s6 `
  135.         ),0 d+ W. u8 P; a) z) {
  136.       ),
    8 m8 ]* T7 W6 n$ R  B, D! g
  137.       array(
    : T5 i# a7 h6 d0 m# ~
  138.         '$sort' => array("count" => -1),
    / g( I+ l/ V& A. C9 `. a( H/ u
  139.       ),5 W: f- R- L) r. Z) Z, D0 p
  140.     );; u9 w8 f" K2 J1 b/ J1 Y# M& ]
  141.     $this->database->$table->aggregate($cond);  z% W; Y5 g) l0 }! \7 ~
  142.   }6 \/ K3 ^$ E, B, |3 Z; w
  143.   /**- n' j' e; n+ A( T! V0 t
  144.    * 删除数据
    , L9 }0 |# V4 O7 y- l, }
  145.    * @param $table+ E0 l9 p( ]; J* o- o! r
  146.    * @param $where6 ^$ X- A0 j/ `5 u5 j
  147.    * @return array|bool5 V6 S; ^2 R+ [/ _7 ?; U9 M
  148.    */
    4 `  h- M. b( e; k. ]
  149.   public function toDelete($table, $where) {
    & b* p  L) L" Y5 G/ j3 ?  b) Z
  150.     $re = $this->database->$table->remove($where);& b: U4 H/ J' @. z( u( ]
  151.     return $re;3 x, R$ b( E  f
  152.   }
    # z4 c% M. q! H# L
  153.   /**
    5 z: l; Y) D, r& [- ]
  154.    * 插入数据! o, Q5 @, }0 `" z) @! i- ^: M
  155.    * @param $table
    ' N; S  X$ Z' Q) [
  156.    * @param $data* X1 d7 c- i  w: [9 O! {; Q
  157.    * @return array|bool
    " f7 I4 |1 a. A7 C/ C# P
  158.    */
    ! z, _' v; r/ M% ?
  159.   public function toInsert($table, $data) {/ y) O, [% v" ~# A5 J7 ^+ Q
  160.     $re = $this->database->$table->insert($data);0 u1 l5 S& Z/ x7 X
  161.     return $re;# Y. \% c8 X) W! r7 I: P
  162.   }
    / G$ x! f/ x9 G0 c
  163.   /**, k4 a" d8 Z* f$ P7 R8 B3 S9 H
  164.    * 更新数据
    ; C7 m4 B1 z+ [+ H
  165.    * @param $table$ f0 F& j* c/ D, a( o# h
  166.    * @param $where( _" v6 q' C6 Y7 |2 n) s
  167.    * @param $data
    1 N( k6 p# x2 J
  168.    * @return bool
    7 Q$ ~+ ]" T7 u0 W
  169.    */
    6 {' V" L% C! ~! c9 u$ _6 x4 u8 {- L
  170.   public function toUpdate($table, $where, $data) {. G% @# Y1 ^! \( {& J0 I8 a
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    7 }6 U' s+ o' L8 w$ j4 B( I
  172.     return $re;  M  r5 z9 ^5 D
  173.   }7 E- _& [* g8 G5 Q! V$ E1 ?
  174.   /**
    . W, ]6 ?) _% Z) q
  175.    * 获取唯一数据" x" {1 X$ ]$ A; F( g8 g$ e
  176.    * @param $table
    1 e. @4 b+ S; X# b4 e: V6 ^- Z
  177.    * @param $key
    * G5 J9 i3 s& z9 _  a
  178.    * @return array5 b4 w! `" S& A' G  F
  179.    */
    1 Z8 b( W8 V5 m! u; o
  180.   public function distinctData($table, $key, $query = array()) {
    ! {: o& _) R5 Z4 ?' u5 n
  181.     if (!empty($query)) {
    5 ^8 R4 p& Z( x+ z  q5 p: K
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    4 j0 x/ ^, p" [% w. }/ B
  183.     } else {% Z) `" k0 S0 Z4 c+ l1 Q1 O
  184.       $where = array('distinct' => $table, 'key' => $key);
    # b. e; N& m' j' ]
  185.     }
    2 T$ k. B+ h( L  u! n
  186.     $data = $this->database->command($where);+ b  l5 G7 K6 A0 Y) f5 p
  187.     return $data['values'];
    4 m! O) {3 Q5 ~( u5 E& I& F$ B1 e& L: V
  188.   }
    * _) c/ j; _5 h+ H
  189. }2 l8 Y6 ~* n9 k# n  C& L
  190. ?>
复制代码

* v3 O1 d/ v6 Q! c) ^* r7 a) z% l
+ x: X' e7 Z- L; S& D' X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:41 , Processed in 0.057039 second(s), 19 queries .

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