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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
7 p; L6 }1 f& O; {. y模式自由。
% G0 \) R( m5 Z) O' F( \/ b支持动态查询。
* Z7 S; s( ?% b$ G支持完全索引,包含内部对象。8 D$ ^4 g; _+ B" i5 S# Z3 c( b
支持查询。  o+ m) @7 H( a8 q3 d# p' }# w, R
支持复制和故障恢复。
% J% R8 i+ g# |( p; w& B: E8 f使用高效的二进制数据存储,包括大型对象(如视频等)。3 J  t5 J9 a- @$ E
自动处理碎片,以支持云计算层次的扩展性1 {: _2 o& ~' ~0 S# J9 j- V
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。5 `# ?2 P5 p; E2 R) I" y2 I
文件存储格式为BSON(一种JSON的扩展)
* v/ Y, S- r, F- K: 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
    5 z( s$ S  O( [( I( d" h; P' {& H. c
  2. /**
    ! N$ P: J& M3 x
  3. * PHP操作mongodb数据库操作类1 M7 q; `+ R3 R( e9 E$ q
  4. */* V9 n- q' e9 Y- T1 z; h5 \
  5. class Database {) b7 C9 X* p6 B# \
  6.   protected $database  = '';
    ( A  N4 V9 M7 p; L
  7.   protected $mo;4 ?# S9 ?1 U' }/ l% g
  8.   /**; X" w+ K0 Z8 \( e3 W
  9.    * 构造方法# l4 `' p( E. ]- O, Q/ y7 C0 b8 U
  10.    */  H3 ]/ s& P# L, N$ K5 T
  11.   public function __construct() {5 x* z% L$ X, W* O, ]
  12.     $server = DBSERVER;0 P; i# }: [* C
  13.     $user = DBUSER;# Y  ?: q' [2 }. U. n
  14.     $password = DBPASS;" i$ F8 s( ]! {! n: G# V
  15.     $port = DBPORT;
    4 _/ G1 I' y  y* e
  16.     $database = DBNAME;$ g0 M2 `- e; ^  m" l" G/ x$ C# i
  17.     $mongo = $this->getInstance($server, $user, $password, $port);  H- x+ h, C6 w
  18.     $this->database = $mongo->$database;
      P: O0 |: F' V: d) }% z8 w
  19.   }$ L& z+ Z2 m: V: k
  20.   /**1 y' R0 i& O1 @* C% A+ `, y8 o9 a
  21.    * 数据库单例方法$ u8 t5 b+ m% p& n. Z# h7 W0 [% t- p
  22.    * @param $server
    8 x& _0 H7 \1 Z+ }1 t
  23.    * @param $user
    4 W7 c9 A8 u7 s: a) \
  24.    * @param $password1 r% S- ?1 R5 W( e( Z
  25.    * @param $port
    ; o. b; o4 g% s" x  N1 c
  26.    * @return Mongo
    - d  O. m8 P* B! g# M1 D: u
  27.    */" I) j) B0 w9 _
  28.   public function getInstance($server, $user, $password, $port) {3 {: Y" `' @( T  g7 O: P6 x* w6 x
  29.     if (isset($this->mo)) {
    3 N" y; G8 E0 @
  30.       return $this->mo;" i; J4 `2 S4 R3 N6 k  C9 u
  31.     } else {* U4 n$ ^& i, e# n
  32.       if (!empty($server)) {
    1 G/ E) E/ L$ t- ~
  33.         if (!empty($port)) {, C& y2 D0 }! S9 a7 l
  34.           if (!empty($user) && !empty($password)) {. ?3 X0 ^( ~. Q/ c% M: F
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    6 V) Z8 {$ x( `; x( V- ?
  36.           } else {4 Q6 D. w& S) c; s( s
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");0 p, Y% J2 F2 k5 S, y
  38.           }; k- |7 s7 _2 t# D- U$ a) F& V4 n
  39.         } else {
    3 v9 K2 ?* k* b3 C
  40.           $this->mo = new Mongo("mongodb://{$server}");# E' J. [0 V, q! Y4 {) C
  41.         }
    " R! \6 Z; u, b: P4 p# {, l4 M. B
  42.       } else {
    8 d  q! }: j* j, A0 O5 \5 I
  43.         $this->mo = new Mongo();& l2 `7 b1 m0 R% q0 w3 i4 f$ i
  44.       }
    : A0 P* ^9 O) s: c
  45.       return $this->mo;. r" F* R1 E! E1 T5 R" q) L0 o
  46.     }
    ) b% n; @$ [1 Z3 t/ g6 U5 R7 ]
  47.   }
    # d* O, [, l6 x2 J
  48.   /**
    3 d$ I& P. F7 e3 @
  49.    * 查询表中所有数据
    4 a* }3 e& w  ]+ y  T3 p8 J
  50.    * @param $table
    * f+ [! o/ H: g0 C
  51.    * @param array $where
    " f/ B2 F+ H% E* f+ q" J$ ~
  52.    * @param array $sort: H3 b: V' J: i& e" W( ]1 F
  53.    * @param string $limit
    1 a! B4 e3 f. ]; v  c. {
  54.    * @param string $skip4 g8 q( V9 P8 P6 L: o- u1 ^
  55.    * @return array|int, u" G: q1 D: d# o, M
  56.    */+ @# h* C) b- p/ M) K. \
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ; h5 \/ \/ ^3 f
  58.     if (!empty($where)) {
    0 q4 X) I) ?- o& J- t
  59.       $data = $this->database->$table->find($where);
    ' \% t7 Y/ L6 W& O4 R$ v
  60.     } else {
    6 |" k& x; ?0 ?
  61.       $data = $this->database->$table->find();. _( u! C. k" v( Y5 m
  62.     }1 S2 Q9 O: n$ {' U
  63.     if (!empty($sort)) {
    6 G" ~* W0 H. d# d, `, Q1 e
  64.       $data = $data->sort($sort);
    . k7 @$ I1 b. x# u
  65.     }  U) M7 \0 h% Q  d3 }) `$ `
  66.     if (!empty($limit)) {
    " l9 O8 k& z! o
  67.       $data = $data->limit($limit);
    9 P; R* Z6 O! ]7 X6 L5 C9 G
  68.     }0 V, j: ~- `9 D% F, `
  69.     if (!empty($skip)) {
    ) {+ L; q$ \/ v; F1 p; L% E2 M7 k
  70.       $data = $data->skip($skip);
    ) c8 J" Q- f1 W6 Z( l; p( f* O
  71.     }8 R+ W4 z+ e+ P# @: ]/ l" s# d
  72.     $newData = array();. ?- r# u+ C. h/ k+ X
  73.     while ($data->hasNext()) {1 g2 f; E% B' W- d- B& ?: O
  74.       $newData[] = $data->getNext();
    6 ~" R$ n+ i! m, U' \7 m
  75.     }
    ! `9 c  @2 ]2 f( V, n6 t+ W9 I6 j
  76.     if (count($newData) == 0) {
    ; C# ?# B/ N& l* V( x2 G5 f2 d& ~  r" b( U
  77.       return 0;
    - k4 r  `6 d0 r  l- g0 m
  78.     }
    4 u4 y! y0 j9 R
  79.     return $newData;# f) H' E- s1 k- e& d/ F
  80.   }% j6 [6 M) L/ Z* m  \, c
  81.   /**
    . ]$ B- A* }  |# R5 K& ?: {
  82.    * 查询指定一条数据
    * _2 D6 I6 D4 v- J, s& ]/ `
  83.    * @param $table  b% m; l+ r1 J2 \8 G
  84.    * @param array $where# Q; q1 S  I. ^' f3 b
  85.    * @return int
    4 v/ Q* I" q& D# X. d9 z6 x
  86.    */4 p! O3 U+ S/ }: y& k6 i% T
  87.   public function getOne($table, $where = array()) {
    * n( s( E- h0 d
  88.     if (!empty($where)) {+ F; Y$ q! _/ G: G
  89.       $data = $this->database->$table->findOne($where);
    7 X% Q: F$ w5 I8 M6 i. R
  90.     } else {
    ! q4 _% G0 a  b! G' Z5 q6 F
  91.       $data = $this->database->$table->findOne();- S. @/ @* l- @, y& E
  92.     }/ h7 F: \; y* g5 t
  93.     return $data;
    0 ^0 g6 X% w8 I9 Y+ \1 U* j# M
  94.   }
    * x0 S: k. z" r3 q) s' r7 |
  95.   /**
    8 f  t) O7 B& M& S: q6 I* ]1 q0 u
  96.    * 统计个数1 {( Q# h3 I2 h
  97.    * @param $table( w; R, G3 n) S7 {
  98.    * @param array $where& B; g2 `( d  X8 B8 m
  99.    * @return mixed
    ) r( I0 W1 \3 o, R
  100.    */
    , X0 F, \8 d% o" `0 `. w  t- {, i) U" V
  101.   public function getCount($table, $where = array()) {
    , p# L! n. p4 \7 k4 ?; b- n0 W
  102.     if (!empty($where)) {1 e, c, x/ n: D' M! l3 M6 b+ U; p
  103.       $data = $this->database->$table->find($where)->count();  H8 M' J, v  H0 P- P$ P
  104.     } else {$ @% T" p; |6 c$ ^* n& K6 c) [
  105.       $data = $this->database->$table->find()->count();+ O  ~0 \+ t+ I( E8 T
  106.     }
    # J7 `) p2 A+ O/ Y7 t
  107.     return $data;& S; ]( i  C( u4 L9 Y
  108.   }+ Y1 c% n6 O7 C* E
  109.   /**' g# D. s, K+ z& `7 r
  110.    * 直接执行mongo命令' T: x- L3 J5 B: T) y4 ^4 k
  111.    * @param $sql9 U+ ]1 ^$ h9 R' T) H+ u' G5 C
  112.    * @return array
      j4 o  d0 A/ S2 h* l0 a. S2 S2 R
  113.    */
    8 i8 Q3 x+ S! `. q
  114.   public function toExcute($sql) {
    ; n* L! s) t) t& C+ S% J
  115.     $result = $this->database->execute($sql);
      q) W! h# M# e; m$ H* o2 @
  116.     return $result;
    ' c( \; S$ D5 m, G4 w
  117.   }/ ?! Z) E1 t, |0 ~
  118.   /**
    8 i, t. L$ Q9 O0 A
  119.    * 分组统计个数
    + D  k0 ]& v7 _( G, R" \
  120.    * @param $table" z% Y; c) l' u& ?+ u! D
  121.    * @param $where$ i- o" q/ b( T) [9 I
  122.    * @param $field7 d4 r* m& s8 T: s- e! h
  123.    */+ I  [* v# e2 s) U/ Z4 {
  124.   public function groupCount($table, $where, $field) {1 Q6 W1 k7 C1 t7 `  D5 Q
  125.     $cond = array(
    ) B; g3 G# Q( Z0 }5 `
  126.       array(
    + V1 Z% p% j6 d6 N
  127.         '$match' => $where,: C8 V9 H- Z; e% X1 \. ^  F; i
  128.       ),
    + e9 N- C" P8 F4 ^9 ^: y
  129.       array(
    / k; z5 p$ f9 ]* ]9 M3 v
  130.         '$group' => array(
    ; Z8 Y! \  g+ u2 ^4 N0 N
  131.           '_id' => '5 g4 L6 W& I2 T- r) z
  132. " U* V9 f+ n: r3 G( v, K  g. q
  133. . $field,
    * H6 e+ S1 |' |
  134.           'count' => array('$sum' => 1),: M6 H# F$ M6 ^  I  x- g6 j4 ~
  135.         ),) |* ~/ c3 {, s( o! D2 e
  136.       ),
    * K% J* G- n6 @5 S8 |4 h1 E
  137.       array(1 p. u3 I) D% n( }, W3 Y2 c0 \
  138.         '$sort' => array("count" => -1),, g" [  [3 h; m( y% i4 t! E
  139.       ),! M- I& ~( u0 ?  z, Q  u
  140.     );' }" l' P( s0 M3 I+ y  M/ Q1 z
  141.     $this->database->$table->aggregate($cond);+ b8 i+ x6 s, D5 _% S
  142.   }  @4 Z4 Y" I8 r8 W* g5 O& L1 V7 M. e
  143.   /**/ [6 _# O: x: F
  144.    * 删除数据
    $ L6 D2 Q. P! d; |
  145.    * @param $table& ~$ O, Z/ M/ t/ p
  146.    * @param $where
    ; H. m8 g& G/ ]0 d2 E+ W, ~
  147.    * @return array|bool3 ?* }# S# }4 q( T& V
  148.    */
    8 g% e3 E* N7 Z3 ~0 b8 G! E
  149.   public function toDelete($table, $where) {
    ' f; L0 i! q6 k: R# u9 r
  150.     $re = $this->database->$table->remove($where);. F! n0 ^4 I! u! ~' o' |  D
  151.     return $re;
    % Q6 |" @9 k) t- U2 b
  152.   }
    ! m) Q4 d* m) F% i
  153.   /**
      V1 `# ~2 x( W
  154.    * 插入数据/ e2 o5 z8 k% H! s( B! G
  155.    * @param $table# G! q! U: \5 X( I8 g5 `9 L3 Q
  156.    * @param $data7 O. M7 Y7 k7 F/ m& |
  157.    * @return array|bool
    4 d: K% R9 T. ~' ]% \$ r. s
  158.    */
    : ?. S4 J, f/ {  H
  159.   public function toInsert($table, $data) {
    - V+ Z. C  ^4 {6 I: {% Y+ q
  160.     $re = $this->database->$table->insert($data);. K  R. z& y: d: o8 V& h9 j
  161.     return $re;5 ]3 a) Y- L1 ~5 h0 Y" b: K6 B
  162.   }
    + \9 b7 j# G( X+ n3 |5 E9 A) b) }& H4 ]
  163.   /**
    % b+ M% ?1 G- |: S0 D9 H
  164.    * 更新数据6 S7 N; C9 g* |4 f$ [- F% }( e
  165.    * @param $table9 f" |% B; t0 O
  166.    * @param $where
    % C( S" y7 O7 u6 i
  167.    * @param $data
    0 {) E$ X* l7 K# B  K& `2 i
  168.    * @return bool
    & u+ S; d/ Z- @! c
  169.    */
    : i) m6 O7 H' |8 B$ i
  170.   public function toUpdate($table, $where, $data) {
    $ `4 x1 W6 X, h* L5 b) J
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ! }/ n. y: k: [& y
  172.     return $re;; E( [7 `, U. r) D* `" T! Y
  173.   }
    : t: @$ R/ ^7 P8 V- N* C
  174.   /**
    1 B" ^1 ^  |( G7 t
  175.    * 获取唯一数据; z9 f7 h$ _6 p) P& o6 Z, \
  176.    * @param $table
    0 x' N4 O3 M, ]9 J( k* f8 j
  177.    * @param $key& \$ h( q8 ^6 n
  178.    * @return array
    5 f- k2 q  P1 E. ]- K! v
  179.    */% a% x1 R+ G8 X1 h2 }
  180.   public function distinctData($table, $key, $query = array()) {  H4 y' Y% V. [9 C& x
  181.     if (!empty($query)) {- v; n, z/ U+ X. \( `# T1 q4 [
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    0 ?. @, _3 n  P+ e1 _$ B
  183.     } else {% ~" V+ T, W5 \1 o& y% o. @1 H- H8 d
  184.       $where = array('distinct' => $table, 'key' => $key);
    & U) G' W+ `7 D9 a6 x' b- [- W
  185.     }' ?0 @  I! f* a+ h3 Y3 Y
  186.     $data = $this->database->command($where);- g2 {5 c3 l+ A) @4 O6 P
  187.     return $data['values'];
    , S( K+ T- w1 Y: s" x* D
  188.   }
    ' ?! n0 J* i' N& f2 X) O5 u
  189. }
    * O2 G8 @0 T& L7 t- s
  190. ?>
复制代码
+ f& f# M; j* M% L6 s

  G8 F: ^. S. |& Y6 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 02:03 , Processed in 0.110388 second(s), 19 queries .

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