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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。0 j+ d. b+ F1 {7 ]! s
模式自由。
9 g/ {4 u3 S# _7 U- o支持动态查询。
* L, p- x/ y) |4 e& L2 N% K支持完全索引,包含内部对象。' z- y: Q; Z/ x; N, ?$ @7 y# n5 P
支持查询。9 c; Y, D/ M( ~$ E1 Q. l3 m
支持复制和故障恢复。0 V9 `# R0 Q" ?% @! [  C3 j7 N
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 N% z. r) S& z- u1 ]; {' Q自动处理碎片,以支持云计算层次的扩展性/ w+ V' W. z( d8 k5 ]
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
' m( M, r2 G. M. Z7 J文件存储格式为BSON(一种JSON的扩展)
  q: D; [! v0 S; v- f! b9 N/ Q可通过网络访问

所谓“面向集合”(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% w8 @4 F# _. c9 F) G2 i) X$ c
  2. /**$ o- c9 x; X2 G
  3. * PHP操作mongodb数据库操作类# F. h/ H7 f3 i* y, r% F
  4. */
    - C' b/ K9 l4 y( s4 y
  5. class Database {
    % ^6 f% v$ N3 p
  6.   protected $database  = '';
    % X$ j7 y3 C4 u, o0 C: `  u
  7.   protected $mo;
    / `) T2 W9 n1 r2 F
  8.   /**  _# W0 g9 I7 J: m. L# x
  9.    * 构造方法  {5 a, k" q  @. V* M' K; j  U0 j
  10.    */
    : g0 ?) Z; C! @
  11.   public function __construct() {
    ) }# w% z0 o6 b4 J/ E
  12.     $server = DBSERVER;% i$ ~6 d0 x: m) \# i
  13.     $user = DBUSER;
    1 ~- [: J$ d$ i+ b' ?7 f7 U3 n9 m
  14.     $password = DBPASS;
    7 v1 _  D) o6 _1 z/ c* {' ^  q) `
  15.     $port = DBPORT;7 |( o; \. D4 {) |3 S! q
  16.     $database = DBNAME;6 F* j. Q+ J. C" \6 |
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    $ S( @& y) U( k1 \( b
  18.     $this->database = $mongo->$database;& _) k. m+ i* f$ k, N, r/ [9 P
  19.   }
    " a! w  k1 W, a* u# \" c7 J
  20.   /**/ o: X& ^/ n# b  Q  m
  21.    * 数据库单例方法$ @: g# }0 n4 |2 j- s
  22.    * @param $server
    / L6 C$ d6 M$ c+ t) f) Y3 E! C+ F
  23.    * @param $user4 b4 G; ^) ~+ q  H/ d. A
  24.    * @param $password6 Z/ c0 t( M! ?& m6 u3 z, b! c
  25.    * @param $port& ^) \/ e( z- `9 ^- c' n# ?; Z
  26.    * @return Mongo
    $ k% r) [7 G5 o. B- V
  27.    */
    1 Y: B5 s2 r  j
  28.   public function getInstance($server, $user, $password, $port) {  @! N( h) l3 y' V8 T
  29.     if (isset($this->mo)) {
    " |$ w7 e3 ]/ Q* G
  30.       return $this->mo;
    + A' [/ L; U" f1 {0 i
  31.     } else {5 `/ ~9 `% s1 n
  32.       if (!empty($server)) {
    - g. v, q4 K: B
  33.         if (!empty($port)) {
    & X3 R( @2 E: l
  34.           if (!empty($user) && !empty($password)) {# u# g9 P4 {8 j, q
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    6 \# U8 f2 w% z4 j+ n
  36.           } else {  [2 j( J) n7 i( `: A
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");* u- I- G. N9 g* }
  38.           }
    8 f! i/ E% C& {) x- y' p
  39.         } else {
    . {5 |! V9 A9 b8 m
  40.           $this->mo = new Mongo("mongodb://{$server}");
    ; `, Y& x& `, F
  41.         }; @& a6 h' n, ~
  42.       } else {4 g) y" Y4 S" v' E
  43.         $this->mo = new Mongo();
    ' G- m7 A/ u' l' z1 h/ W2 [1 z
  44.       }
    " p2 x: v1 O! \! X  t/ X0 X
  45.       return $this->mo;; x. k" Q+ a  f/ S1 J5 R% J
  46.     }
    ( q: r* k, C' c1 G: `0 G
  47.   }
    0 s. r" b1 p9 V8 s1 y9 G; g
  48.   /**
    2 t, \$ O& ~; F
  49.    * 查询表中所有数据7 C, Q4 e9 w0 b. }' n
  50.    * @param $table. k1 M+ m* P7 Y* T
  51.    * @param array $where3 x; e1 k% j: L1 V
  52.    * @param array $sort
    8 X, Q1 i* e6 z) a  l" P5 ?
  53.    * @param string $limit* [$ \" r" q& C4 P- B
  54.    * @param string $skip4 a) U+ j& m4 [$ h
  55.    * @return array|int
    ; i. a3 N" H  u; E/ w
  56.    */9 w8 l5 ~  |  z5 D( v
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {7 F, z+ u- _0 J
  58.     if (!empty($where)) {' b1 C- t/ G( ^/ h/ f
  59.       $data = $this->database->$table->find($where);
    / Y: R4 ~3 k* X& z% z" S# B
  60.     } else {/ t& t# E0 O; `4 _: E2 ^
  61.       $data = $this->database->$table->find();
    0 ?+ C8 t& l# Z2 U7 E) j3 K
  62.     }
    - k/ Y- [- j! J9 D8 m- D3 B4 c2 |
  63.     if (!empty($sort)) {$ y  g/ b" `1 r4 n( ]) k5 ?
  64.       $data = $data->sort($sort);
    7 A' I; g- @) x& U- X  }* U
  65.     }
    % p8 W2 Q* l$ i/ f& `% ]; ?
  66.     if (!empty($limit)) {
    1 ~" X0 q* l& r5 I, M' b+ e1 V
  67.       $data = $data->limit($limit);
    - Y# s% X2 b3 s/ }! q" Y& c) O% s( z
  68.     }
    & |' L; F" Z$ f. n6 l3 e' u) t
  69.     if (!empty($skip)) {
    4 ^; k  u/ M* O5 D
  70.       $data = $data->skip($skip);
    , ]- H! ?. ]5 }3 `& Z
  71.     }
    ( z$ L9 h1 a2 F' E* G0 f$ N7 ~$ A
  72.     $newData = array();' C8 d' ?* D4 F& H8 ^. v- |# z
  73.     while ($data->hasNext()) {
    ; J5 x. ^7 G: c: P
  74.       $newData[] = $data->getNext();
    2 I& P0 }* k' x3 \1 h
  75.     }
    # s2 C2 \' ?1 J* u
  76.     if (count($newData) == 0) {$ f, N) S$ N& c$ h4 S% ~( J
  77.       return 0;
    - M+ o9 Q$ k5 r5 N. b6 _
  78.     }  R  V9 P( z/ l; a
  79.     return $newData;
    # o% w9 d+ q3 @" K4 h
  80.   }; c* Q4 F( k7 T  z8 [& k) X( ~9 R
  81.   /**
    ( Q# w4 T- P* v( {3 r0 Z" _
  82.    * 查询指定一条数据/ j0 e* u# O& o3 Q" [" B
  83.    * @param $table+ C' S8 o! j  j9 ^1 r4 _
  84.    * @param array $where7 p2 I* r8 v/ j2 d; F
  85.    * @return int
    # U% V- k" b/ }9 I
  86.    */
    ) i$ _$ T. N9 H  L1 Q
  87.   public function getOne($table, $where = array()) {" K9 [" O* \! s% n% I2 g: }# O4 Y
  88.     if (!empty($where)) {+ h. p3 H+ }% [7 M/ \7 Q4 S1 M' y8 I
  89.       $data = $this->database->$table->findOne($where);+ c- S/ \3 M! z# m- f- g+ B
  90.     } else {
    8 Q; h# P7 S4 q& B
  91.       $data = $this->database->$table->findOne();% Y. {: L. o1 i
  92.     }
    8 g: d  s& u9 C5 t" f! M% W0 n
  93.     return $data;) j. @0 z4 d& Z! w# C* }
  94.   }
      Y0 i1 ^3 K- t. O# Q" o
  95.   /**
    : y* D( B3 p* _& ~7 N. R" W7 c5 P
  96.    * 统计个数: Y9 u) E2 g, l4 W, y; b( b
  97.    * @param $table
    5 G6 U5 j9 z3 P6 d
  98.    * @param array $where
    , I' ^7 V5 [9 E" t  p2 O. y, p
  99.    * @return mixed
    : I3 n) m: h; v3 z& ]
  100.    */+ G) s  y3 l) l! O3 c
  101.   public function getCount($table, $where = array()) {
    : m, u, S& B- G+ z9 F9 E
  102.     if (!empty($where)) {
    3 y7 T# J' P, t5 |
  103.       $data = $this->database->$table->find($where)->count();2 k9 B+ C. q/ k
  104.     } else {9 n6 E/ o7 M$ T$ j
  105.       $data = $this->database->$table->find()->count();- J$ r0 A: R9 c
  106.     }
    ' N7 c2 I( N% c2 J7 F
  107.     return $data;% h0 w: n/ U- L3 l+ x* e
  108.   }* g7 R/ G! y4 b1 l, U4 ?* P/ J
  109.   /**
    ; @5 z7 Q8 h& f' A# U) a
  110.    * 直接执行mongo命令5 L2 @/ ~7 E" y- E7 c. [7 b5 C
  111.    * @param $sql
    " _6 y+ d. I  `' j
  112.    * @return array3 F! z( r- x- k2 r$ K$ b
  113.    */
    " o8 @- O8 e3 f: Y7 v, t- q! I
  114.   public function toExcute($sql) {( H1 N) ]# U! R0 H+ B; `  G: h* t
  115.     $result = $this->database->execute($sql);" ]% F. S/ ?2 s9 U) p0 A1 f
  116.     return $result;$ ]) [# P' m4 g# E1 v1 e3 h3 {
  117.   }* P( Y9 f  E2 k
  118.   /**
    " K) b6 G9 G3 D/ k
  119.    * 分组统计个数
    3 d6 j7 N( z' \
  120.    * @param $table
    ! n) Y  `; p% o6 D
  121.    * @param $where& C" }: k* S  a1 `! \  v& F
  122.    * @param $field
    ' o# M+ R  ?1 A
  123.    */
    + E0 e/ G* g  c
  124.   public function groupCount($table, $where, $field) {) |9 W3 h6 B: N( ~' K- R& |9 D/ q
  125.     $cond = array(2 _$ v$ R0 ~: _3 p% A% Q# ]
  126.       array(
    4 Y4 b6 R. D! e+ ]3 a3 y% f
  127.         '$match' => $where,
    % e, z/ N- S1 G9 _0 q. D
  128.       ),
    ) x/ L9 S8 D" L6 Y/ j
  129.       array(5 O7 X& I* H" ?& P
  130.         '$group' => array(
    ' T6 |) ^0 e* g" I3 _4 E
  131.           '_id' => '3 b4 ~* _& Y- E: s: r0 u. @1 a

  132. 6 _' w0 K. h0 @( }5 J7 d$ o% G
  133. . $field,3 Q( r1 h! X/ U+ N# w2 C
  134.           'count' => array('$sum' => 1),
    $ ?/ b. B6 ?$ _* m) R
  135.         ),5 D) g7 {- V6 A; G4 ]
  136.       )," `# p7 g' K' v* s
  137.       array(- k" F  N. y% |. l
  138.         '$sort' => array("count" => -1),
    : w) V& V! r: t/ r
  139.       ),) a" ^8 F$ v4 ^$ X
  140.     );
      A' [! R& G5 S7 k& W
  141.     $this->database->$table->aggregate($cond);
    " ~# C1 ^9 e1 c0 w5 T3 x
  142.   }
    6 q9 [7 V- A+ V0 ?, g! S+ j
  143.   /**& e3 m8 q) [* Y9 r* {, Z8 \
  144.    * 删除数据/ U8 d& H' W6 S5 z8 j: x: T. B
  145.    * @param $table8 E+ r0 c2 [# G4 e& B% \7 A, W
  146.    * @param $where
    : I& A# `9 A4 e8 u. p
  147.    * @return array|bool) ~* Q: u0 F  q; h
  148.    */
    # F% g' F8 o. X  n* c* H
  149.   public function toDelete($table, $where) {! w$ A  o" s1 k8 K# ~
  150.     $re = $this->database->$table->remove($where);
    ( Y0 q+ h* z# T. t$ U( d
  151.     return $re;
    ) m! w; ^; N' Z3 e, J! X
  152.   }( \4 x9 V; P# H* E  S7 q
  153.   /**9 c9 u5 ?; I) T( z
  154.    * 插入数据
    * y8 [6 w. l$ j" T* N
  155.    * @param $table
    3 u; Z9 }" _/ s" z
  156.    * @param $data6 e2 }- p/ x/ q( P  Y' ~
  157.    * @return array|bool' J5 M* J, b" P" h! u! R: i' i
  158.    */
    % x1 F4 A. Q8 p; Q
  159.   public function toInsert($table, $data) {
      h* M6 d7 w! `5 M4 F9 K. e" @- l
  160.     $re = $this->database->$table->insert($data);9 h3 v: H& I* E
  161.     return $re;: E, I7 F' z- j8 g2 q, J
  162.   }
    ' P9 e* ~2 A* ~# K* B7 O
  163.   /**
    5 y2 h2 e% e6 e* k) f
  164.    * 更新数据
    9 g; m0 D; z; h- H) c8 X
  165.    * @param $table0 f( L+ D. h: R
  166.    * @param $where
    7 a8 M  Y: v. P: S
  167.    * @param $data. `+ e) o, v8 k3 s
  168.    * @return bool
    9 {, v: ?( y3 H. v/ N
  169.    *// y% u2 Q4 Y5 U' |/ P, K2 |3 G5 A
  170.   public function toUpdate($table, $where, $data) {
    6 @8 `; L1 Y) `0 U  h. l
  171.     $re = $this->database->$table->update($where, array('$set' => $data));6 t! V4 J! r& N
  172.     return $re;
    9 }# Z( @9 M) r3 d/ w
  173.   }& P5 R3 m7 {0 ~! h
  174.   /**& S# D( }: D, o' ^. u. X, d
  175.    * 获取唯一数据  V" V8 ?+ b* X7 x4 w) f
  176.    * @param $table
    6 f. ?7 k* J. c; N! M
  177.    * @param $key
    ; n4 x, ]* c5 M& @
  178.    * @return array& n; ?/ ]/ M1 a1 n2 C: W* c) {
  179.    */
    % D3 Z/ z7 H  ~
  180.   public function distinctData($table, $key, $query = array()) {
    6 e, f) |0 g: S$ H
  181.     if (!empty($query)) {
    ' d) M& q- b3 l. ?9 Q3 H
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);3 x' w) ~6 d( g$ V* Q: q
  183.     } else {; C7 r8 h. R/ }8 J
  184.       $where = array('distinct' => $table, 'key' => $key);, \: W' h% D6 t% I/ |
  185.     }4 x3 r) h% G$ W6 S0 k- ^) T
  186.     $data = $this->database->command($where);/ e( t/ x- R. [2 O# l8 k
  187.     return $data['values'];
    1 Q% q0 a/ }' k  o& C
  188.   }
    ( n+ ~! {6 D% A; C( d$ ?
  189. }6 {7 \% T$ @9 \" g
  190. ?>
复制代码

& i1 e: y, q# g/ h4 A
" {$ v* D: F: ]5 i  t8 Q6 E7 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-10 17:43 , Processed in 0.113808 second(s), 19 queries .

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