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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15392|回复: 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 g1 U, A  o% n  r* O模式自由。2 P/ E1 C. q) J* H  G
支持动态查询。9 n, I: o- I) w8 k* Y
支持完全索引,包含内部对象。+ a$ e5 ?# a1 A2 D7 |
支持查询。
" C9 q. Y& P0 _- q支持复制和故障恢复。
5 B" M$ A7 l8 Y2 H使用高效的二进制数据存储,包括大型对象(如视频等)。! P0 N- ^* C: R9 Y
自动处理碎片,以支持云计算层次的扩展性9 v/ F& v8 y- h& G9 Y* `
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
$ b' K- i$ t9 j文件存储格式为BSON(一种JSON的扩展)
5 I3 ?& g3 B/ s" b( l可通过网络访问

所谓“面向集合”(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
    ' T( H+ V; d6 ~
  2. /**1 ]3 h& Q4 F- X% I. H
  3. * PHP操作mongodb数据库操作类
    6 R2 x4 K7 n' s* M' {
  4. */; o5 E2 x3 K0 R) X
  5. class Database {9 X5 y4 b  t+ x
  6.   protected $database  = '';) n* P. R- ~0 U- N" I% s
  7.   protected $mo;. W/ L# D- W5 V! Q
  8.   /**
    . H9 I* V. ~- T5 q
  9.    * 构造方法8 }8 l% B* i1 V7 C+ ]& _3 G
  10.    */
    + z) M. ^. E9 e8 D4 R2 G
  11.   public function __construct() {
    6 z7 q2 i; N  t' y' n
  12.     $server = DBSERVER;
    4 n5 ]% C+ [; v0 `, U: k
  13.     $user = DBUSER;, n+ f' @' U) m% C8 ~  L
  14.     $password = DBPASS;
    ; o8 O: h. m3 {" i8 O$ }. {, ]
  15.     $port = DBPORT;! }6 {7 F- {; F8 c( J( U
  16.     $database = DBNAME;
    9 E& b: G6 x* q5 K
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ; _- p5 H) H6 g( g+ c! N
  18.     $this->database = $mongo->$database;
    + t9 p" R3 m' b% M2 r0 C% }' b8 }+ L5 h
  19.   }/ p: P5 Z) M1 v! \- t
  20.   /**
    & S2 ]. m, ?" }: Q8 n
  21.    * 数据库单例方法2 Z% {" I! y5 @" t1 n' }9 A
  22.    * @param $server
    ( Q9 N* Q3 P, V  p& h
  23.    * @param $user
    7 _) a* Q: `3 L2 q: s. L
  24.    * @param $password8 f! H9 ~; A4 j) ]% V( ~
  25.    * @param $port7 |" P0 @1 y, V8 ~" P
  26.    * @return Mongo- U9 G& W' S0 ]
  27.    */9 @9 z; @; t+ f6 F
  28.   public function getInstance($server, $user, $password, $port) {8 V# T2 x# \5 ^/ {
  29.     if (isset($this->mo)) {3 |2 Z5 _6 l; r+ ]
  30.       return $this->mo;
      E6 E. `" C: G% `/ j1 y
  31.     } else {7 g+ R" `; x: Q+ x7 Q% J6 M& x
  32.       if (!empty($server)) {' B- U8 j8 F) `% H3 e$ l; D
  33.         if (!empty($port)) {
    0 |  T1 }- L' q) A$ C
  34.           if (!empty($user) && !empty($password)) {0 Q; B- e1 L9 V+ W3 K6 e: M1 o5 D$ |
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    . [7 W6 E+ F( W, C
  36.           } else {2 J' N$ q' e: F! L: W
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");. |* C$ Y3 P9 U9 I& u" W
  38.           }. {% @( _3 v- Y
  39.         } else {
    / _/ R+ a9 ?* t# a( J5 k# n0 s" ?
  40.           $this->mo = new Mongo("mongodb://{$server}");% L9 ?7 {8 }. U
  41.         }
    8 ~" q: w! d# {: V5 O: B6 ^# @2 R
  42.       } else {! y) O% M7 K3 N; [. P: ^! K
  43.         $this->mo = new Mongo();4 y7 e# z1 v, w. h" m
  44.       }7 i7 }+ t5 f$ T
  45.       return $this->mo;
    - }0 k  G9 A" [9 f! ]7 y5 p
  46.     }1 E8 i+ O: `" \/ Q) C1 z9 E0 t
  47.   }
      X4 P/ A0 I$ w; C$ [. H
  48.   /**/ O2 S: V4 p2 N
  49.    * 查询表中所有数据; t7 t2 m' t6 ^# [, D
  50.    * @param $table& {# ?* l' w' ]
  51.    * @param array $where
    - T6 ]8 P7 J4 b
  52.    * @param array $sort1 C5 I8 e! S3 ^) v4 M6 C" D
  53.    * @param string $limit' r: M0 \8 p7 ^* g. ~1 X
  54.    * @param string $skip
    9 z5 T- w5 g% I0 K. G
  55.    * @return array|int
    % B* Z/ O. Z4 D4 ?3 |! N
  56.    */
    / `! r$ s6 U: S
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {7 ?0 y  M, R" \
  58.     if (!empty($where)) {, |" r+ A- t, P
  59.       $data = $this->database->$table->find($where);! _# i$ J& i0 c+ D1 i' N
  60.     } else {
    & o& V5 Z" @( l* p7 _9 Y
  61.       $data = $this->database->$table->find();
    # T5 `0 ?' Q# K
  62.     }
    . V$ L8 ^! \5 L. h! w4 s1 P
  63.     if (!empty($sort)) {
    9 V- P; [- j: V! v7 |
  64.       $data = $data->sort($sort);) k5 j( M4 C" e, W1 |$ a
  65.     }
    ' y& b# k+ q- m: s/ g, C( o
  66.     if (!empty($limit)) {! X) W; I# f+ T0 O
  67.       $data = $data->limit($limit);: q0 |  R" @1 V
  68.     }4 I1 r0 P6 \+ l  Q3 b4 {: O
  69.     if (!empty($skip)) {& V, i6 D+ l3 @6 T/ h
  70.       $data = $data->skip($skip);9 f3 F, u- E: B3 D& c& o9 @% b
  71.     }0 b( ^) |8 L9 ?2 @! ~$ v) X
  72.     $newData = array();
    ; g0 V* E9 i2 `4 T3 p7 v) A
  73.     while ($data->hasNext()) {
    9 d9 @+ _7 F8 ~1 ?+ A
  74.       $newData[] = $data->getNext();
    0 `$ H0 o, [, W! o
  75.     }6 Y# e- d4 P, F7 L* ^% f6 u% N, T
  76.     if (count($newData) == 0) {
    6 i; H  ]& Q! M& `. E
  77.       return 0;4 K) S, Q0 `6 W; X: D
  78.     }5 l! X3 w- t; a* B$ r2 N! f
  79.     return $newData;
    6 d* t* |7 _" k. ^( L5 ^" q
  80.   }1 m4 h  B( _. P( e
  81.   /**, y" z, l' g2 g2 M" q! k# u
  82.    * 查询指定一条数据
    3 K3 h( N9 d, ^7 P0 B$ s
  83.    * @param $table
    $ r6 `3 @3 u/ k2 M2 R0 R4 f6 }
  84.    * @param array $where
    4 s$ Y- G  }9 k" l( O
  85.    * @return int
    * _. O5 l3 B, S; o; [/ a
  86.    */
    : R$ P5 F6 k2 N/ q- _0 r8 `
  87.   public function getOne($table, $where = array()) {
    : r9 r( j. U* u3 f! ^
  88.     if (!empty($where)) {6 V- e7 f$ E, G1 T, M9 y
  89.       $data = $this->database->$table->findOne($where);" U2 A/ B% @) n/ h
  90.     } else {! M$ v$ H1 F, r3 K
  91.       $data = $this->database->$table->findOne();; y: s$ q8 d% m5 a1 P
  92.     }/ s7 J. O4 q4 ~$ Z0 a' b: N
  93.     return $data;3 p) _8 w0 c4 U1 u+ r* p( [
  94.   }
    $ D5 _/ O0 S8 ?% x8 R4 G
  95.   /**3 H/ v$ G" ?8 F" I& o( R* z
  96.    * 统计个数' J! y5 k" T# d  x# T$ F
  97.    * @param $table' k$ k) u9 E/ F( S
  98.    * @param array $where* y3 K' z: g6 R4 j
  99.    * @return mixed3 z0 k4 h$ g$ Z7 v& A" I9 B1 D4 ^
  100.    */! U' L2 d  Q" k+ [0 Y
  101.   public function getCount($table, $where = array()) {# p$ I% S6 J1 s' ^! T9 _$ V. Z
  102.     if (!empty($where)) {% D6 {& }, u$ h. P9 @5 ^
  103.       $data = $this->database->$table->find($where)->count();
    ; c; y. }6 c* w, X2 z
  104.     } else {( L8 w, I/ |" r
  105.       $data = $this->database->$table->find()->count();
    & g2 T1 h1 E6 {, g9 T& {1 f
  106.     }0 B& E3 C" }2 Q' V* U' X- x4 S
  107.     return $data;
    * e/ X: i  n2 G6 t
  108.   }4 A8 f0 G2 W& _
  109.   /**
    . {8 f; ^& C: m2 d9 K. V
  110.    * 直接执行mongo命令& l9 X6 r' N. k# ?9 p1 k% G
  111.    * @param $sql! q8 r' M$ g& i/ ^2 n
  112.    * @return array
    # [% d- w& G0 U
  113.    *// u; Z* G$ h' T# a5 b" l0 x
  114.   public function toExcute($sql) {
    " g( C- a% W% Y# f' ?
  115.     $result = $this->database->execute($sql);
    $ w+ h8 Q+ o; D3 [$ k( y8 Z
  116.     return $result;# n  A/ r% F) N, H! h
  117.   }
    & a+ P/ t# {. w4 Z7 x
  118.   /**
    2 a, ^8 d$ N; @; k
  119.    * 分组统计个数+ S. B- c3 x! ^8 U3 \$ w1 n
  120.    * @param $table* {/ U$ H4 x5 U9 Y& m
  121.    * @param $where, c) \* B  w& ~: D5 J% F
  122.    * @param $field, Y: e2 |6 B, }& D# \1 H' q
  123.    */
    8 t0 w# J" Y5 G/ ^
  124.   public function groupCount($table, $where, $field) {
    0 _  U4 ^1 U' P
  125.     $cond = array(
    ( @+ f+ l3 Q! J* ^+ Y* b3 r
  126.       array(
    , D( P8 Z* ~8 }+ U7 j8 i/ U
  127.         '$match' => $where,
    # R" C) {- V; ?! }% b# _2 f+ J
  128.       ),' J) m" P  W& l: n/ S
  129.       array(0 r8 z. d* N4 i7 {/ \* N
  130.         '$group' => array(
    7 a8 C  W, V; s$ Q
  131.           '_id' => '
    * h( {. x2 \8 \, ]* H& i5 D
  132. 6 `8 d- H, e1 ]: C8 z
  133. . $field,+ x9 x  f/ x, w( M, ]8 ]1 x
  134.           'count' => array('$sum' => 1),5 R' A1 J- a7 Q  G+ b$ i
  135.         ),
    # U! c: ?+ K3 e  Y, G& r7 f1 @. x
  136.       ),
    * e) C! }0 b, v
  137.       array(, [6 B: M+ i( f0 e( Y
  138.         '$sort' => array("count" => -1),
    . H! [  _( a) Z" G* v1 P3 Q7 \
  139.       ),2 D- a* T+ o5 b! l7 o: e  k2 z( m
  140.     );
    ) [! U. O6 G& K* v& p) X) E0 y
  141.     $this->database->$table->aggregate($cond);7 [; r; M; A4 W8 H; h* n
  142.   }9 f* f$ o; Z5 M
  143.   /**
    4 i9 n3 E' A: G  u* W$ u8 @
  144.    * 删除数据
    4 `4 P3 E& ~$ Q+ B  j5 V0 z
  145.    * @param $table
    5 M9 k3 {( \: i4 W
  146.    * @param $where
    * `* U/ f8 y! a- ~
  147.    * @return array|bool) T* f( n; w& f. i
  148.    */
    / ]% T# M/ a" A/ k
  149.   public function toDelete($table, $where) {
    ) Y: }& W+ U6 C) a( y2 F
  150.     $re = $this->database->$table->remove($where);
    9 h$ g7 U  i# J+ ~1 W  p8 T7 P8 a
  151.     return $re;
    ) d8 O" I! a" |6 f6 |+ _
  152.   }& _: b+ W1 _2 ~* @" L, r' M# i, t
  153.   /**
    7 q! \7 O5 s/ b0 A0 m
  154.    * 插入数据$ Q4 z) [" h) ~& X7 A
  155.    * @param $table- i; [) e) u- R+ x2 r: c2 Y+ a* u
  156.    * @param $data8 G3 G- k2 P/ `: \9 r) n- c
  157.    * @return array|bool
    6 g0 D  w/ z( c4 u  m
  158.    */
    % r! s2 H( |/ l% o
  159.   public function toInsert($table, $data) {
    : h+ c( L& y  R: r5 W: u. t% C
  160.     $re = $this->database->$table->insert($data);1 _! i0 P5 D- d7 o, l% p
  161.     return $re;
    1 z0 n. T0 {6 h6 V; v/ A5 C
  162.   }) y# \/ e7 P$ L$ \) l+ k) x: f
  163.   /**
    : ?7 S" K8 P0 b5 |! V4 e6 X* c
  164.    * 更新数据
    ) c3 c9 a4 t0 `8 z% h
  165.    * @param $table0 Y+ O# }3 ~4 T3 i; Q$ Z( c$ J( m
  166.    * @param $where7 W8 |8 {! `) j+ r
  167.    * @param $data
    ! k: t: s- n3 v+ c
  168.    * @return bool- L0 Y/ z( d1 R( F4 x6 A- _
  169.    */! d& Q( i/ d- x# w8 z# }: e* k6 D1 L
  170.   public function toUpdate($table, $where, $data) {/ c* k$ z) v5 _3 C4 R
  171.     $re = $this->database->$table->update($where, array('$set' => $data));* r, Z% L- R- E5 D+ V
  172.     return $re;- w. V# g* {/ g
  173.   }
    , F/ d5 |, i2 l5 S
  174.   /**
    9 O/ u1 q8 v, u2 j
  175.    * 获取唯一数据
    - F" `" t+ E% ^9 S3 O+ a
  176.    * @param $table
    # k$ {, z9 ]" v
  177.    * @param $key/ I+ {0 A% L0 u4 I4 q  |- h9 [
  178.    * @return array! e. k  C7 ~7 e+ V9 X2 c" }
  179.    */* O( k$ C0 u5 ?6 K  @
  180.   public function distinctData($table, $key, $query = array()) {
    * p* G3 s8 A5 Y* O; j/ |
  181.     if (!empty($query)) {) K5 V1 D* D7 |" }; N
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, G) n9 t; [+ }# H8 q. G# }
  183.     } else {% N  X$ Z. W  z& x2 z# v
  184.       $where = array('distinct' => $table, 'key' => $key);
    # [$ h7 u* Z8 E7 N2 \7 u
  185.     }$ y" u0 q9 `, z1 H) F
  186.     $data = $this->database->command($where);
    9 l- _  e9 f. d# G3 [: ^
  187.     return $data['values'];2 c: E  t2 G7 n( y
  188.   }
    1 w/ l4 [3 p( I7 p! U2 i
  189. }2 E7 F0 S$ q  x, {7 A
  190. ?>
复制代码
! [0 q" q' {: t: v  ~8 \( \
3 H6 C6 U: A2 m2 P1 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:37 , Processed in 0.065754 second(s), 19 queries .

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