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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
; d2 Q& @( i- Q  ~模式自由。& F3 d1 j! N. p% k
支持动态查询。
0 m2 q9 }" J1 A+ C4 @7 a支持完全索引,包含内部对象。
* @* Q, [8 ]* r支持查询。
3 x7 F# X' @* [7 _, |支持复制和故障恢复。+ W/ _& m: |, T5 o1 V& t4 `
使用高效的二进制数据存储,包括大型对象(如视频等)。
( h% X" r' h! `自动处理碎片,以支持云计算层次的扩展性
/ Y* v, C- x' V- c2 |支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
# j5 h1 ?* c# x1 Y$ M文件存储格式为BSON(一种JSON的扩展)' y1 j( Z9 E# Y* p9 D8 }- o, L2 u% b9 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
    : y3 D% n( J2 u* B" Y5 Q4 O) C- D
  2. /**" H' q# n0 ?' U& \3 V) X$ p
  3. * PHP操作mongodb数据库操作类! f' z6 |4 Y# f( c: K
  4. */4 U) w# W( l3 w- m+ a: m
  5. class Database {7 O; o4 x" m9 z: d& A; V
  6.   protected $database  = '';7 @- S% p7 Q! ^
  7.   protected $mo;
    5 ?7 a8 A: V( ]
  8.   /**
    / E1 s7 F3 j# t0 v& A
  9.    * 构造方法8 t1 i2 c8 {4 o- S5 j7 w' M
  10.    */
    3 C1 H1 @; q( Q' W3 K3 w
  11.   public function __construct() {" N8 W% ~' p8 ^" d2 p! d
  12.     $server = DBSERVER;
    1 |# @1 C1 d% y# B- \
  13.     $user = DBUSER;
    ; u9 x, F/ t' ^8 @
  14.     $password = DBPASS;4 y8 v6 R4 I, G& a
  15.     $port = DBPORT;% a+ i% s% W4 O5 u& @' b8 N
  16.     $database = DBNAME;0 d, g0 L2 O4 r5 h8 {: B
  17.     $mongo = $this->getInstance($server, $user, $password, $port);4 Q4 f8 ?+ }4 H
  18.     $this->database = $mongo->$database;
    & b3 h7 e7 @% r1 r6 G) j* k1 b
  19.   }' S: T7 {6 f/ m) ?2 C
  20.   /**. k1 j4 M9 C" C9 K$ U
  21.    * 数据库单例方法
    / ^5 A7 Y9 v# Q# l/ R
  22.    * @param $server; C- W% y* w+ D% ?5 z* K$ Y
  23.    * @param $user
    5 p7 I; n7 k  e. q* A
  24.    * @param $password  a) X- D6 p: O2 y" [
  25.    * @param $port* p9 e) H- @% F# D
  26.    * @return Mongo
    / W+ l% }( e! I; ?( Q
  27.    *// G/ l9 l! T; h  Z4 i5 [1 ^4 \) A
  28.   public function getInstance($server, $user, $password, $port) {
    0 s4 l" ]. I+ d. H5 u
  29.     if (isset($this->mo)) {
    # x( n. V9 M  b1 U: Z7 d9 e3 c
  30.       return $this->mo;; w; ]+ a) N* s: G4 M
  31.     } else {5 c  \) O( {4 m2 p2 k/ D& ?5 {( o
  32.       if (!empty($server)) {4 y/ A! X3 Q& W. {
  33.         if (!empty($port)) {
    % {" B! f# L" \/ C+ m& O
  34.           if (!empty($user) && !empty($password)) {2 ~# n9 ]3 c2 L( f* b
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");5 g5 M- w) H% X. b. s6 Y
  36.           } else {
    $ o% p0 T2 V0 ]: y  g- {
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    1 ]3 ]" Z2 K. N
  38.           }
      `& P! _& y2 W0 o% G9 e) j- O$ q
  39.         } else {
    : }/ U5 q" E; _0 f' ]8 p; Q
  40.           $this->mo = new Mongo("mongodb://{$server}");
    ' n$ ?" B: `. _. H' U' D
  41.         }
      }7 }- Q7 O- v: ^' C
  42.       } else {( g. C; S: F/ C7 M# ~5 A
  43.         $this->mo = new Mongo();. @2 M; F8 |# V% U5 q  k& _
  44.       }
    ) r+ |: f6 f/ i9 ?* h2 h! X3 r8 f' v
  45.       return $this->mo;  `$ ?" a& w- R5 z/ {1 U" b% b4 f
  46.     }
    6 N& x$ I& i  |3 ?. F5 S
  47.   }
    1 N* t1 `( }7 i; w% ~+ z$ T
  48.   /**8 S+ z3 E# Z: P* N  X) W9 ~4 y3 H
  49.    * 查询表中所有数据/ j2 Z: J6 _5 }1 L
  50.    * @param $table
    % C) M1 n. c1 \. d4 O
  51.    * @param array $where1 w8 V; {* ]5 \* z2 d$ q
  52.    * @param array $sort
      n. a9 c) j/ N8 o& p
  53.    * @param string $limit$ U% |9 n$ k% @3 g6 O8 V- o
  54.    * @param string $skip
    4 c( m7 b% g2 T8 E5 V
  55.    * @return array|int9 G- F8 m+ I+ B0 ~
  56.    */# v! h5 I1 P% K) x6 A1 ]9 ?. Z- Q2 f
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    5 J& r6 c6 {" |3 N$ K, k
  58.     if (!empty($where)) {' G: _+ h2 ]/ V" A# a. ?
  59.       $data = $this->database->$table->find($where);
    , U% L% q! F- |
  60.     } else {5 d+ h2 q. }7 q$ ^' f0 H4 ]& I
  61.       $data = $this->database->$table->find();
    8 G" @& l, v5 o* @
  62.     }
    8 o& g+ ]; }5 Y( j" F$ M- O5 J4 {6 ~
  63.     if (!empty($sort)) {
    5 r, D- b9 n7 }9 X1 o; d4 T
  64.       $data = $data->sort($sort);
    " r9 e% z0 C. H$ M. ?: B/ y
  65.     }
    9 @) a; O4 L  L6 G7 M
  66.     if (!empty($limit)) {; A7 B; @- r, D  p
  67.       $data = $data->limit($limit);. v, l0 p0 B- J9 p' [( w
  68.     }
    $ R( m' b( C3 Z
  69.     if (!empty($skip)) {
    & x+ G2 x5 A) ~$ ~3 Q6 t: V
  70.       $data = $data->skip($skip);! I$ ~' H( |+ j5 [
  71.     }: F9 S' J8 r% w
  72.     $newData = array();3 w3 [# d( G# o9 x5 l( h% U
  73.     while ($data->hasNext()) {) w5 R6 i6 |2 w. d3 K% }. o% P  U* J' r
  74.       $newData[] = $data->getNext();
    5 f  f+ F6 Y" z$ d/ E
  75.     }" h& D3 `  @! a
  76.     if (count($newData) == 0) {
    ) o$ t2 i" j& @$ H7 K' ]5 |. M
  77.       return 0;1 e. x5 r7 [0 }3 i
  78.     }
    0 S7 ]! K$ }- b, ~1 a6 d$ l
  79.     return $newData;, G2 m9 ?' C" C5 {+ C$ z8 d" p
  80.   }" }' s$ l1 U' n! Z* P! E
  81.   /**) P  w; }+ s* |% m: t
  82.    * 查询指定一条数据
    ! E5 C9 O- G( `  X8 g3 f! m  B
  83.    * @param $table
    : O( Z( B* z, U) c2 G
  84.    * @param array $where
    6 y  u5 ~3 S6 \  s
  85.    * @return int
    2 f! G$ u6 G! Z0 m! \# H
  86.    */: q7 }6 _% ]! j" Q: S7 \/ f/ _" }
  87.   public function getOne($table, $where = array()) {# o" H9 u& z" @* m; m1 V
  88.     if (!empty($where)) {8 p/ T- ]1 a/ {; w  @' C
  89.       $data = $this->database->$table->findOne($where);" k4 _8 m0 m9 R6 s: W7 Y( q
  90.     } else {; x/ P/ u  u: f7 o  C! d
  91.       $data = $this->database->$table->findOne();
    ! o" }' ]# b4 U) s: @
  92.     }. f/ X- p% s- T( X2 [
  93.     return $data;, ]7 {# g, T/ X  F) g( o
  94.   }" N5 g5 R: _3 V7 p1 ?
  95.   /**2 w; R  H& Z& ^; z& A; R9 f
  96.    * 统计个数2 B) }1 ^5 \+ l+ \( }# b' H
  97.    * @param $table
    , ~8 w& _8 @1 ]  P7 ]$ y# _
  98.    * @param array $where
    , F9 K! v. M/ f. K, V! g- I( O
  99.    * @return mixed
    * A& n' V8 u1 {: B# O  p% E9 `
  100.    */( a$ e9 w3 z0 M0 H1 u( }- R
  101.   public function getCount($table, $where = array()) {
    ) q9 ]7 H8 E  L( W4 K6 @
  102.     if (!empty($where)) {
    & a! P, j* y& l: D  k& J
  103.       $data = $this->database->$table->find($where)->count();
    ' ^1 Q" o' u8 x, u& k1 H* Y. ]
  104.     } else {. \1 w& \- P$ A# x2 P
  105.       $data = $this->database->$table->find()->count();
    # J/ ]9 r$ q2 r
  106.     }2 _! e- O9 B" s5 b
  107.     return $data;
    ( v1 p* J1 D. N) m& }8 S0 S. e- m. x
  108.   }
    , w* r/ \% S' e# b) S  B
  109.   /**, q/ M9 ]; @( p+ V7 ^
  110.    * 直接执行mongo命令
    / u5 L) ]# |! ^# B
  111.    * @param $sql
    . g. f( U$ F% V: N
  112.    * @return array
    " u+ {: @  A4 P% ^& Q/ W
  113.    */& ^5 u! e0 ~% Z- F( O7 {; v
  114.   public function toExcute($sql) {
    5 o3 c' t! M) b, V: c( ^9 O
  115.     $result = $this->database->execute($sql);
    1 S/ \& w, T2 a' M( D
  116.     return $result;
    % J: d: N7 Q6 S  K% J0 \' p2 B- P
  117.   }" D0 n: W6 ]$ I% n
  118.   /**
    ( F" @5 D+ S1 R7 ^- X; g" a
  119.    * 分组统计个数& e: T7 k3 b/ p# V, D. [8 }6 t
  120.    * @param $table* N  V& _  a8 b, X. E/ i
  121.    * @param $where% Z  a9 r: j' B( s
  122.    * @param $field, \( D4 s0 t9 \2 P# d
  123.    */6 l+ Z$ O  k  @' V3 y9 W( I
  124.   public function groupCount($table, $where, $field) {
    ! v5 u6 b" O. ]6 u
  125.     $cond = array(
    + D& D4 b# t* M! c
  126.       array(! p) Q& _0 U( T' y
  127.         '$match' => $where,3 i9 }% I" }& z8 t/ u* N
  128.       ),# h6 h6 r0 r% k3 i9 U2 N2 s3 z
  129.       array(
    2 W" M( R# ^* h% C# U0 n, b0 L
  130.         '$group' => array(+ \$ k' K+ a1 O3 f: M: H7 u( }
  131.           '_id' => '1 k5 I) t; L( r0 H

  132. " T- E. c; x( y$ A4 e
  133. . $field,
    6 i$ A$ K, _, {. s+ h& f& Z% t$ z
  134.           'count' => array('$sum' => 1),- Z5 L8 ~: m* ?) z+ w6 Z' F' Z
  135.         ),
    6 {* Q, c1 r0 f% c5 Q$ ?" L. o
  136.       ),
    : ~6 v. g9 \* }6 t: r# G1 a, j
  137.       array(
    8 M" \: Q! H: U
  138.         '$sort' => array("count" => -1),
    + O: X1 _2 c: m  {  u1 U% O6 I
  139.       ),
    3 x( L/ l/ C; T
  140.     );
    1 Q7 a4 b4 _4 }0 _) X: Z
  141.     $this->database->$table->aggregate($cond);
    : K( d1 M: ?+ f# j
  142.   }
    : }/ M$ A0 u: f9 R9 o
  143.   /**/ J2 ~" _, L' m) {  m
  144.    * 删除数据
    ; T& l# ]: y& t$ }/ K8 [
  145.    * @param $table8 o9 P5 p5 U6 V3 F0 N
  146.    * @param $where- v' B0 Y& a% I4 Z1 z7 h! m- d# C
  147.    * @return array|bool
    7 `/ r0 N) v0 D
  148.    */
    7 h  x0 R8 }; l/ o6 |
  149.   public function toDelete($table, $where) {
    7 A9 S7 D0 Q! I3 {. {! n* E9 p
  150.     $re = $this->database->$table->remove($where);$ O( _: E! V1 y
  151.     return $re;  E5 f2 p/ N) i
  152.   }2 C8 Q  d" C6 \$ J
  153.   /**
    6 x2 E4 d: I3 r  t& f, F
  154.    * 插入数据
    . `0 W" H  d$ V- \' w; x( `
  155.    * @param $table$ k& P1 y( A5 t
  156.    * @param $data
    . E) K7 Q3 v$ T! \. a# o) S
  157.    * @return array|bool
    * b4 u" M/ R5 k3 a
  158.    */
    ( F6 w# {. T6 f
  159.   public function toInsert($table, $data) {' j. Y3 d; P* F
  160.     $re = $this->database->$table->insert($data);
    9 e. ~( ~$ S$ h
  161.     return $re;
    , u! @" f4 o9 \: {7 B: A! W3 a
  162.   }
    / l, R. a+ ]5 d  P) q, K
  163.   /**
    ! S$ L: z5 @1 A; ]. ?5 ~
  164.    * 更新数据
    " g* l8 [4 H) Y$ ^
  165.    * @param $table
    0 R# |' l- Z/ s" P( C
  166.    * @param $where! u4 x8 N! f' E7 e: F& |
  167.    * @param $data
    ; F& u" \( a2 d& M- {4 t- G6 p
  168.    * @return bool
    ( _1 M( w: |* {2 f' t
  169.    */: V' a! {' L/ k+ a  O
  170.   public function toUpdate($table, $where, $data) {  j! q- i. G5 o. d. V2 S/ T: E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    1 U* A- k" Q$ J  s6 V5 z
  172.     return $re;5 G5 x! s, J' ]% e
  173.   }
    - U" |3 [0 K5 }6 K( H* _' I
  174.   /**
    / X- h. m$ W, e5 G
  175.    * 获取唯一数据
    2 W' Q9 _( S1 n" G  |/ M
  176.    * @param $table. l' R+ o: u- z! U6 Y
  177.    * @param $key+ {8 M$ u1 t3 _/ Y" v2 I7 w' J+ N( ^
  178.    * @return array& x4 ], O) c5 t  S
  179.    */$ e8 ]) j9 o# X7 T3 b
  180.   public function distinctData($table, $key, $query = array()) {$ {7 `+ C( K+ }  B& q+ K( o
  181.     if (!empty($query)) {2 {/ m* x$ ~& @) D6 k7 X
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);1 k3 F  i+ Z1 G% e, N
  183.     } else {
    3 p% C/ b' N4 v$ H( C1 y
  184.       $where = array('distinct' => $table, 'key' => $key);
    4 p8 }* y2 N' \2 D9 Q2 J
  185.     }6 k1 w6 \: ^# B2 h% o
  186.     $data = $this->database->command($where);
    $ t8 k4 p& E1 N9 M
  187.     return $data['values'];' [. s3 c  p- `. I
  188.   }
    * _0 y: t$ P, i% D( t- f
  189. }3 i5 y* Q7 e% }1 e- ~" ~
  190. ?>
复制代码
  D! t8 C2 B9 f8 i! ?! i

) G% e- Y1 ], \; Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 01:53 , Processed in 0.052470 second(s), 19 queries .

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