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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12497|回复: 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- C0 ~, Y$ Q/ g) n) t
模式自由。- M+ c1 G* ^( {1 p& `* b1 b
支持动态查询。& @8 X( x' J& Y% q( u; t
支持完全索引,包含内部对象。
2 b9 g5 s" o0 q5 O( v* w( y支持查询。8 L0 Z, q, m" @& ^4 u& ]9 D
支持复制和故障恢复。
3 J+ w  a. L; I" m使用高效的二进制数据存储,包括大型对象(如视频等)。
4 H, n( q! {, F' y自动处理碎片,以支持云计算层次的扩展性
& q6 W+ ?& h  j" v* G0 G支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。- g0 c& m- }, a
文件存储格式为BSON(一种JSON的扩展)& B6 c3 ]: w& @( p
可通过网络访问

所谓“面向集合”(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. {* S" p: b2 F
  2. /**
    ( ^5 a& {/ V4 }8 M
  3. * PHP操作mongodb数据库操作类4 L" M, o" K  e+ _2 L- x
  4. */0 z/ T" F# e+ c) o2 l9 t# U4 w
  5. class Database {: q- D! ]3 e' w! Z9 V  A
  6.   protected $database  = '';
      I& r. u9 C( B  Q, O3 {
  7.   protected $mo;* y. A" t  C" W- }
  8.   /**: N" g1 p) a9 D3 ]+ p' E
  9.    * 构造方法
    3 g% f; o- e4 v* Q& U
  10.    */
      A* }1 y8 z1 ~4 w
  11.   public function __construct() {' Y; h, A2 h" ~
  12.     $server = DBSERVER;6 v+ m: j: M3 f7 X! {' K
  13.     $user = DBUSER;$ S. B: y! d: o- E& o0 o: `
  14.     $password = DBPASS;
    # P+ S. O) Y2 K) g3 p$ S7 r4 ]2 ]; j# |
  15.     $port = DBPORT;
    " [" X7 J- u6 `" i3 W, m9 }( T
  16.     $database = DBNAME;
    / e/ O  v  q0 w# ?6 _0 Q/ l# M6 d
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    - y) o7 G" ^4 d& V3 O) z
  18.     $this->database = $mongo->$database;' N0 u/ v7 N8 y. \
  19.   }
    ! s7 O9 k/ h3 k0 U) q
  20.   /**, _: n; r' K! A' n
  21.    * 数据库单例方法/ }" y8 U$ u/ W' o3 b
  22.    * @param $server! H0 b5 u, N3 |" u: @4 o( l
  23.    * @param $user# j% V# M1 |' ^% ?
  24.    * @param $password
    9 n7 ?5 e  @: n9 L
  25.    * @param $port  g9 \* C7 S2 X- ^2 Y7 o
  26.    * @return Mongo
    - n6 M3 Q; {+ Z1 t8 H7 p* z0 i& i
  27.    */
    ( r+ f/ f9 W) a6 M- R8 S" D( }
  28.   public function getInstance($server, $user, $password, $port) {+ r- k" K! g$ e' v9 a5 @" p  a
  29.     if (isset($this->mo)) {
    6 m* |; k$ ]& \" o& D' ?( Q9 e
  30.       return $this->mo;
    ( L% F$ r  L; \$ x( K& t! E
  31.     } else {7 H$ t5 b) p7 h3 H4 s. G2 Y
  32.       if (!empty($server)) {
    1 K9 `. h+ W9 g: `6 q
  33.         if (!empty($port)) {# k7 t! \8 i2 w' l* P
  34.           if (!empty($user) && !empty($password)) {2 \" k* T# _6 T7 t0 E4 \1 n. n
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, i* i6 F4 u# _5 {4 Y) Y6 f
  36.           } else {/ m4 E* t+ X- r, u7 \7 _- S1 S% f
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");2 @2 b" l& j( z. H8 p) x% a  A: z
  38.           }& \3 v7 y  ~0 n. H/ D3 p
  39.         } else {
    " v* p; k# s8 S; G% h5 t
  40.           $this->mo = new Mongo("mongodb://{$server}");
    2 E  x" f6 J% |$ G; c, F
  41.         }( K, X1 U7 U. i0 Y8 X" z
  42.       } else {
    - s# D# \. h% v: W) |/ i
  43.         $this->mo = new Mongo();
    + E4 y1 u& K) K- |
  44.       }, _5 ]9 l- \. d/ }; |
  45.       return $this->mo;1 ?) B: c" {6 e
  46.     }9 t. g0 c4 p& ~4 w+ A3 s! Q
  47.   }6 e9 o) Z' g" n  q. y0 S, _
  48.   /**
    * G4 x; e/ F, j
  49.    * 查询表中所有数据( p* v; \' l% p% ?+ z% H2 t, m
  50.    * @param $table2 y% k% I6 i! f7 Y
  51.    * @param array $where
    ( W& X, C! `& J
  52.    * @param array $sort
    ! d) {5 w4 W$ q( E7 r6 |
  53.    * @param string $limit: V5 |( M1 m; V5 ^+ s/ f7 G8 t! ^
  54.    * @param string $skip
    4 [* V2 t( l  h) q
  55.    * @return array|int
    " A& o6 Y: e! L% b% l6 V8 T6 [; S
  56.    */
    2 f) K1 A, `- ]# L; ^2 ^6 T$ {
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {+ h. T. T& ^5 c" e7 V3 d
  58.     if (!empty($where)) {
      S% ?+ J2 b$ g
  59.       $data = $this->database->$table->find($where);
    ! |7 e' Q5 C; t& t1 T
  60.     } else {
    - `3 J9 t$ o- r( [
  61.       $data = $this->database->$table->find();
    7 k- S. ?' r- \9 j! }( }
  62.     }
    / ~9 y: g7 ?8 m* m7 Y: T
  63.     if (!empty($sort)) {
    8 ]+ l# R" G* {$ A
  64.       $data = $data->sort($sort);
    ) r1 t5 K( |, \) G. ?3 \" y2 M
  65.     }
    $ r) ]8 {' L+ s7 `5 S$ ?* z9 t
  66.     if (!empty($limit)) {1 T5 ?' T: L- v3 Z0 H3 H
  67.       $data = $data->limit($limit);
    " {/ z! K$ \! b# R4 c
  68.     }
    ) H7 @% g6 }& M+ J4 q/ e
  69.     if (!empty($skip)) {
    " H0 t' O# y/ q8 X" r' U7 ?
  70.       $data = $data->skip($skip);
    ( |6 H4 r% R0 L' [/ z- g
  71.     }
    0 t$ U+ V9 a, J
  72.     $newData = array();6 x0 u- g$ p* w7 k( b
  73.     while ($data->hasNext()) {9 J* d  |0 l0 [, ]; ?& W
  74.       $newData[] = $data->getNext();
      y/ f8 V* f, i* b+ w
  75.     }
    ' O' Y: \4 u2 |& {' [' l6 H# N
  76.     if (count($newData) == 0) {
    9 c, ?6 B. c: s0 [0 ?- X
  77.       return 0;. L1 f  \% s2 h$ V* Z) @7 g
  78.     }9 u9 _3 v) b5 d* W
  79.     return $newData;
    $ Q( c! {: R- A/ A) x2 t$ Q
  80.   }
    2 u/ M2 w0 c' j' d3 ~# Z2 R
  81.   /**6 }& @% ~) j7 R+ W% {! v
  82.    * 查询指定一条数据
    ; d; s" R4 S, z( R
  83.    * @param $table# V# ?. o; M6 `$ l8 o; X4 S
  84.    * @param array $where( {  d' x$ n" A& j$ F
  85.    * @return int7 m5 B5 E2 W' s7 N
  86.    */& A* V+ w; \1 l. j. G2 r
  87.   public function getOne($table, $where = array()) {& J! f: Y5 O; S: _$ I; o* x
  88.     if (!empty($where)) {
    0 X6 Y+ t: {4 L
  89.       $data = $this->database->$table->findOne($where);
    ) j' w6 c3 e% q. ^5 ]* w+ ^' {
  90.     } else {" F6 I+ L' k4 e' r1 b3 T- S% v
  91.       $data = $this->database->$table->findOne();8 V2 V& m( t; X
  92.     }
    # [& g/ ~, P8 f: c
  93.     return $data;+ ^2 ~! G" y% O
  94.   }! m/ X0 Z9 H1 U! I7 R. v+ Q
  95.   /**
    + ]% s8 I$ ^/ r1 b* D" S, Z
  96.    * 统计个数
    * p. F$ }1 D# _" Y6 v
  97.    * @param $table5 y" d( h- m' Y, x1 w
  98.    * @param array $where
    , W  s2 e7 G/ q! X; G; J9 @
  99.    * @return mixed
    # t- K3 ]& T( A( p
  100.    */, }; v% S9 q5 D# f: L$ W
  101.   public function getCount($table, $where = array()) {
    ' }& A, T% E9 N2 v
  102.     if (!empty($where)) {! F6 p/ y& Z3 m
  103.       $data = $this->database->$table->find($where)->count();
    ; X: H) \% l7 F0 \
  104.     } else {
    - q+ S8 h- B! k6 I8 y! f- A1 E
  105.       $data = $this->database->$table->find()->count();7 d+ w7 H# I8 b& y) x3 c
  106.     }! d8 V+ t, L  r) a  G8 s" q9 ]. J
  107.     return $data;
    : Z% t0 h2 z; @0 }
  108.   }
    0 [, {( Z# Q/ C/ e, Y: r  t7 C
  109.   /**4 X8 m: G: s* ^6 z, y) C
  110.    * 直接执行mongo命令
    + p# `- {' B4 Y7 m
  111.    * @param $sql  ]* g  X0 u8 Y" t' Z
  112.    * @return array
      a% S) n$ Y. ?! x$ D6 B* q
  113.    */
    ' |1 M7 [; y( [0 X6 v* Q
  114.   public function toExcute($sql) {7 E: ^& F  F" w; z8 S
  115.     $result = $this->database->execute($sql);2 R. n' w- U9 G3 M' n
  116.     return $result;# j4 h1 I3 i2 G0 ~% P: B6 \
  117.   }$ V: V+ E; x# W: J% S" Q& k6 |
  118.   /**9 u7 E, [, x4 _! x! h5 m/ v' j! J
  119.    * 分组统计个数7 d9 C4 W& p5 z0 U" f
  120.    * @param $table$ S3 R  D7 N$ J
  121.    * @param $where
    ' r" Q0 Q) e' l# Q( H& z
  122.    * @param $field$ i6 r2 r3 P6 f3 r
  123.    */
    4 a2 E0 y) V3 V
  124.   public function groupCount($table, $where, $field) {
    : {1 h9 _7 U  X9 H% b. H2 N2 Q9 i" b
  125.     $cond = array(: a% l3 \/ m) X' M( k0 d5 e+ X
  126.       array(# j9 e5 o' S1 h9 o0 R, h  P7 y
  127.         '$match' => $where," U8 e8 K( [+ V# n# {1 u
  128.       ),
    + U; o$ l8 q; K2 g- P/ A
  129.       array(' x$ D( {6 n* N' }# F- L
  130.         '$group' => array(
    + n& h: R# @/ e0 k4 s0 n
  131.           '_id' => '
    # E4 i, o7 d- n: T+ u* h/ i/ l

  132. 6 d+ [6 p7 U, k1 r9 `: Z" U
  133. . $field,1 ]5 V* b' o2 {5 H- y9 ^
  134.           'count' => array('$sum' => 1),
    ( w# x; a- O$ x7 J! a7 A& P
  135.         ),+ h. g! m9 k/ o
  136.       ),6 U9 j+ B. }* b% {
  137.       array(
    " E* o1 ]$ H. z8 O/ K8 ?6 F  o
  138.         '$sort' => array("count" => -1)," \) Y, L0 [9 g9 q: h
  139.       ),6 ?& |; U+ ]& F- K3 J/ Y& [
  140.     );
    2 f( }0 u9 i6 T4 _
  141.     $this->database->$table->aggregate($cond);* c, w! H* j# Y& G% b7 }
  142.   }
    6 D  E+ ?3 B0 x% r8 L9 E
  143.   /**
    5 z  {& C) s, D/ v: r8 G4 Q
  144.    * 删除数据
    7 X0 w7 s7 x! a2 U( n/ m
  145.    * @param $table4 V/ S4 C. J& c5 C, f- E0 H: H
  146.    * @param $where0 i' W8 t. T" B6 J" f1 d7 b3 j9 z
  147.    * @return array|bool1 f: q* s% D  E1 `
  148.    */2 s9 ?- S# O8 @) C
  149.   public function toDelete($table, $where) {
    6 b2 B, C# h1 W
  150.     $re = $this->database->$table->remove($where);2 M0 o5 e) ?* ?5 H  p& C) Y
  151.     return $re;
    ' m$ z) a9 q+ k) A* Y3 H
  152.   }
    3 j$ [  p( w. N% n* F
  153.   /**0 }# R* |) c3 v3 c9 u
  154.    * 插入数据6 C: t! J& t5 j$ B
  155.    * @param $table) W  [3 ?6 F4 o) r- W
  156.    * @param $data
    ' S1 F! K6 S- N, D; P$ i
  157.    * @return array|bool
    * L' j- p' w4 }- ^4 q
  158.    */
    * |+ x% \: p1 F0 ~0 e0 y' P
  159.   public function toInsert($table, $data) {8 ?, B5 f' C, A
  160.     $re = $this->database->$table->insert($data);
    ) y! c1 C6 E, }: _% {, {3 L- B
  161.     return $re;0 y  s6 E, j6 o* m, ?) ]/ N: I# |* D- O
  162.   }
    2 x. N; i! `4 p& K
  163.   /**
    9 d* g7 j' G4 b) r# w: L  k; @
  164.    * 更新数据8 i( `& D: A* a/ W
  165.    * @param $table9 k! l" g$ b3 r2 v6 l
  166.    * @param $where
    $ g2 X: q) v8 Q
  167.    * @param $data  L  F( w# w  j; i- y  {
  168.    * @return bool
    * F' G+ n8 Q/ @. q
  169.    */" W% V% r9 ^% C4 g! A' _$ ^
  170.   public function toUpdate($table, $where, $data) {2 k5 X8 X& \! ^$ w
  171.     $re = $this->database->$table->update($where, array('$set' => $data));, k# n/ E" E1 c
  172.     return $re;
    3 v8 O, ?. r6 e* |* F, Q8 B/ a# A
  173.   }
    ! o7 K" n) v* z5 |/ h8 D5 A
  174.   /**0 @! o6 F! E- T0 g# L4 G. [- c
  175.    * 获取唯一数据. W$ N/ f0 \9 }7 k& F$ t5 |! n2 v3 k
  176.    * @param $table8 c! g+ {8 G9 B! @
  177.    * @param $key# o! ^1 V* i0 t5 s1 S- u8 d) H) n
  178.    * @return array/ l5 a: j7 J+ X
  179.    */
      K7 g. V: D' @- ]) T3 r5 R
  180.   public function distinctData($table, $key, $query = array()) {1 g6 s  V1 Y/ i4 b
  181.     if (!empty($query)) {
    / L8 N1 H) ^9 z7 D4 p# z
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    - o$ H! l- {% s/ i& @
  183.     } else {
    ' _0 [, F7 F# z
  184.       $where = array('distinct' => $table, 'key' => $key);. E/ W: @4 a6 }6 m* ?
  185.     }
    & E* x: g+ Y. W, f2 U" F* T9 [
  186.     $data = $this->database->command($where);2 h1 v9 Q5 u& L0 a: _% P
  187.     return $data['values'];
    9 j3 Q: j/ d% g9 N+ i
  188.   }
    4 C( I4 w8 g1 X& `
  189. }; E: O6 q# J, o( _1 T
  190. ?>
复制代码
4 t+ l7 A  I& M# C+ k

+ a" Q/ m. k' g7 v8 D# C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 12:17 , Processed in 0.144672 second(s), 20 queries .

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