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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
( u: \0 ^4 p8 S7 g' N, w模式自由。
% ^% w( S# v2 \支持动态查询。
& r& Z* M; K% a5 H支持完全索引,包含内部对象。
  `. T3 `3 h- B- Y支持查询。
2 m. J* B0 b, L. C) N. y支持复制和故障恢复。
$ f4 l: f6 b9 U% `& i' |8 P使用高效的二进制数据存储,包括大型对象(如视频等)。
4 B- X6 T- N8 J自动处理碎片,以支持云计算层次的扩展性
. z* g& ]2 P; b: @0 F支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。# y/ N  f' |2 h9 d- S8 L! i  i+ F
文件存储格式为BSON(一种JSON的扩展)5 Y3 \4 c5 D( \/ c; K4 g! c
可通过网络访问

所谓“面向集合”(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. <?php5 L( K$ L- Q7 R% _4 h4 W  l1 b) L
  2. /**
    3 y- A0 Y) d5 c1 K$ {& A' Z
  3. * PHP操作mongodb数据库操作类
    & W; z2 C; r( {: \2 q- @! ^1 G
  4. */
    0 S1 C! [' v2 m7 o8 y: q7 ^  m
  5. class Database {
    2 r( _9 J3 d; W& F, [" u/ f
  6.   protected $database  = '';
    ; t3 M- I  B1 n, e" h+ w2 f7 H
  7.   protected $mo;
    " Z6 b" Q$ s1 N) A% b+ c
  8.   /**( J* o' p+ `0 z- \1 r, `
  9.    * 构造方法' o5 F6 T, u* b0 e9 v
  10.    */4 ?1 p7 V7 d( t6 v
  11.   public function __construct() {
    7 H* u$ l8 @# {1 C, {5 {7 V
  12.     $server = DBSERVER;
    ; z3 r" b( t. e/ F0 [7 C+ ?
  13.     $user = DBUSER;- ~, a/ ~+ E" ?" k. Q
  14.     $password = DBPASS;8 B; ~6 z, e; n& {$ I+ j$ A
  15.     $port = DBPORT;
    + o! P# p  {3 A2 t) ^' n
  16.     $database = DBNAME;
    ! v- f9 M6 Q8 P( H) b
  17.     $mongo = $this->getInstance($server, $user, $password, $port);" d' P% v  O. |9 i2 M% y
  18.     $this->database = $mongo->$database;
      b. s. _9 {2 h4 y# m& |
  19.   }
    9 w- I/ d6 [+ \
  20.   /**0 ~! l5 Y, `2 D. J6 j. s: S- }: l
  21.    * 数据库单例方法
    ; I% z' p, u4 d' I3 D$ a3 e) B
  22.    * @param $server5 J/ q* A  x# U- M6 J. p" s
  23.    * @param $user0 @8 H. T' B# o6 H" m) z6 h/ M3 g
  24.    * @param $password  c, Y- Z& r- Z+ k
  25.    * @param $port1 M5 k- \8 a7 e7 n
  26.    * @return Mongo0 K+ K- h4 x% h# l  p3 \  B. k
  27.    *// f% m( G$ c# s; F; u
  28.   public function getInstance($server, $user, $password, $port) {8 J/ t  n( D2 e, m5 O) a, I
  29.     if (isset($this->mo)) {
    ; v2 B3 u& c: l; ^, r; x6 h2 u
  30.       return $this->mo;. {/ A4 _0 R/ Z7 N( [
  31.     } else {* }  d' Y& t1 r; l
  32.       if (!empty($server)) {
    $ b! g5 f6 D  u' S6 R! G
  33.         if (!empty($port)) {/ x7 g6 ~( S* Q* Q6 G) z$ C
  34.           if (!empty($user) && !empty($password)) {3 p8 f7 K& d' \$ ]5 `+ J/ S
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");3 s8 b: ^) j. F6 t/ y
  36.           } else {
    ; {" z. i5 w: A2 u8 A
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    % X9 E$ X! H' V$ ]3 ?$ {/ E" i
  38.           }: Z8 X& F6 G( s
  39.         } else {* k) M' [6 r$ j4 C% v/ n
  40.           $this->mo = new Mongo("mongodb://{$server}");
    3 J* N" n7 _4 w8 K* M9 f
  41.         }" V# I1 K0 `. r( |4 p; ~- u# @
  42.       } else {1 Z- H" K4 ^  S8 N2 X: |
  43.         $this->mo = new Mongo();8 I! f" F, Q0 ~
  44.       }
    : p' `" U, p. i! f$ q- J
  45.       return $this->mo;
    8 T% h7 Y% K3 T3 ]( g% E1 F9 {, S1 @
  46.     }% k& u- U3 p  S: u9 l/ P$ w, S+ ?1 ]
  47.   }: W' f+ ]: d3 ~
  48.   /**
    + Q" @. U0 N5 ]* S/ s: Z. i- w
  49.    * 查询表中所有数据9 K7 V' _$ X$ R, a, L, V. B; Y* C0 \+ `
  50.    * @param $table
    8 {  U3 V5 t, K/ S3 D+ P
  51.    * @param array $where6 I7 P; t- a6 U9 J& Z
  52.    * @param array $sort
    : K, n- H. x& |% N# v  P0 R
  53.    * @param string $limit: h- V2 D. F( _! d' L" x8 c& K" K
  54.    * @param string $skip
    5 v2 s# W7 d5 z! ~* g! B
  55.    * @return array|int$ F2 N& `) c$ `$ f/ ?3 C( e4 U
  56.    */
    9 r6 g! L1 ^- _% |+ M
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    8 o! z" N+ b9 u% X/ |
  58.     if (!empty($where)) {+ l! c4 M  k' a' W7 B6 l6 `
  59.       $data = $this->database->$table->find($where);
    . G$ E( P" M. C6 R* R& w* H
  60.     } else {  }  ?, f. R$ B+ {
  61.       $data = $this->database->$table->find();
    ( {* P" E% E7 y$ n# n
  62.     }
    ! d1 i8 z; K$ u* w. h, |
  63.     if (!empty($sort)) {+ K) V8 @7 Z9 N, Z+ u
  64.       $data = $data->sort($sort);" n4 \9 }# }4 L( g) H' ~
  65.     }
    + K* U9 i8 {5 c  X
  66.     if (!empty($limit)) {" u2 c/ [& z' u) M
  67.       $data = $data->limit($limit);
    : M9 `8 P$ [% h0 u. |. _  A2 }
  68.     }' y) s! N6 l8 I/ J7 ^
  69.     if (!empty($skip)) {- x6 z" t: Z! f
  70.       $data = $data->skip($skip);4 y7 b' `8 U& |
  71.     }
    5 u& ^6 [' I+ h! Q# k, U
  72.     $newData = array();
    , M; K' c7 I0 Q, i9 l! j
  73.     while ($data->hasNext()) {
    8 x4 u9 ]2 r: {/ _" U- R
  74.       $newData[] = $data->getNext();$ g! W( }' K3 j: L6 N" M. U
  75.     }" b" w6 m% r% F# D, Q
  76.     if (count($newData) == 0) {8 ~3 |  V+ o: \4 t2 `
  77.       return 0;( T& Z% \% }* D, m2 g
  78.     }: ]: }# z; o6 ?! R( M
  79.     return $newData;
    " p3 C. ^" Y+ @
  80.   }
    , T# m9 e& A$ S9 O
  81.   /**+ `9 [2 x! b7 F* M
  82.    * 查询指定一条数据
    1 b, n8 g+ `' r
  83.    * @param $table
    5 d  ]. N* E( s' ^. D9 L
  84.    * @param array $where
    6 s! u  _. d/ n; q1 ]
  85.    * @return int
    7 g' v: j1 x# ?% X' c0 F# }
  86.    */& t$ U6 C7 D+ \, g+ a
  87.   public function getOne($table, $where = array()) {9 {' I3 y; B+ p& N) l
  88.     if (!empty($where)) {
    2 Y  k9 a& d) K7 G
  89.       $data = $this->database->$table->findOne($where);
    " t1 U+ l' n' A( ~$ T
  90.     } else {
    6 i6 F0 h$ m$ {% [
  91.       $data = $this->database->$table->findOne();
    ! M! m4 J6 x2 M5 I2 z3 A. |
  92.     }
    7 N. @0 K4 @; s, r( X' f3 d
  93.     return $data;
    8 ]  D! [, d2 E  D4 B
  94.   }
    3 Z8 V7 @# ~8 @8 L7 ], o
  95.   /**
    5 e" Z8 B2 K) \6 c& X
  96.    * 统计个数
    ! b, _$ \) ?2 I5 u+ J5 ~- V
  97.    * @param $table
    3 w2 @/ n% y1 d- [3 r) S
  98.    * @param array $where
    , o, P. U: [- U& f: u
  99.    * @return mixed! x8 x) P! d: O) x
  100.    */
    ) A2 L7 w$ m' o; J3 [% H
  101.   public function getCount($table, $where = array()) {4 ?$ _; V, W& B$ L
  102.     if (!empty($where)) {4 i8 v2 X' p* ]* Y
  103.       $data = $this->database->$table->find($where)->count();9 A9 p. B. T! |8 T- D. `
  104.     } else {
    . R1 J( i+ s' `$ E* V
  105.       $data = $this->database->$table->find()->count();
    + t; X8 @, m/ n/ [* t. L
  106.     }& U  [8 e, ?. c8 z' S6 `
  107.     return $data;) N6 Z- O& O; n3 `# a
  108.   }
    " b4 c/ R% @  K" m1 A5 ~) c! ^
  109.   /**1 p2 V( N3 o8 z/ ~
  110.    * 直接执行mongo命令
    # F7 y. \* k2 C9 J
  111.    * @param $sql. q& x- `+ s; n
  112.    * @return array% w( P/ P) t. `( L: @5 X9 v
  113.    */
    % p- o7 x* K7 _/ p. @3 i
  114.   public function toExcute($sql) {
    ( o& M( z; s5 j1 M; |
  115.     $result = $this->database->execute($sql);7 H4 b* J* r# s* h+ B
  116.     return $result;# O3 W( F5 G5 L
  117.   }$ z% o1 @" j. s# Z9 u) v' [. v
  118.   /**3 |' G6 l( ?' M- R& P; m  E  Q
  119.    * 分组统计个数
      R6 B$ @# A1 _2 Z: D
  120.    * @param $table5 q) ^+ ]' N* W2 \% w
  121.    * @param $where
    " H9 o: I7 C1 W2 x5 k5 x
  122.    * @param $field  J% i/ k5 I* u
  123.    */
    ; @& E8 A2 `0 X& r+ @. s; L% T
  124.   public function groupCount($table, $where, $field) {6 G; k( {8 ~2 k
  125.     $cond = array(& I3 D- V1 S8 M% j( ]
  126.       array(
    1 r! J8 B6 h; ]: Z6 R5 @0 b
  127.         '$match' => $where,
    1 G- }) v! ]* d# j( v9 G2 {
  128.       ),% j9 L1 x8 T7 {& \9 F
  129.       array(& |: y  `# T1 d7 a8 C7 p
  130.         '$group' => array(# R) J# ^. Y, w( t0 H% a7 t* |
  131.           '_id' => '8 q" {& v: s3 P) m4 r

  132.   `9 F7 r: o" ]3 {( Y+ M3 e0 h
  133. . $field,
    3 N: T) N# r4 |9 I
  134.           'count' => array('$sum' => 1),7 `; j4 p2 K) k% ]8 w
  135.         ),, Z5 y2 I8 E, F# x+ N
  136.       ),
    6 a9 v. `8 e3 w* j; o. \# [9 m
  137.       array($ a- L6 a4 G- i/ y
  138.         '$sort' => array("count" => -1),
    6 j5 X$ D& O4 |9 ]! c1 x3 m# _
  139.       ),: I+ U7 D2 ?# _7 Q
  140.     );
    ' V, Z/ i2 J. z
  141.     $this->database->$table->aggregate($cond);. a( |" h  x6 G
  142.   }
    & f# d/ X" p# }9 n
  143.   /**/ d" x6 s; r4 E# t% p7 W
  144.    * 删除数据- {  P  Y4 Y' I' n
  145.    * @param $table
    1 x: p" P5 }1 `# n1 J
  146.    * @param $where
    3 w% e% q) K- G4 E: o
  147.    * @return array|bool
    5 Y7 k* i6 P, r$ @) s% F/ z
  148.    */
    4 d/ {! t0 d. j. w4 L+ z
  149.   public function toDelete($table, $where) {
    ; t0 q3 Z3 h6 b2 b7 y" |8 c8 I" C
  150.     $re = $this->database->$table->remove($where);& p9 s5 u( P( m
  151.     return $re;& w5 G, g) \  Q4 H6 B. a& w
  152.   }/ d: O$ G3 y3 k0 P! |
  153.   /**
    , ~9 G! y- Y; l# Q: E8 o3 E) v
  154.    * 插入数据+ s1 F0 I# K5 z; ~
  155.    * @param $table( f5 `: ~( }$ B
  156.    * @param $data
    % g* s# i* P1 E' x, S+ G) ]& A
  157.    * @return array|bool
    * g% h8 |( _( R  e1 W# R7 Y
  158.    */) K( C& l7 E# y! p5 M6 N" E" c
  159.   public function toInsert($table, $data) {
    9 f, ^5 n- ~8 B
  160.     $re = $this->database->$table->insert($data);
    ; x; a: o+ L) B
  161.     return $re;5 n- W! p  H& t. o" b
  162.   }! ^2 _1 [* Z; ?5 h- Z' V, h3 u. x8 Q) F
  163.   /**6 D% I* C% m. H" v6 {# I8 W
  164.    * 更新数据
    * x" u8 v0 r# t' B
  165.    * @param $table
    ; z8 m' R0 C5 c6 k* }9 B
  166.    * @param $where
    % [5 }( Y0 l% j% ~, s
  167.    * @param $data7 L. Y8 K, T/ h- w7 E! k; N/ G
  168.    * @return bool
    # O; r6 P" y, j" L0 i
  169.    */
    / `' G2 j! D/ j2 ~& `
  170.   public function toUpdate($table, $where, $data) {
    " W" m6 U) w6 A7 U& Y+ ^
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ( m3 N& q5 F; h" d, h5 \
  172.     return $re;8 h. r" H, Y" D, j2 Q  E$ u
  173.   }
    + y! c( i. D$ T9 h7 E
  174.   /**. G4 g. G/ m/ Y: n, y! V4 U
  175.    * 获取唯一数据
    - C7 R( f2 ~  x  U3 v+ g
  176.    * @param $table3 }. ^* e2 |: S( M0 Q; ]
  177.    * @param $key
    / Q+ v9 {" V: \6 J
  178.    * @return array
    9 M& O; z5 R# P5 k4 z9 E6 P( O0 f
  179.    */
    6 n- g& `: n  L) G; }0 d
  180.   public function distinctData($table, $key, $query = array()) {
    9 v% k. {# x% ]3 |- H3 W
  181.     if (!empty($query)) {6 C% ?4 g6 f: a) V6 \
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);; x& L; ]- n2 y9 `! n
  183.     } else {6 |+ X+ j) u9 t0 w
  184.       $where = array('distinct' => $table, 'key' => $key);
    5 n/ @# L; ?: F8 b# r) y
  185.     }
    8 {2 }+ b% M9 L
  186.     $data = $this->database->command($where);# [; F' d3 S# A
  187.     return $data['values'];8 U$ E: S7 j: E. D4 M* q  n/ L
  188.   }+ y# i. G1 x2 l9 m2 M
  189. }
    ' T; u/ g7 [& h' y2 ^1 _5 M5 I1 m
  190. ?>
复制代码

& a, }0 p3 B5 p; r+ E( Z  p  P  q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:41 , Processed in 0.056648 second(s), 19 queries .

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