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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。4 |3 Z+ U  M6 s+ G% \
模式自由。& v, R+ f3 G  E  V+ a4 E
支持动态查询。5 h& Q  j5 R- ^- T, X, D
支持完全索引,包含内部对象。8 o. K5 y* O, j4 B
支持查询。1 {5 ]3 `. n  x7 x
支持复制和故障恢复。
) x9 m+ Q3 T) k# L使用高效的二进制数据存储,包括大型对象(如视频等)。
1 Z4 k" L/ G7 ]1 [) J2 o自动处理碎片,以支持云计算层次的扩展性
2 h, b0 ^9 Q8 ^. S  l支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
6 @/ H- C! V; M, c- F文件存储格式为BSON(一种JSON的扩展)
" j/ U- G$ \6 k; 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. <?php, g3 Z+ a- z# ^3 E2 ^1 Y2 z2 H
  2. /**' U; |# K9 b6 K& U; F/ f" G
  3. * PHP操作mongodb数据库操作类. V: w* L* g  B4 ?+ X
  4. */& l8 C0 E0 {+ G. [+ T
  5. class Database {
    - d' K) |( y1 j7 l2 a& b
  6.   protected $database  = '';
    8 T4 ~8 O: F3 q% h5 x+ I" q
  7.   protected $mo;
    6 C6 E' e8 p3 P7 T! \% a# S
  8.   /**
    & f* l, y6 f6 V9 r0 }& {% Y
  9.    * 构造方法
    4 [( K' @  h8 V8 J
  10.    */
    ) S0 H* k2 q8 E3 s" g' E
  11.   public function __construct() {1 ?4 \) Z) t" b2 T5 k
  12.     $server = DBSERVER;: K& z' A. t; `8 ?3 U) {3 }  r
  13.     $user = DBUSER;
    6 ^5 ]4 G& O' q: q  @  l
  14.     $password = DBPASS;) t7 q% _$ n, |% N1 g
  15.     $port = DBPORT;' {9 p: t' G  @  h( ~! K
  16.     $database = DBNAME;
    & l% C- M' i. Z( f
  17.     $mongo = $this->getInstance($server, $user, $password, $port);0 S" t2 c7 S. n" b8 X
  18.     $this->database = $mongo->$database;6 G5 v: G$ Z& P( R
  19.   }
    ( M* `8 R3 i5 s2 ]8 l6 Z7 ]+ K- Y: y
  20.   /**7 j/ ]6 J: `, A$ e1 H  Z1 T* g8 k9 C
  21.    * 数据库单例方法
    / d1 Y' O* F8 i$ G; x' t$ [/ U8 V
  22.    * @param $server
    6 {* x' D- [8 H+ L
  23.    * @param $user/ V. }' I+ M' V2 x! x
  24.    * @param $password
    7 z6 ?9 J# n( V! b2 O! h) T- U8 X& _6 p
  25.    * @param $port8 M# B3 i5 g0 d9 z
  26.    * @return Mongo4 A2 b6 G: f( l6 U( {: H: c# v
  27.    */; R6 z9 l) p; W0 T2 x3 n
  28.   public function getInstance($server, $user, $password, $port) {
    6 V; G" `7 ~' P& ~3 Q
  29.     if (isset($this->mo)) {
    : b4 i" ]1 R1 ]* j
  30.       return $this->mo;& Q/ j( z% l* B
  31.     } else {2 K( P, R* W( ]! B2 V# A
  32.       if (!empty($server)) {) }( k" B  c) j) C$ V
  33.         if (!empty($port)) {$ ]! K9 d; @$ |6 a+ G; _& _
  34.           if (!empty($user) && !empty($password)) {, D" f4 ^* v9 P$ r
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    - g! N1 h- T- B1 ?) b' g
  36.           } else {
    : x8 V  _5 v0 _7 h7 q7 }
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");  \" ~2 w2 z* x2 g0 Q
  38.           }; F- d3 P; `! X1 J: u' w: h
  39.         } else {
    7 U: k% A4 X1 b- u5 O
  40.           $this->mo = new Mongo("mongodb://{$server}");- x- A4 o% E3 P/ N8 b
  41.         }' t- X5 n" a( N$ {8 x% H: S- I% T
  42.       } else {1 J4 K$ f! p' O7 G. a  Z
  43.         $this->mo = new Mongo();
    , D  `/ m; l# @  q& Q. @' O
  44.       }! R8 a" N' L! @3 ~& W' l  D6 y
  45.       return $this->mo;% \8 u+ g6 G5 E
  46.     }
    / a0 ^, E- v0 t  x) F% h9 Q8 T
  47.   }! X( s  N- k5 m, R) Y+ j) D% J
  48.   /**- b5 j/ B9 W; y
  49.    * 查询表中所有数据" Q+ i* l) c- X& ~$ ^1 y  ?
  50.    * @param $table
    2 N$ h( F* d# |% U
  51.    * @param array $where/ T3 x2 n$ l9 l% [
  52.    * @param array $sort
    7 f  W" d6 k; ?9 H, a. m
  53.    * @param string $limit
    1 ^& c! j% |4 y6 {
  54.    * @param string $skip
    * _, V0 R! F- o
  55.    * @return array|int5 e  |+ |1 g6 s, F: l
  56.    */
    $ H% o/ ?9 i  y- c/ o
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {' l# g3 E3 a4 x" e! i
  58.     if (!empty($where)) {
    , |# S7 ^. I# Q0 Z8 |; S8 R
  59.       $data = $this->database->$table->find($where);1 z* G( R) Y4 J5 k5 E9 S0 ?$ |4 @/ v
  60.     } else {' y' A1 F% k0 F: _
  61.       $data = $this->database->$table->find();3 v" R* {* G1 Z; y+ E
  62.     }, A! m; A0 P7 F. p
  63.     if (!empty($sort)) {- Q( d' n# ]: k8 [
  64.       $data = $data->sort($sort);! w8 C' |+ q' G, ?/ X
  65.     }
    - p( l" |/ K; I
  66.     if (!empty($limit)) {; j" F  k; X1 W4 {! f( j
  67.       $data = $data->limit($limit);
    3 \: `# [! ~& w) Z/ a! `
  68.     }
    + r2 H/ n5 N/ X1 y+ P4 |& j; O/ `
  69.     if (!empty($skip)) {( B- x5 X' ]3 b0 Y% F
  70.       $data = $data->skip($skip);
    7 L5 z$ ?! I, v. _! W7 s' L+ a
  71.     }
    # D6 x, Z" w* W; |7 E6 k* f; Y3 d
  72.     $newData = array();
    % D, z, _$ d; x
  73.     while ($data->hasNext()) {
    ; `$ K  K& H* r" `# v+ l) y
  74.       $newData[] = $data->getNext();* v" [% @& B+ R' _
  75.     }
    " ^* H3 M8 b3 f/ A" ^$ A* J& v  _" B
  76.     if (count($newData) == 0) {
    8 k* z% t8 ~: x: v- {2 A5 |
  77.       return 0;7 W, p9 v4 S+ ~4 b
  78.     }
    # ]: y0 K3 u% Y/ y
  79.     return $newData;0 h9 n4 O% v% f! L6 U
  80.   }
    5 u) g  l7 F$ l' K
  81.   /**" p% A8 y% z* J3 G, W( _
  82.    * 查询指定一条数据' J7 ~" B+ q. k. b/ g" O
  83.    * @param $table% @3 r5 g0 \1 u6 C: Y# b
  84.    * @param array $where
    # U) u& F1 }9 t% Q! E- \4 Q
  85.    * @return int  `+ R7 F* Y, C. L& s% _  X
  86.    */, s% w4 V- s5 \- s+ r  W; x: P
  87.   public function getOne($table, $where = array()) {3 L1 U$ F1 P( s% A4 M
  88.     if (!empty($where)) {. N" {+ K* q- Q/ A* h* j2 k" m
  89.       $data = $this->database->$table->findOne($where);
    ; F# K, K2 ~% g* g9 }
  90.     } else {, x6 U( X7 D9 g( B1 N
  91.       $data = $this->database->$table->findOne();9 P+ Z4 V" Y! A1 ]3 G9 w" |! g
  92.     }& z& `; }. M4 X4 n$ H+ u0 m
  93.     return $data;
    % t& [; _/ j+ d" d: f4 g, `
  94.   }, f1 @% x' U2 \  ^9 E$ u
  95.   /**9 m* h& e* ~- h: [3 e* t9 ?
  96.    * 统计个数
    ) |' |- n, N* }
  97.    * @param $table+ M/ t7 N3 i: N/ d" B* q, P6 [
  98.    * @param array $where
    * c$ w% Q: g# a8 I9 O) ]1 K
  99.    * @return mixed% N2 Y7 y5 Q8 n  x, b
  100.    */
    5 i" q. C& O7 D* O7 f
  101.   public function getCount($table, $where = array()) {0 Z& s4 }; @0 z9 u$ e5 o
  102.     if (!empty($where)) {9 ?) x/ t: H& F( Q' H
  103.       $data = $this->database->$table->find($where)->count();: p% x; A" k  }& Q1 Y' }$ K& g5 ?
  104.     } else {
      N  g9 Y4 q" j& R. j
  105.       $data = $this->database->$table->find()->count();
    . M5 A$ Y9 {1 R9 H
  106.     }* y9 A4 |7 z: ]6 a- I! q; C
  107.     return $data;
    4 n/ N, g% O1 L2 B5 G
  108.   }
    2 ]7 ]8 Y4 U0 l4 L' J: Y/ ?% z: C
  109.   /**  Y7 e, f- X2 |8 K, _2 J
  110.    * 直接执行mongo命令( G& T3 I7 t/ S' u  r5 K
  111.    * @param $sql
    $ M+ i- e/ d) X) }, s2 ^
  112.    * @return array* k" v& G& U+ D9 ~' I- v" d( i. r/ r
  113.    */* R' x8 K/ E. Y8 u! E
  114.   public function toExcute($sql) {* N: V- B. H; V/ B/ d! G% \4 y
  115.     $result = $this->database->execute($sql);  c9 B. M- H0 c+ ~" o( r# X9 X
  116.     return $result;9 c: R( @& ~* A3 p1 ?5 u
  117.   }5 O* M! F. O& F- F- |
  118.   /**3 I+ \: j  v0 y) m. \
  119.    * 分组统计个数0 B% Q: \# n7 U; q6 n5 N, C
  120.    * @param $table( m1 M' q3 v, y' A% ~
  121.    * @param $where- B- ~. e* r6 B+ g1 ?& C
  122.    * @param $field
    8 B0 H" g1 f/ j) p: s2 d* a( R; T
  123.    */$ w/ p& _6 |- e1 I
  124.   public function groupCount($table, $where, $field) {
    # @/ B7 @4 S: B+ e
  125.     $cond = array(
    8 Q0 q3 f" C  N- Y7 [( g
  126.       array(
    0 ?# C& ^; E$ F9 ^$ K2 {9 a
  127.         '$match' => $where,  m3 c5 R' e3 G/ R" g" b' J
  128.       ),# P8 s. k6 U6 s- K
  129.       array(
    # G) [* P7 J. ]/ j8 R& \; S
  130.         '$group' => array(
    * ]) h; O3 J" @& |1 e$ n! m+ v" ]3 t
  131.           '_id' => '
    8 Q' ?/ w! x8 L$ R+ W  H* V
  132. 9 t: T/ `4 m6 O/ O, W$ w7 Z7 H
  133. . $field,
    " q+ w. r6 }- J; |  z/ Z
  134.           'count' => array('$sum' => 1),
    % R1 i6 M) G) z! _3 H- K2 u
  135.         ),
    * J4 [0 l6 H2 j( y
  136.       ),% l8 A8 \8 A& }+ v' W
  137.       array(
    9 D' ?0 _' m8 F$ V
  138.         '$sort' => array("count" => -1)," ]4 K  y0 R3 l" i. ]
  139.       ),
    0 e* F8 [0 p' c. X
  140.     );
      L6 D# M# ?+ V1 f
  141.     $this->database->$table->aggregate($cond);
    8 X0 p7 l& j, J! E$ Y8 e; z
  142.   }
    6 T5 M3 O4 `+ I8 c: `/ c: p
  143.   /**
    0 H$ n3 w/ |+ f. L" O: z0 z
  144.    * 删除数据
    5 N& C6 b" R) q8 `* P! k
  145.    * @param $table
    # x, `  O9 y: u& a6 P
  146.    * @param $where
    * k, S% v# ]" Y8 h
  147.    * @return array|bool% r$ _; y- R! j/ J' s6 H% p4 x% p
  148.    */* A  c) ?' \6 q5 B0 I
  149.   public function toDelete($table, $where) {8 q7 s/ t5 \: K' S
  150.     $re = $this->database->$table->remove($where);+ W( |3 }, g  b/ Q- O
  151.     return $re;
    ) z5 V/ S& @) f4 W6 o! C
  152.   }2 X# Q1 N' c, q% r3 O# H
  153.   /**: a" K. U8 D/ h6 G! [4 z  ?8 Q7 c
  154.    * 插入数据
    ; F1 O/ U3 g) E! U
  155.    * @param $table2 {7 o/ w! E1 O5 P2 ?: L* t
  156.    * @param $data
    4 \. k! }" {) X5 t+ X2 c
  157.    * @return array|bool5 w$ Z! A5 D* R% a
  158.    */" s  R" K; d$ u- ?" \' E6 i
  159.   public function toInsert($table, $data) {
    & {2 J1 a, `/ W- A& [" {
  160.     $re = $this->database->$table->insert($data);
    1 k, i4 k) V4 n/ S0 R, z
  161.     return $re;  M* x! }- E* j6 d
  162.   }% c- j" D+ D. Z( s
  163.   /**
    . e, ^2 i2 ?" e$ v5 p
  164.    * 更新数据
    0 y7 h8 A' P8 R/ g7 H% F# d* Z2 C8 W8 o! U
  165.    * @param $table; ]: S7 `9 ?/ q# g
  166.    * @param $where
    : N- L! f/ H/ n: T! F2 K' x
  167.    * @param $data( }! {# J! i4 Q# P# G
  168.    * @return bool" E5 a8 @: }* e" B2 {4 b9 Y1 f" X
  169.    */
    0 ]% a# [' t8 e4 F9 U
  170.   public function toUpdate($table, $where, $data) {
    ) Q0 g/ g  z/ n4 h9 w, Y+ l: f
  171.     $re = $this->database->$table->update($where, array('$set' => $data));% J% V+ Y# p2 b. T
  172.     return $re;
    # R3 X8 A4 m/ H# z6 h9 S# G
  173.   }
    9 }9 F+ S+ i# a! i3 L! ]
  174.   /**
    8 a5 f7 |2 b# ]2 C$ q
  175.    * 获取唯一数据- z) z! s5 E1 Y  b/ \2 t
  176.    * @param $table
    4 q3 m3 L" }$ J& q( K7 j
  177.    * @param $key
    9 X$ F: h* W) c7 Z
  178.    * @return array
      [/ H, N2 T! l" _2 B" l
  179.    */7 W6 Z* j0 L0 h: b
  180.   public function distinctData($table, $key, $query = array()) {
    # ]! v9 V. \- V* ~
  181.     if (!empty($query)) {
    : p" Y+ |4 J0 o) [( x  B  J$ W& D9 s
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);9 z3 E9 S0 Y/ d7 g
  183.     } else {
    * W2 K$ c- M3 u' @6 O
  184.       $where = array('distinct' => $table, 'key' => $key);
    9 p5 C0 [/ N7 E: g1 R+ D
  185.     }' h, s  t$ a4 s9 ?: N
  186.     $data = $this->database->command($where);
    / d' T+ ~* {+ J1 G& G" F
  187.     return $data['values'];( T0 c, H' N5 W
  188.   }: \! G' }: P" k, v. p3 Y2 n
  189. }
    5 n* |% H( n' E; t7 V; C* U
  190. ?>
复制代码

' `( v3 b# D4 Y2 y1 t" ?" z" N% o4 e6 K' Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:45 , Processed in 0.056742 second(s), 19 queries .

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