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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
  Z9 h5 k3 m( ]8 z5 O' G模式自由。- W; y" f5 z: ?3 x. v) V
支持动态查询。0 V. _. k( H4 w
支持完全索引,包含内部对象。
# s) x# r- U3 H4 L: I) J! N+ f支持查询。
0 a+ K1 W. s7 |+ c( ~; f/ t支持复制和故障恢复。
7 e' D# H$ o5 X. G9 L& z使用高效的二进制数据存储,包括大型对象(如视频等)。6 j+ Q, r2 O  \  a" D
自动处理碎片,以支持云计算层次的扩展性
9 Q. V# e* b/ V, }% d支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。* W$ r- j( C* Y
文件存储格式为BSON(一种JSON的扩展)7 Y- Y2 p% w1 a
可通过网络访问

所谓“面向集合”(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. <?php1 N. k: i& a9 t# D/ Y* a% M
  2. /**
    : C5 {  y  z: S0 p+ W
  3. * PHP操作mongodb数据库操作类
    9 G8 P: p9 c: y1 O/ Y$ X
  4. */0 k% _  X* V8 q
  5. class Database {( ?( [8 P1 d" k' R, ?
  6.   protected $database  = '';1 }+ V7 \5 p/ I3 z+ c* W2 u* |
  7.   protected $mo;+ L" ?* x5 ]3 Q; i! C
  8.   /**
    ) t6 P1 @/ u- L- T5 y
  9.    * 构造方法
    4 j. ~, X) z8 r9 h* w& P
  10.    */
    / \1 D% C* s2 L( u* |6 ~
  11.   public function __construct() {
      B7 N/ S0 e" V9 v# s0 x
  12.     $server = DBSERVER;
    5 J' y# n! e; E% |- _' x
  13.     $user = DBUSER;; H, J* w( b* R  |& z. e
  14.     $password = DBPASS;
    9 o. Z. L/ j0 h0 x
  15.     $port = DBPORT;
    ( N9 p* A# E3 N, n6 r1 C
  16.     $database = DBNAME;
    - d. x' o! j$ c2 z8 \; A, w. C8 H
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    6 @/ t" \* E6 K
  18.     $this->database = $mongo->$database;3 b' u0 k: z1 j/ G. E0 W- K: a  b
  19.   }
    " V4 ~* Y4 \$ m7 P* L
  20.   /**
    # Z7 m5 G% Q' o- [
  21.    * 数据库单例方法5 {8 r% k& K* R0 Q
  22.    * @param $server
    : R" }( i# x4 ?% ^
  23.    * @param $user7 V* V1 [5 {4 {- k
  24.    * @param $password  z3 T+ l; d4 h" Q
  25.    * @param $port# B5 L: U, v$ G5 Y( F; [# e, Q3 J5 d
  26.    * @return Mongo
    + x4 ]# K2 s6 @' m' e  g
  27.    */! G4 E% P" X. F4 ]3 u& i5 \
  28.   public function getInstance($server, $user, $password, $port) {, O1 B& Z2 r+ ~4 H9 c
  29.     if (isset($this->mo)) {
    5 F& B8 V' D( s6 b$ G- i. ?
  30.       return $this->mo;
    6 v* O% S% y4 v9 \' W! G
  31.     } else {" F/ ^% E  J; o3 o5 J0 ]
  32.       if (!empty($server)) {
    " _: ]% s2 G! I+ [, N0 ^. P
  33.         if (!empty($port)) {( [8 ~# K; {4 ?" I) ?4 f6 m! o
  34.           if (!empty($user) && !empty($password)) {" M: j9 i  [  k7 H, K% s! y' D: F
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");$ u9 W$ ^! |7 Q: |( K  B% N6 q
  36.           } else {
    4 y3 C: v3 h: v% z& d0 v
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    9 A% Y4 E- R& i; n  N0 ]1 y
  38.           }/ k2 V% ]0 [1 n$ V+ L' s
  39.         } else {3 a0 b0 ?+ K) [6 Q
  40.           $this->mo = new Mongo("mongodb://{$server}");3 Z/ c( ?* R2 @& y' p- e- O$ p4 o
  41.         }
    " w. i8 a% m6 S+ {- w
  42.       } else {, @& U. v# i* x/ i
  43.         $this->mo = new Mongo();8 g# d- \" C; j; P5 W% c, z0 R" d: n
  44.       }
    ' E' E! i8 L0 C* e
  45.       return $this->mo;
    ! h% u3 @% V) X6 V: l  s
  46.     }4 B: R! n! r& A+ z
  47.   }( I6 U& `- U% B! T3 l! q& f
  48.   /**2 |( \7 q. K2 }% N1 ~' x: H& h! }
  49.    * 查询表中所有数据! I) T" C+ ?" G/ ^6 o% D5 G' B
  50.    * @param $table. ^6 ^. x! m+ a" h1 d
  51.    * @param array $where1 S$ |7 y- N  }% l  U
  52.    * @param array $sort. F. b/ G7 t# M! I
  53.    * @param string $limit' r, p  t8 ]! @- D7 q, \' }5 s
  54.    * @param string $skip
    , q+ `& [) Y" X7 i1 ~/ F2 t: X
  55.    * @return array|int
    - m- D, x7 @4 w1 ?& v3 Y. A
  56.    */! |7 Z! i9 b2 j
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    3 L: _; `+ [2 X+ w: c/ ~) y; `! I
  58.     if (!empty($where)) {
    - |) S) F0 N# A# t. U, p; E& P$ ?3 s
  59.       $data = $this->database->$table->find($where);
    1 M; ~' C7 A, g+ x; @. h
  60.     } else {4 ]; m% `/ R' [
  61.       $data = $this->database->$table->find();
    6 x6 v* j% D" G$ l4 u9 _( N
  62.     }
    + ]5 ]- e7 _: G6 I9 @" q
  63.     if (!empty($sort)) {
    : q) h/ k) M3 ~/ f0 j7 h; v- s5 M8 ^
  64.       $data = $data->sort($sort);
    , h0 L+ G4 c: W* o- G
  65.     }
    2 _: f* @9 G$ b
  66.     if (!empty($limit)) {
      c/ j  _5 @( F% s. v8 ?; |
  67.       $data = $data->limit($limit);
    3 \' y, T6 G) Z4 W) H$ v3 Y  w
  68.     }
    3 _) P- Y6 q& ]0 L
  69.     if (!empty($skip)) {& o3 _; ?  ^, U. j
  70.       $data = $data->skip($skip);& i- m% F8 M: N$ `" A5 H
  71.     }* ~* z( ?- }- h/ w2 }4 |
  72.     $newData = array();, s; L0 m$ G6 a- u6 q0 ~* W3 y0 ?: P
  73.     while ($data->hasNext()) {! h; |) O6 _/ I
  74.       $newData[] = $data->getNext();
    ( ~5 l3 s2 K, M! B6 b
  75.     }
    ; M6 P8 Q0 W- U' K9 t
  76.     if (count($newData) == 0) {
    6 j! O% _- W2 q' Q
  77.       return 0;
    4 M% G( J3 g, x! A
  78.     }7 K* Q: D, W" V, b* o( }
  79.     return $newData;  z3 O5 s; V* J/ \; p
  80.   }
    ( N9 [( |, P/ V; j3 K7 m
  81.   /**
    & V2 c! n4 ^+ g& @: c
  82.    * 查询指定一条数据
    . a. }2 B$ v5 Y
  83.    * @param $table+ |% e) E8 q, I) _
  84.    * @param array $where
    * a' V5 ?) A( M
  85.    * @return int4 N0 T! H, A7 T4 z# u: Q; u( Z
  86.    */! z& x  W* }" y, w8 H
  87.   public function getOne($table, $where = array()) {! N* q! y8 G8 t3 V! S( B
  88.     if (!empty($where)) {
    6 g. e$ I" S% ?! t
  89.       $data = $this->database->$table->findOne($where);6 G2 c3 Y, \" }
  90.     } else {
    ; B0 b( C1 G: y- ^
  91.       $data = $this->database->$table->findOne();
    ! P+ n6 c" r3 l7 |6 m; Y9 n
  92.     }& A$ h$ @( A9 }& A/ W+ U
  93.     return $data;
    # H4 @0 t/ w6 `  h* F* d  O
  94.   }
    & N5 J  E  ^, [7 |3 S, C
  95.   /**3 R6 M. w* F; E
  96.    * 统计个数' [, A: L' n8 m. ~* y9 \, k( U; L
  97.    * @param $table1 ~+ ?: d2 R8 q/ v" C, ]* Q
  98.    * @param array $where( q$ m6 [( h  Q) e
  99.    * @return mixed
    4 P& C+ {/ U- W* d* y+ [4 b
  100.    */( r( k1 ]  S: N, f
  101.   public function getCount($table, $where = array()) {# {. ?; ]" k6 E  R; Z. f
  102.     if (!empty($where)) {# ~: ~& S- a/ _- S# O" S
  103.       $data = $this->database->$table->find($where)->count();# F9 ^2 ]. j8 O
  104.     } else {! O1 `  y, V, |# u4 d
  105.       $data = $this->database->$table->find()->count();5 v( d- e8 w# R# B) F) B! w
  106.     }
    9 r2 s8 v0 m; c: v3 ]1 H$ e
  107.     return $data;: C5 c& E) c6 ]" ?. Q9 w7 g% S0 Q* R6 P
  108.   }8 g; N+ ]2 P0 X# Z1 {  i; v4 W
  109.   /**: u" Z! D, I  ]  ^5 W2 Q
  110.    * 直接执行mongo命令
    7 H, m0 \* F5 Q4 ~& c
  111.    * @param $sql
    ) `$ S" h9 p4 L/ g4 J4 w
  112.    * @return array! L8 J1 k* S+ m3 Z& {3 p, i
  113.    */2 e: O* p! v- K4 U
  114.   public function toExcute($sql) {( n4 |. |3 q. [9 w
  115.     $result = $this->database->execute($sql);- E2 b+ t5 z8 V, x( ]
  116.     return $result;. h% h7 X, D( D  _$ ]  _& I0 I# \# N
  117.   }& u/ r3 C1 f; t
  118.   /**
    4 X( d2 c( S+ d, P/ D: k( r! C: I; Z
  119.    * 分组统计个数1 Z7 m3 f: b) ~7 L# c8 {" b# \
  120.    * @param $table
    * R; F" E7 x( B
  121.    * @param $where
    ! t/ {8 t! k) z9 y$ R* N, B' y
  122.    * @param $field
    6 q  q1 Q6 ]% Z9 z5 H
  123.    */
    ( |1 E4 q2 t4 [, s, q: i
  124.   public function groupCount($table, $where, $field) {% p& O& N, |* E' J1 Y7 e* x( X
  125.     $cond = array(6 f9 A; ^5 R; S1 L9 S7 W
  126.       array(5 o( T+ {8 ]3 K/ ~5 U& g, y
  127.         '$match' => $where,
    6 a! N- f1 J2 d# e5 C4 T
  128.       ),4 k1 Q. u! t( o
  129.       array(
    , g8 `' c( r; k2 M
  130.         '$group' => array(/ }8 i8 v# Z. G& `
  131.           '_id' => '
    " w  w0 Q7 [8 Q9 B8 y/ f- l4 q
  132. * _1 _- d% R. n/ L6 w
  133. . $field," o' U9 I6 I: _6 F6 {; `9 ^1 o+ L
  134.           'count' => array('$sum' => 1),
    * Q" a4 [6 \" |) l- a
  135.         ),+ B# j$ [; j) g3 p- v
  136.       ),0 X5 u/ K0 Y" L8 Z6 b- V
  137.       array(& ~" o' b7 A7 Z9 p
  138.         '$sort' => array("count" => -1),8 C, o" ?% i0 M8 G4 {
  139.       ),
    ( z7 \" y8 W2 S4 c. ~
  140.     );
    4 P' i+ |, @1 ^. y
  141.     $this->database->$table->aggregate($cond);3 j. e9 I1 j& `
  142.   }
    + B1 s2 ^" s8 H/ \
  143.   /**
    & h! j8 T$ m& h
  144.    * 删除数据
    + c: }% ?3 \$ k" e( P
  145.    * @param $table
    & Y+ J, r; r' ]4 X% C
  146.    * @param $where
    2 u$ \! r) ^0 k3 d
  147.    * @return array|bool
    # h9 _* I; W: f: m2 U& W
  148.    */
    4 }8 ]' L9 R& ~  |
  149.   public function toDelete($table, $where) {
    3 @& l, g. r4 c! c
  150.     $re = $this->database->$table->remove($where);1 v+ v: s5 r  I, w; T
  151.     return $re;
    4 W) Y1 V8 Y2 o- s6 U. n: u
  152.   }5 Z) h# k% L) ~. a  c6 w2 o& ~8 Q
  153.   /**
    ( W- w7 o* @8 \+ p; q& Q
  154.    * 插入数据7 h$ t( B( W% q( l
  155.    * @param $table
    9 j& I7 r$ `) ~0 |
  156.    * @param $data
    ) U% X) a: v' e
  157.    * @return array|bool: n4 V' }# ?5 v5 A# }
  158.    */* }& K1 s% A7 D- E6 o3 r- b
  159.   public function toInsert($table, $data) {
    ) b7 T6 b4 H& B( E
  160.     $re = $this->database->$table->insert($data);
    0 O( r! `! q9 t" y8 w/ e
  161.     return $re;
    5 ^. A4 V" t3 D, X  v" F2 }
  162.   }
    & t1 G* S+ x2 T: M; Z1 o
  163.   /*** b! h0 q6 ~+ B, l& Y6 @, n
  164.    * 更新数据/ B5 \) J5 E) Y" [
  165.    * @param $table
    , P. v$ ?2 w" T1 P  T
  166.    * @param $where
    $ c3 ]9 a  ]$ Q* V; W3 Y  h. ^( T
  167.    * @param $data/ x; w3 y* C+ `8 t5 v2 l: n- v  X' \
  168.    * @return bool
    7 j8 k! |, I9 P1 S
  169.    */, \: T( w: E; w7 [' O0 P* {* t
  170.   public function toUpdate($table, $where, $data) {9 m/ Z" k( \( F, }0 o7 t+ X
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    - n; J+ Z! P) F. N0 w
  172.     return $re;3 k8 C" v* b; T& ^' t8 J6 _1 `/ z
  173.   }% V8 X. K* I! {6 m2 U
  174.   /**
    2 N; ~! C- [) S4 i, U& n" c
  175.    * 获取唯一数据0 F; L. ]" |0 |3 f& ?
  176.    * @param $table; k# I& Z5 K, H9 |  w
  177.    * @param $key
    ' }; W8 v0 c3 m- X9 \! |- W
  178.    * @return array
    * Q3 j! X9 t; Y- G
  179.    */+ @4 h9 U+ r' ~# Q" l  f
  180.   public function distinctData($table, $key, $query = array()) {
    ; L( [: s# P( u6 u; G4 z
  181.     if (!empty($query)) {" [+ H# W/ M4 n. v6 n- h
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 G2 h& |' C' _) _
  183.     } else {2 S$ k" Y  e- f/ F) b3 T- J$ R# U
  184.       $where = array('distinct' => $table, 'key' => $key);
    # h3 M: }5 y/ E/ r  }6 ]7 H9 W
  185.     }
    7 t6 p( k! j8 L% ^7 r8 _0 K4 _
  186.     $data = $this->database->command($where);) n/ Q; q- v7 I# s! |  U8 B
  187.     return $data['values'];
    : d9 P2 A5 W7 i2 X( `& k$ }
  188.   }5 o0 {! |& T4 i3 w  `8 u
  189. }2 U# V% E* P  g5 I* Z( q
  190. ?>
复制代码

6 s/ l8 b* s9 e4 c& E8 H, p$ r3 }  B8 U" n/ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.080871 second(s), 20 queries .

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