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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。& @8 i6 d8 ?5 ]; [5 M
模式自由。
3 j6 [3 Z5 s9 r) c: L# y, E支持动态查询。
' o& C  G7 q; O1 n支持完全索引,包含内部对象。
& m; X& B, l/ B支持查询。9 ?, d: e% Y. Y# c! q8 b% e
支持复制和故障恢复。* ]# v0 o* y2 E! G0 ]% K1 ^
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 {/ u* m. a7 r自动处理碎片,以支持云计算层次的扩展性3 i" s  r2 R1 @8 [  l* O  I
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
/ t+ ^& p$ G! L  Q文件存储格式为BSON(一种JSON的扩展)
' a# @$ P, Q4 ~. n. 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; [/ u& z6 X% G' p  Q& x
  2. /**
    % _" z" K- c/ l2 j0 e. A
  3. * PHP操作mongodb数据库操作类
      `- o, Z, R, M- Y" ~) N
  4. */0 X! T) R& P# N: @  g: Y
  5. class Database {; C6 t8 H0 s/ ~$ F; z* [
  6.   protected $database  = '';5 V* n9 |  C1 V0 g2 K& @
  7.   protected $mo;! {7 t" W7 Y# k# G' Q) F5 A
  8.   /**! b  I! N% N2 G# q5 h) g+ n
  9.    * 构造方法
    , p) k: P3 ~) P4 \& C5 X
  10.    */
    3 S3 h! z8 e# o. n; n& {
  11.   public function __construct() {
    & m0 u2 ^: J" r" k+ Z9 P
  12.     $server = DBSERVER;
    1 ]! D3 \) H# y* [, H7 @+ @
  13.     $user = DBUSER;
    / e5 `+ a' [4 M2 S( D4 |
  14.     $password = DBPASS;
    9 z2 g! a1 h. H5 c
  15.     $port = DBPORT;
    7 l; c: p8 N4 `2 s" Z9 ], _  b) ?
  16.     $database = DBNAME;
    8 j! o) n! K7 `6 U
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    3 y+ g3 s- `& ~8 a9 f% _
  18.     $this->database = $mongo->$database;
    + {0 A2 G( _5 a! @
  19.   }5 e' j% P2 O+ ?1 Y1 n$ i; U9 P# S
  20.   /**
    ' \, @) W2 w6 k6 U- \; U( l5 H
  21.    * 数据库单例方法
    + P/ l7 F4 H0 X. d) A
  22.    * @param $server7 w# Y- L- X% I+ ~/ a  k; ^# H4 H2 D
  23.    * @param $user9 m' |4 `+ g) l) H( v! ?2 s
  24.    * @param $password
    , I, i: ?: o! [
  25.    * @param $port3 [' u" f. U  i* C" F3 D
  26.    * @return Mongo
    5 T0 ]) R: ~- H. v& Z9 _2 K( V- g9 X3 s
  27.    */
    , L8 V7 T4 {0 Q. W
  28.   public function getInstance($server, $user, $password, $port) {( Z+ u( y6 v* }: L2 e0 r2 c7 p; X
  29.     if (isset($this->mo)) {% s8 s% Y1 \6 u$ u3 I
  30.       return $this->mo;
    " T# r- B8 S% }+ |$ h
  31.     } else {
    ; U* D( z: P6 U6 A2 \
  32.       if (!empty($server)) {
    1 J, Z, N, o  ]0 P/ A
  33.         if (!empty($port)) {" S* y$ T" u. V- K" B4 l
  34.           if (!empty($user) && !empty($password)) {
    : E5 }' \5 C  U, {7 [) V
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    - K/ o2 z0 V" y" `8 e6 ]
  36.           } else {
    % D. i/ S8 M; ~: i
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    / t9 M# K9 k2 T( M( p1 e  T
  38.           }) f) O( L8 q# e
  39.         } else {, J1 ?3 S; C7 H5 A2 h) x" D; w
  40.           $this->mo = new Mongo("mongodb://{$server}");
    . i0 Z. {  U) v
  41.         }8 ]4 ]1 k* G/ u  V. g. G+ I$ B
  42.       } else {" J% g* R# O; `6 F& t
  43.         $this->mo = new Mongo();
    1 F- `# W; X( R% A/ F5 e0 t
  44.       }! t4 E% A2 ]! F# N# R
  45.       return $this->mo;/ f1 ]* }/ S2 I3 d: j
  46.     }: Y0 I6 `, ?& ?8 `  S/ e$ N
  47.   }, Q0 Q; q5 J, p0 d
  48.   /**0 y; T3 i- p. p8 P
  49.    * 查询表中所有数据
    2 M5 C$ q2 }2 t
  50.    * @param $table2 B5 f0 A+ x8 p( h: f) I
  51.    * @param array $where3 `6 m' T1 Z# S# R' G% a" J, J' k
  52.    * @param array $sort! l  X6 {- F% ^
  53.    * @param string $limit
    0 F9 a9 ^- E3 C' |
  54.    * @param string $skip
    ( K: }" r/ `" e8 [* J8 _  ?
  55.    * @return array|int5 f" @2 s3 i& Y. H" c7 O1 d9 L7 q
  56.    */- L% l+ I$ A- {2 v1 k
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    $ x3 @3 N4 M: A3 U8 [2 E$ b; `
  58.     if (!empty($where)) {
    , h. q) P, i: [/ k5 e8 s2 K
  59.       $data = $this->database->$table->find($where);4 y; o: x9 y! U& B' P7 b; v3 `
  60.     } else {
    2 R: [! c( x% T7 v2 I
  61.       $data = $this->database->$table->find();. n3 S: C7 S; S" N+ ?
  62.     }
    . ~6 ^6 v+ e) @, C7 _
  63.     if (!empty($sort)) {
    ! B# q% n& T% |8 Y/ ~
  64.       $data = $data->sort($sort);
    # I+ }  z4 b; f) Y: ?! V' q8 {
  65.     }
    , ]$ v, m) E5 Z6 {! |, l8 x
  66.     if (!empty($limit)) {
    - f( b& r0 S! R
  67.       $data = $data->limit($limit);0 b$ T) g0 H& \3 s! [
  68.     }
    3 L+ ~4 A1 L! i, [0 Y
  69.     if (!empty($skip)) {
    * [# e# s4 [5 Q' Q6 h& h) @
  70.       $data = $data->skip($skip);
    7 i! |' q1 D% ]4 @' g' G/ ^) b( b
  71.     }
    $ A& ~$ ?8 z1 x% }0 I
  72.     $newData = array();
    % R6 a0 @; E$ v. e  m! j' Y# n: z  Q
  73.     while ($data->hasNext()) {
    - v* }2 k) t4 d
  74.       $newData[] = $data->getNext();9 q5 ^3 H! n) @1 I- [
  75.     }
    / s# r# |2 e+ U; A' l/ ]/ c# [
  76.     if (count($newData) == 0) {) s. ?4 K/ G+ H! {/ F/ S( I
  77.       return 0;+ c' J3 |4 g; M  _! l! h" I4 k4 V& }
  78.     }
    0 O8 V! J- T, t8 O$ A! ]. r
  79.     return $newData;) z! |" h8 A( l$ R" U8 w7 @1 _
  80.   }, s0 Q$ C9 X4 |: _8 H( ~* u4 h
  81.   /**
    $ i1 b' W$ L0 M3 O0 W$ n" e7 d
  82.    * 查询指定一条数据
    * `+ b- w8 v- s- i7 u- C
  83.    * @param $table- }9 G' u% T  O/ @
  84.    * @param array $where
    2 y; E% Z8 H0 j' a2 y3 f' D; `
  85.    * @return int! L' Y7 j. E( m+ o# ?9 i% p
  86.    */# y) \) W) s9 ?. F  L8 G
  87.   public function getOne($table, $where = array()) {5 |9 u# M) g; }* T/ R1 y
  88.     if (!empty($where)) {
    5 B9 }1 D- X6 F3 g* v
  89.       $data = $this->database->$table->findOne($where);
    8 i6 d/ r/ S/ I+ r
  90.     } else {  E& s" G! [' O5 l: P; O, Y' @( p
  91.       $data = $this->database->$table->findOne();
    3 j% M! D8 Z3 D0 ~' `, @% h
  92.     }
      N0 _: {" p' p( ?
  93.     return $data;% U- ], P$ i) x6 k
  94.   }: I  d2 [' O# c: D
  95.   /**
    1 k9 J7 d% N3 v. c) a4 l
  96.    * 统计个数& G+ H) k/ h/ w  x, c
  97.    * @param $table
    ' E; s4 k  f6 ^7 A
  98.    * @param array $where6 {- z! k! y0 `$ }. z
  99.    * @return mixed/ t5 l* }3 I; B1 X
  100.    */+ F; a1 [* {( B+ a# t
  101.   public function getCount($table, $where = array()) {+ D4 f, W9 h' R9 U/ [. g
  102.     if (!empty($where)) {
    ! n# |0 }* [3 {6 l4 g2 A
  103.       $data = $this->database->$table->find($where)->count();. A4 @$ |* V9 Y. o
  104.     } else {
    3 g7 Q6 V7 C$ y- r5 k, @
  105.       $data = $this->database->$table->find()->count();5 ~, q7 L6 t7 p  F
  106.     }+ j; O/ t8 W& o6 ~  T. G/ [
  107.     return $data;
    % ]: A) B! L! @0 ]" x# B
  108.   }% g! @. H% j6 p2 z/ _2 b, j/ n
  109.   /**/ C$ c: G# F) V6 r5 T
  110.    * 直接执行mongo命令% H" U/ L* B# M9 \# I
  111.    * @param $sql6 d3 A" [6 T$ s% ^( ?# s
  112.    * @return array5 K6 i- P: p; m  r# E
  113.    */; q2 H: {# {8 n% m' x9 i' Q* P7 t1 d
  114.   public function toExcute($sql) {4 o8 [- z) }- ^4 t" R
  115.     $result = $this->database->execute($sql);
    . d) k7 @% g4 B- O) y6 B
  116.     return $result;
    0 }4 }" J, [) Q6 C! X. D5 g: l
  117.   }
    " p# X; `6 ~6 n
  118.   /**
    4 F, f+ j2 a# p7 v! w5 I
  119.    * 分组统计个数8 Q% T6 ~, |( \0 s4 D; g7 Y
  120.    * @param $table
    7 t* x" I( V: ^! P; S
  121.    * @param $where7 D2 I; K* h) U1 f) ~* }4 W: U
  122.    * @param $field
    / A1 E9 ^( O# H8 U) `8 {
  123.    */2 B4 ~8 A$ b, F8 r; ]: v' h4 b/ T4 z
  124.   public function groupCount($table, $where, $field) {
    + @. {0 g. N" F$ ~5 G6 S9 _% W) p5 q
  125.     $cond = array(
    + u" s$ V0 D  U# Y+ g- o0 f
  126.       array(
    ' @& u' v( }$ j' N
  127.         '$match' => $where,
    9 C9 d; J! v2 l% t2 X
  128.       ),8 T$ F# G2 z. X' [+ O0 X) Q: F
  129.       array(& M& ]6 j) J% [; U8 ]) a
  130.         '$group' => array(
    ) K8 w) `7 u% Q0 |3 c
  131.           '_id' => '
    ' R" B6 d$ e# l3 Z6 i6 T4 v
  132. 7 I$ v  A/ c6 X( y6 f" G. j& k
  133. . $field,
    # Y8 m) e1 `- w, Y6 B
  134.           'count' => array('$sum' => 1),
    ) A7 R$ E( J" t( M8 d
  135.         ),
      C! k2 H% t; y3 n
  136.       ),( L; l& Z3 {- v1 |9 W: o
  137.       array(( a# k# a, ?: T2 P) _  C7 o
  138.         '$sort' => array("count" => -1),
    ) |) u6 i2 N( b9 b/ z$ T* u5 p
  139.       ),
    3 A! [- _4 l3 {% J# }
  140.     );
    $ O$ r8 p8 ?5 f; U5 N
  141.     $this->database->$table->aggregate($cond);4 ?" j/ O# z2 ?# h9 U5 w
  142.   }# w2 G% M! ?4 \: E4 v+ z% z
  143.   /**
    $ G9 Q  l! S" E8 y9 R' z
  144.    * 删除数据
    * k9 H/ n# ]& V* ^
  145.    * @param $table) }* \) U( V2 n5 H9 @/ [$ |
  146.    * @param $where" P+ @& H7 U) C
  147.    * @return array|bool
    * p7 r  }& o! G2 y3 J0 A3 n3 @
  148.    */
    5 z) O0 e; s0 T. d% A$ N' l  v; O
  149.   public function toDelete($table, $where) {5 w  }/ i: V: s# e( S9 {
  150.     $re = $this->database->$table->remove($where);  ~& W# L! e0 w5 b4 b  u
  151.     return $re;
    9 s$ N# ~4 [4 ?+ d9 l0 q% n7 n4 t
  152.   }
    $ y& r# }! r0 E4 r+ h9 v$ E
  153.   /**
    % ~2 E& J. t/ L% M) v% d, S
  154.    * 插入数据
    + }! n7 n6 K* j& s9 h# ?" b
  155.    * @param $table
    8 k1 T3 c; M: t! s& \$ n
  156.    * @param $data
    * g( I6 |) b6 W! K
  157.    * @return array|bool
    * |$ q. j; S" E) ~+ J4 J, M
  158.    */
    4 ]6 h/ K( R* q& |
  159.   public function toInsert($table, $data) {+ V. r9 [4 F: z( V- o& w
  160.     $re = $this->database->$table->insert($data);6 U! y" d/ i, i6 m6 r6 I% ?
  161.     return $re;
    & _3 U/ d3 h9 l& ^) U
  162.   }
      B$ @% l# f2 k8 s* E; ?/ g
  163.   /**( N( }7 _4 I* \5 V, p
  164.    * 更新数据; v) ]& `* @. w4 Z5 ]! b* F% ^  o
  165.    * @param $table) u0 O1 ?& S% n
  166.    * @param $where
    ( Q+ b& B+ y' s
  167.    * @param $data/ V( C! B9 E+ d& \0 E% Z$ k; f, a
  168.    * @return bool/ B; a; B7 I. Y
  169.    */
    - Q2 e7 _3 q& c4 l  P5 P  f: y
  170.   public function toUpdate($table, $where, $data) {& h' ~3 F/ Y+ I% X/ J' l& t* I4 C9 s: Y) C
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ( q$ M# [2 ~+ w) J1 U, [6 D
  172.     return $re;* g( U' ^' q5 D: w5 f. e
  173.   }& w( u0 u7 ?3 j) q* d3 K
  174.   /**! V' {" }3 A* J
  175.    * 获取唯一数据8 S* H* ]1 @- I+ \1 u3 e- g
  176.    * @param $table! M, O! F' x* E6 l% T
  177.    * @param $key' ]& d6 B) P' b8 h4 s" @8 K7 w2 a- T
  178.    * @return array- ~: ]* O3 |* m( p( j+ Z1 j
  179.    */
    * R! ?  ]$ _" A6 S4 z
  180.   public function distinctData($table, $key, $query = array()) {
    2 {9 g0 W: @6 R. ]) D) I1 B7 N
  181.     if (!empty($query)) {
    % c- }, p. O& {! g+ q
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, z% O0 M- L, N- r! l, G- H& @% N
  183.     } else {
    * i9 u$ v* n8 U& K" N9 S* [
  184.       $where = array('distinct' => $table, 'key' => $key);
    8 T0 q* ~7 a% M6 \; S* d& w
  185.     }
    . k% t5 D* F% Z
  186.     $data = $this->database->command($where);; V' J* m5 `1 R( m" v, A  c
  187.     return $data['values'];+ Y2 _' g% O5 V
  188.   }# @9 _$ S; O5 _3 b" Z
  189. }
    & |' |& U9 S6 L( c! M" J
  190. ?>
复制代码

) `# g5 U7 H% Q7 h# n
4 B2 M; }; R9 s2 j" S) a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 20:49 , Processed in 0.129658 second(s), 19 queries .

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