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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
' X$ U. o' a- n模式自由。& D$ R& h5 b9 O/ U. _
支持动态查询。& T" t& V+ C* U2 g# V
支持完全索引,包含内部对象。1 g: S/ w0 B2 E! y8 ^0 C6 i
支持查询。1 v6 A5 W/ g. p9 I. i
支持复制和故障恢复。
" X, S4 p0 b( {+ Q# N# H使用高效的二进制数据存储,包括大型对象(如视频等)。
; C/ L5 |2 k/ _; `自动处理碎片,以支持云计算层次的扩展性8 i" M5 C0 e+ ~2 N/ \
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。7 X/ d$ f$ B2 u8 r. @( u
文件存储格式为BSON(一种JSON的扩展)
8 s% a/ N/ g1 |: Z) v可通过网络访问

所谓“面向集合”(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
    9 f) ]+ i4 e, N
  2. /**
    1 v4 S" k( \  l. P% D
  3. * PHP操作mongodb数据库操作类$ K. E/ x7 C* o2 T. }2 c2 g
  4. */
    - ]1 C! x) _+ t
  5. class Database {* {; Y6 b' N3 }$ j
  6.   protected $database  = '';/ o# |0 s5 g; X7 K
  7.   protected $mo;
    7 J( q8 u8 k$ _9 E; S
  8.   /**- Y2 A0 W1 W9 T& M7 a8 o2 T
  9.    * 构造方法4 V/ L( R9 M) g4 X
  10.    */! r* Z4 [1 n& r8 C
  11.   public function __construct() {1 R/ t- Q7 {( q7 ^- G6 N- y
  12.     $server = DBSERVER;8 M2 f& k, C# ?  H
  13.     $user = DBUSER;
    * S! B% W1 Z# H" |
  14.     $password = DBPASS;
    # `; F% p2 `3 g, G
  15.     $port = DBPORT;
    ( x7 A7 c* ?8 s( l
  16.     $database = DBNAME;
    , e( ^3 I# N4 U' m# ^
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    & s" @% P1 \+ m9 y$ r1 u' W
  18.     $this->database = $mongo->$database;
    ! O7 Q3 p* y1 |7 p- t. K% H
  19.   }
    + L, ?- A! I0 K+ U
  20.   /**
    9 N8 `: _' z, K* }) l& O- d
  21.    * 数据库单例方法5 A; [% w8 H( @' |
  22.    * @param $server
    , L) \8 @) C) U8 o$ y4 ^* l& e
  23.    * @param $user3 M/ ~  I9 x8 {. t) `1 j$ n' |  V
  24.    * @param $password
    ; f: H7 J/ r0 K
  25.    * @param $port
    - L7 y# \9 i& T3 b( X* @
  26.    * @return Mongo
    , w" }0 N9 s7 ]! Q( {1 z
  27.    */4 z4 ?- D2 e8 `
  28.   public function getInstance($server, $user, $password, $port) {
    $ m! Z0 H! F0 \( G" z+ M0 a
  29.     if (isset($this->mo)) {
    : b& x  {) c( R% S
  30.       return $this->mo;/ v! Y  ?, Q$ W$ ~* ?1 n* J0 K, m! z' I
  31.     } else {# {1 j% T) F" Y' `3 |, d
  32.       if (!empty($server)) {+ w! r" c7 d6 n2 M! N2 H
  33.         if (!empty($port)) {
    " [) k) n, Q* }+ q- `; R1 H
  34.           if (!empty($user) && !empty($password)) {
    " F& P3 ^& |* B, M1 T* v
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");( P: n' n6 X% ?, C, R" F* i
  36.           } else {7 \0 i' z% o, n4 U" b6 |4 h
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
      k2 v! L: G+ z  H
  38.           }
    0 v0 Y* ~) u$ `4 S+ M
  39.         } else {. E* \- S8 M  W: I1 d! K
  40.           $this->mo = new Mongo("mongodb://{$server}");
    3 n+ ^6 H/ P6 B! E
  41.         }
    ) ^3 y/ [" |( U& |8 Z
  42.       } else {
    % Y% \) R4 v+ h& Y
  43.         $this->mo = new Mongo();
    7 z' q3 x2 A7 X. E" S
  44.       }
    " J& @+ v4 _! h) k2 ^
  45.       return $this->mo;
    3 a# E* f, r. j* ^
  46.     }
    & V& T, w3 s8 O8 ]5 |7 Q
  47.   }
    ; L) ?/ t; Z; x- b
  48.   /**
    , o! Z/ p( i. e# I. }
  49.    * 查询表中所有数据
    - ]  f8 a0 X) J. u' x9 l/ h
  50.    * @param $table
    ! a8 E$ k  z- w, \9 }$ m
  51.    * @param array $where
    - O2 ]1 c6 F* x) v- i+ N1 h1 L
  52.    * @param array $sort
    ! F- q5 Q  o/ F( E
  53.    * @param string $limit
    ( d: A+ a0 M! }" f4 Y! C
  54.    * @param string $skip1 i. A7 P* X( L- E
  55.    * @return array|int) [; |/ v2 y1 U4 L$ A! D
  56.    */
    3 a2 B; p6 d2 p$ A( n
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {1 ^1 M* C5 h0 `1 f( ~* r  N. ^
  58.     if (!empty($where)) {5 s8 z9 Q8 P+ n7 _3 }
  59.       $data = $this->database->$table->find($where);# H- v1 ]. A& W. k, w4 r
  60.     } else {
    . m$ f  v; z+ `1 V1 h8 I
  61.       $data = $this->database->$table->find();
    ) v" M5 d  s! @& L% O
  62.     }% F, q' D- M  ~/ e) @4 C, f- N& g
  63.     if (!empty($sort)) {! T6 Y, e& \( e$ q. q) g
  64.       $data = $data->sort($sort);/ \" q9 ]) Y) I* G* X
  65.     }
    + A) n" E( A$ \* @# U6 J
  66.     if (!empty($limit)) {
    . G' M) w9 c3 |5 r# t# V
  67.       $data = $data->limit($limit);) X' V% h0 ]0 w, K5 J% Y  _/ e
  68.     }! g+ y9 [4 e+ Z( N4 e2 K: s, i
  69.     if (!empty($skip)) {1 G& F, m" n- a& E3 \/ O1 u) V" J4 L
  70.       $data = $data->skip($skip);1 m7 W4 i, U  c% q5 `8 m
  71.     }
    3 g1 q. F3 a* U$ O; {* D! H  u
  72.     $newData = array();
    ; _9 ?3 D% ~4 k( x
  73.     while ($data->hasNext()) {* H5 ~9 j3 t) K/ R7 H
  74.       $newData[] = $data->getNext();& ?. z6 J! U  ^1 L1 j
  75.     }
    9 u3 z3 S: A7 _
  76.     if (count($newData) == 0) {
    7 _8 B$ B8 t9 X9 T
  77.       return 0;
    1 Q: M% k8 L% F8 ~; ~
  78.     }4 W1 d# v( E% c+ ]; X/ p# }" y
  79.     return $newData;
    ! U; |+ S% K" v% x" a+ [
  80.   }
    , {  }) f& R, R
  81.   /**. P8 _: [1 K4 d# G- i) s) K
  82.    * 查询指定一条数据
    3 q1 X7 ~: t" z9 t3 a6 }. t! B* H8 c3 `
  83.    * @param $table
    % Q/ {  `$ R( g8 R- P
  84.    * @param array $where! Q6 G  @5 E& Z
  85.    * @return int
    % |- a8 f# ~% h9 t* G
  86.    */
    ( e( @/ d; \2 l# {, v6 _+ C4 |
  87.   public function getOne($table, $where = array()) {4 G: S6 K. @) U, h3 C
  88.     if (!empty($where)) {
    1 I3 P8 h% D! s0 I( f
  89.       $data = $this->database->$table->findOne($where);$ w) F5 e6 v3 q8 w; H* e, C
  90.     } else {
    3 q! k) G8 S  O0 y- q& v
  91.       $data = $this->database->$table->findOne();
    . ~! N: v0 v8 t/ ^* r
  92.     }
    % Y- K  j; b$ U$ U, T
  93.     return $data;! h# y. G( w6 N* j
  94.   }
    ; E7 R8 o# E' v: q
  95.   /*** _2 C% Q. _+ \, F- p) w9 v
  96.    * 统计个数$ k' \& e' j" j8 Z% M
  97.    * @param $table1 z& I+ I$ G  U" ?  r) P6 z
  98.    * @param array $where
    ; ^7 a6 c, h( i; r4 V+ g  m
  99.    * @return mixed) J, d, m! w- m" b. j' w  J; v
  100.    */7 ?  q* u3 l" ]2 Z( Z
  101.   public function getCount($table, $where = array()) {
    5 s* Q* E6 ~2 I9 N7 R& Y+ P
  102.     if (!empty($where)) {
    & X  N4 B; u6 y5 O. ?7 \- d! t
  103.       $data = $this->database->$table->find($where)->count();9 b8 N  f. O3 E$ y: z) c
  104.     } else {* K* \6 x2 ], }
  105.       $data = $this->database->$table->find()->count();
    + ^, y% ?/ m; v  }
  106.     }
    3 q1 I4 B: k" o- m4 d
  107.     return $data;
    1 v0 D8 w% x, t8 d) {1 m" [& @6 [
  108.   }* k; K/ M& P9 K" z
  109.   /**+ R" {- c. z5 D7 y5 L
  110.    * 直接执行mongo命令
    3 z+ o5 L' Z! x4 s% Y4 r: b
  111.    * @param $sql
    * e  s" L" v2 c! U# K( {
  112.    * @return array6 {. P4 w  M; W2 w
  113.    */  C/ j6 |; L  P2 m+ b
  114.   public function toExcute($sql) {# t& Q# M, s  U+ J6 |+ @2 j# ?
  115.     $result = $this->database->execute($sql);
    ( s6 y6 |: K7 C2 T
  116.     return $result;# t3 q0 ~% C6 T/ n
  117.   }
    $ ^/ v8 |2 d! p1 G; e
  118.   /**3 \& B8 c3 o$ w3 J
  119.    * 分组统计个数
    & z( S: }" b. Q# O/ ~
  120.    * @param $table
    ! {3 F/ M& B2 U' a" N, s* e
  121.    * @param $where2 R2 u$ c2 [- c) y6 n
  122.    * @param $field
    " f  [3 {4 Q( P2 J! x; Z
  123.    */; G" K1 q) S8 s5 C
  124.   public function groupCount($table, $where, $field) {
    + J0 y( [8 d, z+ ]0 r- n
  125.     $cond = array(; R+ G5 p7 r: d( L  ]+ d
  126.       array(
    ( a; c1 v" |! ]3 E
  127.         '$match' => $where,
      }4 d0 d6 A/ Z3 V  W+ w/ }; Y; b
  128.       ),' F# y" p9 n6 d( ^( U8 e# Q
  129.       array(: V1 ]: [( h+ x
  130.         '$group' => array(2 k+ [- N$ P; J/ x
  131.           '_id' => '
    3 |: |% }! [3 Q* s3 h3 e' d% \

  132.   E3 r) l* \5 Z! v) n9 O
  133. . $field,: Q, d) M5 `- W0 G$ Z2 w7 y
  134.           'count' => array('$sum' => 1),( M1 i: W1 q% P* S' P& g
  135.         ),# y0 u4 d1 x! j) c7 p/ @) M2 B
  136.       ),3 h& {: ]; o5 Q7 Q- w
  137.       array(* w6 @! _% j) p0 G2 F8 o5 H
  138.         '$sort' => array("count" => -1),; R) B5 ?8 v7 W! X# v- w# a/ g1 U
  139.       ),
    5 w) `. T& W  S' j9 j
  140.     );& o4 t+ O# s& x. V4 B
  141.     $this->database->$table->aggregate($cond);
    0 v! s$ q+ }7 b
  142.   }2 M. \; R( T" e; i5 p% Y7 _
  143.   /**
    - M' T- l  n/ D, x; c/ p
  144.    * 删除数据" j7 n) k  f; r2 u( W! a# d) ^
  145.    * @param $table
    ; S+ ?. T# P2 @( a* b2 f2 M
  146.    * @param $where
    . _0 P. v! r/ u( [
  147.    * @return array|bool) c4 A& b4 t! U: N% X6 k. g
  148.    */
    0 i5 ^7 c+ ^% a6 W* \3 a& T
  149.   public function toDelete($table, $where) {
      [' z% `# v% c( s) H4 Y- B
  150.     $re = $this->database->$table->remove($where);( K% T: d1 K6 f3 s, O% [' h
  151.     return $re;
    2 r+ S: _5 H; U; T' h2 s
  152.   }
    3 {3 u$ Q: E# P7 i8 P' w
  153.   /**
    / n( m8 p$ k& X
  154.    * 插入数据
    5 @' C1 f) P$ B1 K# c
  155.    * @param $table
    # @, m8 y% k+ {3 p: H
  156.    * @param $data8 T( k& s0 m: U
  157.    * @return array|bool, H4 q/ p7 R* ]+ K8 }* Q
  158.    */" \* A$ |3 m, _- B8 |2 ]1 a
  159.   public function toInsert($table, $data) {* M  m* \9 n; {
  160.     $re = $this->database->$table->insert($data);
    " `5 B/ z7 e$ S
  161.     return $re;6 o3 I/ l; t! u9 m. z0 [' D/ D2 S
  162.   }
    / T7 |0 \" r5 _* a
  163.   /**
    6 e! o- Y- a* S/ k
  164.    * 更新数据
    - B" Q4 \8 a4 Z; F) n
  165.    * @param $table
    6 W0 Y# u7 i. D# a
  166.    * @param $where$ T" P, g" @' ]* a
  167.    * @param $data4 c) ^6 U$ `9 w  w) x2 s
  168.    * @return bool
    . I$ n0 @2 c6 P6 K: E7 V* `) L/ D
  169.    */
    - |; A2 `, J: J. q) `
  170.   public function toUpdate($table, $where, $data) {) @; N2 `& V/ ^5 Y+ r' @
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ; R+ B+ B( k1 K$ d
  172.     return $re;
    - t) N* d  n9 k# Z
  173.   }2 [9 T; ?0 b0 u+ C
  174.   /**
    4 I+ i* T, g$ u# o2 t& j
  175.    * 获取唯一数据6 ?' P6 e' Q# b; D
  176.    * @param $table! [* ?, O& _& z2 e& a& _
  177.    * @param $key$ g3 Y! A: T) Z4 z) I- V' Q1 H7 D! F0 R
  178.    * @return array
    * N; K& f( R% S3 \( e# I/ X& _
  179.    */4 b( Z: ]( U1 g. `
  180.   public function distinctData($table, $key, $query = array()) {; l2 Z3 F4 i1 ^1 T
  181.     if (!empty($query)) {9 I+ k: ^' S! g! R; w
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);/ d8 j) n2 d( X
  183.     } else {
    9 H% t5 [: B; l0 B# d3 m
  184.       $where = array('distinct' => $table, 'key' => $key);
    $ T& X* _+ |7 v( Z5 Q2 \
  185.     }
    ; g& A0 [2 o4 X9 @
  186.     $data = $this->database->command($where);
    % G! I8 u/ O& [
  187.     return $data['values'];5 T. D" p4 i0 j. ?4 S* ~; u7 C4 Q
  188.   }
    - G( Q( M6 W! p2 p# _
  189. }' _- A: L4 `1 v/ i/ f
  190. ?>
复制代码

" _4 G2 q8 z" h; B" g; m6 R, G6 A3 G8 O8 D9 k, y# Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 18:11 , Processed in 0.100666 second(s), 19 queries .

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