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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。& J" d1 P( ], B% c! C9 X
模式自由。
3 |  C* p& T& j; H支持动态查询。& B) M( w, a% ]3 n
支持完全索引,包含内部对象。: y. }0 E; U& S. |1 D
支持查询。
5 ~& e. A( i* C" @& [支持复制和故障恢复。1 u8 V- T+ @3 ~! M' k& q% n
使用高效的二进制数据存储,包括大型对象(如视频等)。
( L4 H5 x. w( F自动处理碎片,以支持云计算层次的扩展性( t/ w1 [* V  s8 f) C) }- E
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
0 H" ~. }& G3 B文件存储格式为BSON(一种JSON的扩展)- w7 ^3 r% [2 ]5 u0 y( @# m& K
可通过网络访问

所谓“面向集合”(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& |1 g; Q0 [9 L3 ^3 e% _
  2. /**0 v) j2 ^9 ?( ?( u+ t8 U0 e: v
  3. * PHP操作mongodb数据库操作类
    0 ?( M3 H7 w! Q8 A; W" o( {/ U
  4. */# a3 N8 \7 ?( R! {( @
  5. class Database {
    8 a" j- `. g* c
  6.   protected $database  = '';0 P( u7 r* k; x5 {* b5 [
  7.   protected $mo;- w& t  O0 ~0 z5 W7 P2 m# [
  8.   /**
    * x, \1 s  Z% Z1 x
  9.    * 构造方法  H+ D; w4 w: d
  10.    */0 @2 |* D, h( t
  11.   public function __construct() {
    7 h  g  N. Y5 b
  12.     $server = DBSERVER;
    0 E3 N4 U. p# O# S" G
  13.     $user = DBUSER;! q; s* c# d  p$ J" f0 a9 V
  14.     $password = DBPASS;
    8 H5 ^1 J8 r/ e, P( x- \
  15.     $port = DBPORT;
    + n# ?2 u+ @0 v, B1 l( r
  16.     $database = DBNAME;2 V3 E# k* ^1 w) @' Y" B
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    4 ^7 ^5 t) _  C0 E7 }
  18.     $this->database = $mongo->$database;& j) g+ O" l! e  Q& ?/ K* P- c% C0 T
  19.   }
    3 Q9 q. L* s2 L# B8 C& s% ^% r
  20.   /**6 a' c( D. n; U# g" Y
  21.    * 数据库单例方法
    " O2 e! k8 G! b2 y7 x; U% Y
  22.    * @param $server
    6 k5 X+ H: g3 m7 i, z% C1 t2 B+ l
  23.    * @param $user
    3 w, z! s1 }' X- h
  24.    * @param $password
    # x8 f# ]: v$ O* {7 [
  25.    * @param $port
    * D7 e" Q! ~% N+ S
  26.    * @return Mongo5 D3 L; P+ B  k! c: N# [
  27.    */5 D4 |' z  ?7 b6 m
  28.   public function getInstance($server, $user, $password, $port) {5 |- w4 m( s- @
  29.     if (isset($this->mo)) {- z" x7 v2 P/ H( B$ J2 X5 Q) i
  30.       return $this->mo;& G& y! {4 s# P- k$ K
  31.     } else {3 b4 |+ d: `0 I/ _
  32.       if (!empty($server)) {0 T+ Z# Q: N& K" o: S  I
  33.         if (!empty($port)) {
    - A, X# Z, _5 l5 h0 r
  34.           if (!empty($user) && !empty($password)) {
    0 Y* R. @+ r$ W$ F6 f- p
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");. ~8 h/ y; S3 t
  36.           } else {
    ) i* F" e0 Z6 O" i% ?
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");# e* }" j. `6 P; X
  38.           }
    ( g5 ^3 L* W3 |% o# i' F
  39.         } else {# m) Y2 U9 G  |% y* y
  40.           $this->mo = new Mongo("mongodb://{$server}");* ~" S8 [* W- C# c  t3 K5 Y- o
  41.         }0 O& Z6 l5 ?* K. a5 l
  42.       } else {
    4 l$ u  h9 k( w! R/ c
  43.         $this->mo = new Mongo();8 }& P% k! k, _) M: |0 n
  44.       }
    & L- ?' e9 y' m8 Z0 c% C5 _
  45.       return $this->mo;# @, v& s( J% ?) P% H+ z9 T* w+ a
  46.     }
    4 I6 A! J; l1 C( t0 P
  47.   }
    8 B) V* m% g6 N/ |. [- k
  48.   /**# N* j% \: D4 ^1 K4 s7 H- p% g
  49.    * 查询表中所有数据: ^1 |! W7 A8 e& v' \) l3 i
  50.    * @param $table
    * x3 k7 `; b- R* Q# ?$ J- O
  51.    * @param array $where
    9 b. g2 J$ F0 w, e
  52.    * @param array $sort
    8 s, y! I" K9 i' T1 }  w, S
  53.    * @param string $limit
    2 K* {/ ?* Y& i) K2 E  a% T
  54.    * @param string $skip
    4 C: o/ F- e) \& c
  55.    * @return array|int
    $ x. q( U8 {6 v2 U4 B( v9 z% G
  56.    */
    9 Q5 P* b1 k4 `- m- }' g+ z
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    / \  \, m; L) v  T, N# g
  58.     if (!empty($where)) {
    / H7 a* G0 Q& J  G( m/ ?! R3 V, G
  59.       $data = $this->database->$table->find($where);
    * W# D! y" U0 i; B, a# w/ m
  60.     } else {+ T6 q- S& b% d( D) ]/ r) J& w
  61.       $data = $this->database->$table->find();
    9 ^4 [/ @( L. y
  62.     }& Q8 h4 y! x+ g) M. r7 ]
  63.     if (!empty($sort)) {
    8 ?4 p. X! ~% t$ d# f# x
  64.       $data = $data->sort($sort);: y- C/ u$ W# g, a* e- I
  65.     }
    : S& l/ p+ C* k' {0 ]
  66.     if (!empty($limit)) {% k$ @& K; i& s- [3 {5 R
  67.       $data = $data->limit($limit);' ?  H( s% j% A  M
  68.     }. P0 h$ f3 _( u5 B/ v9 N' {
  69.     if (!empty($skip)) {
    % w  f! E- q- W; C0 ]6 |
  70.       $data = $data->skip($skip);
    . Q6 J% i/ ?2 Z
  71.     }* @. s! r4 N! Q, l9 i% R9 ?5 B8 ^
  72.     $newData = array();: a$ T5 T- Y9 |9 Q5 ~) Y/ _+ a
  73.     while ($data->hasNext()) {7 N+ F* w0 E+ w4 _" p  Q2 T+ ]
  74.       $newData[] = $data->getNext();4 W  ^% Z; |- {; H
  75.     }
    + h( s/ t% x- \. Q1 E
  76.     if (count($newData) == 0) {# Z7 Q& o1 v) a6 C2 j0 ^
  77.       return 0;
    . I, O) w$ L1 M* G  q
  78.     }
      M( ]- i6 ?' p- Y  z
  79.     return $newData;
    / ]0 C! ^3 z8 j3 ?* ]6 J0 K
  80.   }, d8 u% U6 e% O
  81.   /**
    # S% T4 \/ o' I9 t+ D( D: C
  82.    * 查询指定一条数据
    ) _& J& C" }1 |( P7 y( J
  83.    * @param $table0 k# j4 F9 t5 T* D# I) E
  84.    * @param array $where" ?; ~3 i) {( i- O5 G. y" W
  85.    * @return int
    / L9 [( `9 ~' T2 d+ m1 T
  86.    */: o! K  g2 q1 R" e0 ~0 s8 |0 [
  87.   public function getOne($table, $where = array()) {4 w5 A3 j$ |2 G! X) g" w' F
  88.     if (!empty($where)) {2 S& _# E  S5 z$ ~0 \# j; `* w
  89.       $data = $this->database->$table->findOne($where);
    7 w( {6 B' d: T$ \2 G( ]
  90.     } else {
    ) J+ _; W! A7 [. X$ ]9 p* ]
  91.       $data = $this->database->$table->findOne();8 o7 |6 Q! o. s4 j. i
  92.     }
    9 P1 t" Y: p2 I" ^8 c. y
  93.     return $data;
    2 m9 y6 b* r5 B- @
  94.   }
    ) h( r+ p$ ?7 j, [' f# n
  95.   /**
    : C0 O6 u) H  |9 {6 w
  96.    * 统计个数
    $ R4 |! C5 p  t  R7 }# z
  97.    * @param $table
    * s& r  g. W, n7 a' w3 v7 l
  98.    * @param array $where
      {4 c7 U, |- j. w- V
  99.    * @return mixed
    $ M) }- v" P$ l: q, B
  100.    */
    9 w' S, q7 L, {# t) z
  101.   public function getCount($table, $where = array()) {
    % b4 G4 p' z4 B/ n. n0 v8 A
  102.     if (!empty($where)) {, {9 _6 H3 i1 M7 c+ y1 D
  103.       $data = $this->database->$table->find($where)->count();) r! ], B$ J( p* `& C! m
  104.     } else {
    4 X) n$ I$ w' F. _
  105.       $data = $this->database->$table->find()->count();
    5 U5 M" [. E- E) T' \* [1 ]
  106.     }
    . W6 c' D1 f; ]6 e7 c: G
  107.     return $data;/ i/ Y6 H+ a4 M# \
  108.   }5 i! b4 P7 M* y8 J; h0 e
  109.   /**
    + W1 H4 t* v( @) F/ r* J# A: H
  110.    * 直接执行mongo命令, p3 f% J, A6 T( Q# G
  111.    * @param $sql
    & E" _: J" w* p& `0 |0 Z- \. @/ E
  112.    * @return array% Z7 Y5 x& t& ^1 r" `. X5 ^
  113.    */1 b# w" d3 U; q; e9 B1 B
  114.   public function toExcute($sql) {; C5 w# M) Z, {
  115.     $result = $this->database->execute($sql);* o" l! R( T, D
  116.     return $result;
    1 r& s8 Q" G) Z
  117.   }
    " I* F3 ?! _) Z% K0 D- e/ B! Z( N
  118.   /**
    + y( G- B( g& n/ _' S0 U. l* _
  119.    * 分组统计个数# Q% W6 e" N& D8 @6 U6 T
  120.    * @param $table+ U6 Q- \  c7 V
  121.    * @param $where+ k' }/ B5 k2 J, n7 q: S, x
  122.    * @param $field' D8 g, T: d% c$ X& m- x" B6 L+ `  E
  123.    */
    1 E2 _' q6 B0 X* q% U7 n
  124.   public function groupCount($table, $where, $field) {  T5 ~; _& O9 q* e2 P4 S' A3 H5 v. @
  125.     $cond = array(
    9 R7 D/ \& v3 ?( Y6 `1 x$ I( p
  126.       array(& G0 W: k. ^6 F3 R' e' U# d
  127.         '$match' => $where,
    / \' P% U% a; l! z: w) S3 j
  128.       ),* T. m3 t: P" n' w' o# N
  129.       array(
    ) Y9 ~7 n) _$ w( }# e
  130.         '$group' => array(
    8 G3 c" m2 }" H  y& ~  {
  131.           '_id' => '; e/ Z; o6 u8 X/ Z2 l

  132. 6 }1 s: w) P2 Y! B1 ]
  133. . $field,! w  r/ I" S2 F
  134.           'count' => array('$sum' => 1),) I& l. c$ ^0 K3 m: K
  135.         ),
    6 p  m) T! b2 r" j% U
  136.       ),# Q) E( v& h; G4 y
  137.       array(' E  R, b; C: ?7 \8 x$ K/ ~
  138.         '$sort' => array("count" => -1),9 V. u3 A3 \  `1 Z) x2 v$ m
  139.       ),
    - v6 F$ v' z% I- K$ V4 L: x& I
  140.     );1 y- ]8 A" k% \6 I! d
  141.     $this->database->$table->aggregate($cond);- x; X8 h" E* O) a8 Z8 W+ S
  142.   }
    + I% W$ s& |4 o$ ^. d
  143.   /**/ D) |! ^* w5 {% m
  144.    * 删除数据
    0 m! w: |, k/ Z' h$ |- q
  145.    * @param $table
    7 Y* F) M. I6 z2 a! R( j
  146.    * @param $where
    ; j4 a) @9 O; a: M2 `  ~3 P
  147.    * @return array|bool
    # D: v" v* E% s4 P4 r* S0 X
  148.    */
    4 c$ e& w. K) d
  149.   public function toDelete($table, $where) {' }# U8 ~) G% |
  150.     $re = $this->database->$table->remove($where);7 d: D2 I+ O3 P+ p8 A$ l5 w
  151.     return $re;
    ( \" s# H3 C( [5 _7 M
  152.   }* R$ X) L% C; t6 A8 R; \# S
  153.   /**
    2 [0 g1 B. `" x2 T9 M( j
  154.    * 插入数据
    7 x. ?3 ^0 A/ g' S+ |
  155.    * @param $table
    ( ?, Z3 F6 F3 u9 F$ }7 Y, }% U5 j$ f$ K+ n
  156.    * @param $data
    ' [. J7 p- g3 ~% J  i
  157.    * @return array|bool2 p9 B2 \3 s/ h
  158.    */1 U0 t0 y- ~$ U0 Y
  159.   public function toInsert($table, $data) {1 }, j* W* Q& ^5 d+ C6 E2 h9 E
  160.     $re = $this->database->$table->insert($data);& F8 u. a3 K6 g" h
  161.     return $re;) W8 Y( h- ?% n7 t
  162.   }1 N" ?9 x/ e/ t. P2 p+ p5 j+ n
  163.   /**
    4 j1 c( F6 N2 D0 A( k
  164.    * 更新数据& e; I7 e& l8 {% O/ r! z
  165.    * @param $table8 z# Z4 n# U7 P9 `7 i' b8 E
  166.    * @param $where
    - b0 Q+ A2 U% P# P
  167.    * @param $data" m2 R5 Z/ A7 @4 _! M2 p
  168.    * @return bool% H8 f% w0 e' x3 ?
  169.    */$ B- h& ]" R8 J/ f
  170.   public function toUpdate($table, $where, $data) {
    + B7 K& Z2 y3 L- U
  171.     $re = $this->database->$table->update($where, array('$set' => $data));) E+ x- z8 r5 g8 i
  172.     return $re;
    ' _2 s1 R1 m- E. i* ?( ?
  173.   }' V: [, f! Q* @  }
  174.   /**4 c% a& O% Z' e- m
  175.    * 获取唯一数据
      K5 C' p/ h% F" _( I0 ~  u. o) O
  176.    * @param $table8 y# j( n+ r1 X6 _" K; w+ K( n3 S
  177.    * @param $key% D8 ^- f. ]* U' W) L5 K
  178.    * @return array
    3 @* ?; |$ H& O0 |# c
  179.    */
    0 a: W( Y- M7 F
  180.   public function distinctData($table, $key, $query = array()) {7 v3 I  ~8 u* r0 D& @
  181.     if (!empty($query)) {% }- j$ l) p% `/ `
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    . s9 }9 }3 @) N6 O/ L
  183.     } else {* `+ F! h0 m# T' n% {: u8 v
  184.       $where = array('distinct' => $table, 'key' => $key);
    ' ^% d5 w, x: m; I& h- l8 j
  185.     }
    3 a, F0 s7 R6 m% M, I0 K1 \
  186.     $data = $this->database->command($where);
    . E9 h4 L( j6 d" e) t
  187.     return $data['values'];
    ! L. ^/ O! E  ^8 D: y. _4 Q, |! d" [
  188.   }
    ! f" X2 Z# |" K# H
  189. }" \0 j# a7 _5 a+ W3 i
  190. ?>
复制代码
+ j- Y0 L1 N1 {) B

9 _4 J. f7 i" X- d: w3 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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