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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
  k  _5 m9 P" \& Q- r7 k+ E8 E模式自由。; j( b& ~3 M+ A" T% w8 H  J
支持动态查询。6 K+ L, \* D4 C$ r0 L4 S  s
支持完全索引,包含内部对象。
+ {' j) G  s( K# H7 ^支持查询。
6 c5 r* f  x. C6 v" F0 e' M支持复制和故障恢复。( }2 j/ _# k$ b- w
使用高效的二进制数据存储,包括大型对象(如视频等)。
# b' R4 ?8 D# h自动处理碎片,以支持云计算层次的扩展性" ^7 a$ W' l" L. l9 c$ h
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
+ l7 Y8 L) G, i0 n1 W) w6 J/ P, c文件存储格式为BSON(一种JSON的扩展)% g$ K* Z+ u6 f7 \% X3 S
可通过网络访问

所谓“面向集合”(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
    . D; r9 ?8 ?3 [8 o3 O' ]% o
  2. /**
    $ L+ M8 z9 @( ~# L/ S
  3. * PHP操作mongodb数据库操作类, X$ _8 M3 k0 Y% s* A# w, D7 k( K
  4. */
    9 \' ~9 y, J- n( z5 |
  5. class Database {
    1 z. n6 R$ g; P6 `. L" ?
  6.   protected $database  = '';( I1 f" m- `% ^! r
  7.   protected $mo;
    4 u7 @+ n6 K) ?, ?+ q  P+ y
  8.   /**
    ' e  H8 S  r3 t0 f8 a
  9.    * 构造方法
    / z5 ?( X8 |1 n! Y; j5 ~- Q
  10.    */
    0 @+ }7 Q9 i) d
  11.   public function __construct() {+ Z! |& E, R9 |! ?# h  C
  12.     $server = DBSERVER;
    1 j7 N: f2 D$ `
  13.     $user = DBUSER;
    " M) f& x  c( q9 z3 n- E% C
  14.     $password = DBPASS;: G; `  Z, [: m1 v
  15.     $port = DBPORT;* U6 J' z) ^, l8 m2 X6 @0 t
  16.     $database = DBNAME;- T0 W3 Q# w; s/ J% L5 v
  17.     $mongo = $this->getInstance($server, $user, $password, $port);4 C: o3 F: }7 D, g1 [4 j
  18.     $this->database = $mongo->$database;, x! }* O. x/ N5 E0 }' k- m
  19.   }
    ) w# b0 c& m- r" A
  20.   /**
    2 ]7 @% @! _; w( \* ]3 ?  e9 N& y* o
  21.    * 数据库单例方法
    , L3 v% t( G% }& a- m
  22.    * @param $server
    8 q' L: i( h# Y
  23.    * @param $user
    $ o; Z5 e% G0 d
  24.    * @param $password+ ?' u% n) Z: [9 e. c
  25.    * @param $port/ l3 y% Z1 O5 `: l6 o+ U/ G
  26.    * @return Mongo9 p1 x; l' `& ?6 b! e
  27.    */
    0 ^/ m: M; g8 E$ j
  28.   public function getInstance($server, $user, $password, $port) {
    , c# i7 Y. k& \. @* Z# ^9 X5 y" [
  29.     if (isset($this->mo)) {1 |) a  @! b7 ?& U5 b
  30.       return $this->mo;( i  M9 W" k$ J, L
  31.     } else {
    - z! V( h0 o4 ]- J* k4 O
  32.       if (!empty($server)) {
      h5 o& ~: m7 H7 {" o# a
  33.         if (!empty($port)) {+ B& }  p2 G& q' c8 Q% S
  34.           if (!empty($user) && !empty($password)) {
    0 v% O) l: L0 F+ p0 @
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");; [0 N  Z3 M! D* O3 B, V
  36.           } else {
    ) J! b: e% e: G! O: E  S6 q3 t! U
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");" ^" V5 U5 ?  h# j" g! F
  38.           }4 _$ a2 I) k* z* }
  39.         } else {: D* s& }6 C1 y6 c% B9 E2 f
  40.           $this->mo = new Mongo("mongodb://{$server}");
    " e# y/ K( R" j! N1 }9 q
  41.         }/ p; h% L7 U7 `
  42.       } else {, w  n; k. M6 G3 X+ }& W0 n: a
  43.         $this->mo = new Mongo();9 J8 v# r# q1 N9 D* Q& L$ u9 V
  44.       }  I; w4 X  a% _1 U( ^
  45.       return $this->mo;
    0 P; G( M' b8 X! ]& J
  46.     }
    7 M+ l% Q: g' |) a
  47.   }
    8 ~/ T) }. @5 i7 n$ I, |3 h4 G  M
  48.   /**# @0 o. J7 r0 L, r. [
  49.    * 查询表中所有数据
    % q( ^- Q- z( u1 S; h
  50.    * @param $table
    * T6 D& C) r& q8 A' [6 d. k
  51.    * @param array $where! N; g; ^  D+ D& n. |! u
  52.    * @param array $sort
    9 i9 O. `7 n" k" H8 {+ V- L
  53.    * @param string $limit9 u& h; i# J7 ?3 L! |7 A7 E% f
  54.    * @param string $skip0 E# P' f  t7 v5 g9 E, N
  55.    * @return array|int; F( c9 ]! C+ Y) _  z! }7 G2 P* f
  56.    */% A6 }9 r! w- T) C
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    / ^0 x9 o# _0 R- H+ d$ T! T4 O
  58.     if (!empty($where)) {% H& p" m- J# u- M- d) N, Y
  59.       $data = $this->database->$table->find($where);
    : a9 i& D* d  _. K  y4 u
  60.     } else {% N& ?/ P& U( w6 o2 ^* u
  61.       $data = $this->database->$table->find();
    " m! s. x8 F* u. p
  62.     }! g' t% ~& B6 k+ K# w0 h' t9 W5 |
  63.     if (!empty($sort)) {
    $ r7 v2 s) i( G& s) W: Z) ]1 i
  64.       $data = $data->sort($sort);2 ^5 \$ m! q( T) k8 c/ J* u, w; o
  65.     }
    ! Z3 v$ u  e& |9 Y% Q
  66.     if (!empty($limit)) {* J# [3 H  s. l5 p
  67.       $data = $data->limit($limit);) D+ [6 I0 f) l' a* B! A, V
  68.     }* Q% I# _8 C9 P; _3 {
  69.     if (!empty($skip)) {& f3 V  s7 z6 R$ {
  70.       $data = $data->skip($skip);: x! O. b4 ?* {" ?1 U
  71.     }
    4 K3 o. L- n- y! N% |
  72.     $newData = array();
    4 D* y/ V' G) \4 i' J
  73.     while ($data->hasNext()) {
    : f5 {1 M: @# [" c$ f
  74.       $newData[] = $data->getNext();$ o" G/ X! [" p: U2 l+ C
  75.     }
    9 L2 F# T5 M6 ?& Y
  76.     if (count($newData) == 0) {
    3 }0 i: [3 d+ v, y- M+ ?* r  \
  77.       return 0;% F$ X% N+ t" t& m9 Z
  78.     }. p* \: U$ G! `" d. m
  79.     return $newData;
    + T$ e( ?7 k! D9 z6 f- y
  80.   }
    1 I2 M3 E# M/ b* a; o4 W4 M, I
  81.   /**
    ) `/ k6 m* r, C4 p- X% b
  82.    * 查询指定一条数据
    ; C! j% Q2 i# q0 Z7 M" q6 R
  83.    * @param $table$ G8 L, G* U8 t2 ~/ W: `# d; c
  84.    * @param array $where
    5 ^7 u3 {( G. i
  85.    * @return int* u7 z' @! v' W5 H" E1 U
  86.    */
    0 I" L' }6 p) l5 v
  87.   public function getOne($table, $where = array()) {/ F8 T# e/ h4 q* Z: y) }: x
  88.     if (!empty($where)) {) o9 h/ {) T9 U4 C
  89.       $data = $this->database->$table->findOne($where);
    8 l0 P3 j: h& h, g
  90.     } else {; V) U. P; f# x0 J. q; V  |8 {# i
  91.       $data = $this->database->$table->findOne();8 ]; e  I3 \1 Q1 e( ]4 f0 U4 b
  92.     }5 f2 a' l# R1 |9 P& u+ ~& M6 t* A% W
  93.     return $data;
    ) `7 H, s; W8 p( Z( n7 \1 ]3 {
  94.   }
    # |" z; z9 \* N7 v: ~( D4 u) q
  95.   /**. ~& Z( o+ }/ n5 Y& |5 l
  96.    * 统计个数
    . _& K6 k  W1 f+ r- A* f
  97.    * @param $table3 L* A  O1 T4 n* i" o4 \
  98.    * @param array $where* V4 w8 Q3 k5 I% |9 _( W/ M
  99.    * @return mixed
    / L8 [, E( G; k; l% N+ d4 Q- D9 a0 n3 t) {
  100.    */+ P8 H7 F. r4 e8 W5 c. ?) x2 i
  101.   public function getCount($table, $where = array()) {
    % V% z( G1 H' T  X# J+ o
  102.     if (!empty($where)) {
    6 U  o0 s+ t: y' `; O
  103.       $data = $this->database->$table->find($where)->count();  D. g& l9 ~5 ~% @- B
  104.     } else {
    1 n! v& ?; c5 j. W5 z* u+ K" \# Z
  105.       $data = $this->database->$table->find()->count();( Q( _) I7 \# \
  106.     }3 n- K! _6 d# t
  107.     return $data;. T; u1 d" Q+ I8 }' V, R
  108.   }/ j" N$ v5 z# u: x( I9 I
  109.   /**  V. ~2 h& r! Z9 U" d, K3 }" y
  110.    * 直接执行mongo命令1 t7 G5 |) k" f, d6 Z
  111.    * @param $sql
    . Z8 H+ Y" [* Z+ s+ e' P/ X$ H
  112.    * @return array
    ! r0 o% t* j' {7 e" V* T) h- H
  113.    */8 h/ v6 f$ a. f4 W, F" C
  114.   public function toExcute($sql) {( r5 w' U) m  [
  115.     $result = $this->database->execute($sql);. j" Y% D# m* b9 G" v' L
  116.     return $result;
    : s1 Q, x7 n# k, k
  117.   }# f: E9 }' l: [3 U3 p" n* Y+ ?
  118.   /**
    & j+ h1 n: C3 h! J* w0 N
  119.    * 分组统计个数% W2 g  Z" D  v2 M4 V: [
  120.    * @param $table3 p6 ^: y, C/ i! U% t, y* j( `
  121.    * @param $where3 o! a: t- `! q4 S
  122.    * @param $field9 l; S) Z8 u8 a8 L8 e
  123.    */; J* {8 N9 q! S
  124.   public function groupCount($table, $where, $field) {
    8 W) R" i1 m8 E( v5 `6 b, P
  125.     $cond = array(# y5 Y) i) Y7 a4 r9 H, _
  126.       array(# M; w$ @& {& L3 _( V& l6 u
  127.         '$match' => $where,
    5 v. u/ ]; l7 _1 O* Z" K: t
  128.       ),
    , d9 K7 u/ q- p4 v
  129.       array(
    , m9 m* I: V( m9 k3 Q3 l  s: g
  130.         '$group' => array(
    3 l- w& ?! J: }2 d
  131.           '_id' => '" x4 T3 q9 x1 T: {

  132. # o1 q( ^" u; |- V1 t
  133. . $field,
    - g+ ?. W* \8 u' n1 F4 G0 u
  134.           'count' => array('$sum' => 1),& c9 p& L3 X" D7 f: H+ E
  135.         )," b0 Z$ z/ R" n, E6 U1 Q. E
  136.       ),
    ( o( w: L: q) u( J' z) r; y5 |+ L9 ^" g
  137.       array(: ?: w5 r; R' Z- o1 l
  138.         '$sort' => array("count" => -1),
    5 _, j5 k6 e' I; J
  139.       ),
    5 v% \2 v1 f' W% q8 z
  140.     );
    0 a: Y" Y% {, s/ s! _
  141.     $this->database->$table->aggregate($cond);
    9 Y- G0 ^& o3 u3 I4 t' d
  142.   }. m# S' v, _: W1 n  Y
  143.   /**
    * A% Z! H  r2 `3 N- s+ F
  144.    * 删除数据+ ?! J1 R8 V4 J4 }5 v/ u7 b( S
  145.    * @param $table; y* H/ }; p  @8 o- f- o+ H
  146.    * @param $where
    9 q- }7 U/ |0 M1 ]9 k! }
  147.    * @return array|bool4 G3 y5 E) W0 a$ [0 G
  148.    *// q0 G6 v1 @8 h* s, ]! ^7 d0 r
  149.   public function toDelete($table, $where) {2 E/ O! j( c# o3 g
  150.     $re = $this->database->$table->remove($where);
    0 Q1 D, e" G& l
  151.     return $re;" D$ `3 e& I: W' G2 k' @
  152.   }3 B1 R7 d. L% z0 ?
  153.   /**- e$ D/ Q& }6 L# K! `! r
  154.    * 插入数据
    - n$ J4 j: K- y& R# r
  155.    * @param $table- B- o0 X  M/ |  F% t( u
  156.    * @param $data( `  H2 h5 G4 w1 K
  157.    * @return array|bool8 T( p% |0 j; E: n; K$ l
  158.    */
    . x0 e$ d' g5 n& a% ^. U  d
  159.   public function toInsert($table, $data) {
    + B% a4 _* @% i! k/ o) ^8 Y
  160.     $re = $this->database->$table->insert($data);
    6 |9 }1 ^+ z' g$ [4 N3 W3 g1 ~# R
  161.     return $re;
    ' z3 a: h1 {( ~# r0 S- l* d' v) f
  162.   }
    " l4 q" s, n7 a1 ?
  163.   /**$ u$ ]2 C. I2 D5 c
  164.    * 更新数据
    0 \5 O! E! T% d" [
  165.    * @param $table6 B! `' K1 P& j
  166.    * @param $where
    2 Z" l7 s5 }5 Y# u  i" N* }
  167.    * @param $data
    % r5 q7 s' g2 I8 V% ~
  168.    * @return bool
    * x3 ?  l2 }2 f$ U; N8 D% I
  169.    */# X9 {- U! ^" Y, y4 }
  170.   public function toUpdate($table, $where, $data) {
    4 ]2 o* {8 l7 o: r3 R0 ]* _; i  f
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ! j) r0 z& o9 n. V# j8 C* Y
  172.     return $re;0 P1 C" x) \' G: s  i+ t
  173.   }0 F% f( R- f. |8 h, `) u& ?
  174.   /**
    0 D7 K9 P" v" {8 M
  175.    * 获取唯一数据) J5 q# i- B5 L
  176.    * @param $table
    : }6 z1 n! X( k% K/ t0 |$ ^; w! d
  177.    * @param $key
    ' S0 P- T2 h. u! Y$ y& _! Q  `
  178.    * @return array
    ; c( H. \: E' ]6 ^  u# C
  179.    */" f7 a' I; l6 _# M# L& o
  180.   public function distinctData($table, $key, $query = array()) {
    , g# O' i- P' O$ n
  181.     if (!empty($query)) {5 ~3 _; I0 i  P3 `
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    ' X) n# ~. ^+ o9 a
  183.     } else {
    $ N" B8 G* T5 m. n/ K: t* n
  184.       $where = array('distinct' => $table, 'key' => $key);1 B( V( W- g, Z( C. Q
  185.     }8 u! H: C6 q$ |6 k
  186.     $data = $this->database->command($where);- g) X, U8 ?* i3 u: a4 o
  187.     return $data['values'];4 c4 o  |( F: {3 @( Q) [& P
  188.   }
    & p5 L0 n* h; e; a1 P
  189. }
    : y* W8 @$ o& f0 g( n
  190. ?>
复制代码

3 a1 D$ t# z" R+ x1 m  Y0 M
; U1 p- m9 l. M/ L3 e( O5 `3 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 16:38 , Processed in 0.128192 second(s), 20 queries .

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