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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17277|回复: 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 c4 x; H) a( V3 ^2 I- L模式自由。
% l% s, H; ^' L+ U$ Y4 Y. T1 j支持动态查询。: F4 ~; N  @$ d( j. e5 n3 w
支持完全索引,包含内部对象。! R, b4 B" _2 d3 {% Y( U
支持查询。
3 v. K4 o5 i! `! K  [支持复制和故障恢复。1 n1 H8 O6 m, C' _  e
使用高效的二进制数据存储,包括大型对象(如视频等)。
6 M% S' d4 ]1 K9 `+ D) I自动处理碎片,以支持云计算层次的扩展性* Z- d4 i, p- L& u! e$ I9 G$ p
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
9 u$ v( ?+ J* j4 {6 l文件存储格式为BSON(一种JSON的扩展)
" w9 J5 N$ z. x4 S: e, n& ^: [可通过网络访问

所谓“面向集合”(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. <?php8 C& U% c9 m: E# N$ X9 l, Y: [
  2. /**- m  u' x" ^' g* C& l# M
  3. * PHP操作mongodb数据库操作类
    2 }3 ~! M, N: q% g
  4. */' F+ Y, R, |" `4 t' v9 Y
  5. class Database {
    ) \% ~' g; d- Z: |7 L- K  Y* E, P
  6.   protected $database  = '';
    + ]. F9 Q% l& [. v( E8 I9 P
  7.   protected $mo;
    ' q. I. `2 e% \- U% V5 \$ W
  8.   /**
    6 x7 N8 X' H6 j+ F9 z
  9.    * 构造方法8 e# X/ h; ]2 f8 o  v' k, @0 T, K
  10.    */) V6 ]0 c* C5 V! w/ e- M" g. N
  11.   public function __construct() {# t/ ?( E- @+ Q7 k$ a- P5 M
  12.     $server = DBSERVER;1 n) L" E3 B$ ?0 r4 M! }
  13.     $user = DBUSER;
    1 ^2 \3 a1 P* Z$ }% D# ~  |6 A
  14.     $password = DBPASS;
    # O( ]$ X1 i/ X: i2 D8 f% s1 e2 v
  15.     $port = DBPORT;. e# F" }* x2 `5 c0 Z
  16.     $database = DBNAME;- F* P* H6 `$ w* i; k; E
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
      m. w; @* u% _; z* s. d8 o
  18.     $this->database = $mongo->$database;  {% q: ?) i- K7 B
  19.   }
      k6 |/ i8 ?  f' V2 V4 Y+ q; d$ W; C
  20.   /**
    , T0 ~6 \" w( @9 v2 `
  21.    * 数据库单例方法7 q2 @( e+ X4 Q: w3 Q: b( D& A
  22.    * @param $server
    1 ?% ^. d: {4 l$ o; [! T4 x
  23.    * @param $user
    * S+ D, E: r% g3 C; b
  24.    * @param $password
    1 W0 O- B1 ?, f+ s
  25.    * @param $port" R  h" S- g4 J' h2 L8 C
  26.    * @return Mongo) D; w$ K% L, z" x  H6 T- B1 y
  27.    */
    ; m4 k; i2 C. g" ?
  28.   public function getInstance($server, $user, $password, $port) {0 |1 a% ?% X: Z; R  ^5 @
  29.     if (isset($this->mo)) {6 j4 |; m7 [) W" X( H  ^! b
  30.       return $this->mo;
    6 `; C- _7 E* R( U
  31.     } else {6 |* J6 Y2 y# I7 g; S0 |+ c( o
  32.       if (!empty($server)) {
    5 k5 Q+ T& m5 d! \/ x
  33.         if (!empty($port)) {3 t0 n: B4 Q, k" w+ O
  34.           if (!empty($user) && !empty($password)) {
    : N& j/ q% k$ e- a
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    7 m; n0 `1 f. X0 }$ ?
  36.           } else {
    $ r9 M# \- F% y. E6 u
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    & q& B5 e  L' v! ~
  38.           }- C9 E9 `  l$ w( f8 _
  39.         } else {1 L; P9 Z$ P/ t" ]
  40.           $this->mo = new Mongo("mongodb://{$server}");& v; k1 d, }4 b4 l/ X) V# t
  41.         }' p4 ]) l1 X; e3 E' C$ S
  42.       } else {- b6 F9 s1 h& J1 y8 c2 n( e" Z: C" q
  43.         $this->mo = new Mongo();
    2 [; t) a% z: ]
  44.       }
    : V4 z  r- `5 h& Z/ J
  45.       return $this->mo;
    # y" L, E  \9 ~' t; `) G. m# o) v
  46.     }
    * C/ W9 i5 p4 n, [
  47.   }/ Q. R0 N: p6 G4 r5 a
  48.   /**8 P0 l0 N3 t# v! ^& q4 v
  49.    * 查询表中所有数据
    - `4 w6 O) q# m$ F
  50.    * @param $table
    / e8 K9 U8 x& h6 o7 Y
  51.    * @param array $where' F7 n7 w8 u* ~' F1 m+ q. j' {
  52.    * @param array $sort! {1 Y( E8 T& N$ b1 t6 T
  53.    * @param string $limit4 \5 J+ I% @/ Q2 O
  54.    * @param string $skip3 ?; b  z2 i! \; w
  55.    * @return array|int
      N' P+ u% p* {  F
  56.    */
    $ c8 m! Z& n& p0 t8 ]7 B
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {6 B3 N7 L% p. T2 \1 @: R
  58.     if (!empty($where)) {
    8 X) i' K- U* f5 W) o0 ]# B; S
  59.       $data = $this->database->$table->find($where);
    # z; s4 r. l1 G& t
  60.     } else {
    - A. S$ u" z9 N1 V
  61.       $data = $this->database->$table->find();
    5 A) x5 ^/ e3 e- d! s# }
  62.     }
      E: M$ |2 V4 _7 N, s" @+ G
  63.     if (!empty($sort)) {
    . S7 k( [4 w! S/ v
  64.       $data = $data->sort($sort);
    2 F3 g% h  Q3 g+ S: Z! H9 V. s* _, s
  65.     }3 x$ j7 ^- F: [6 T
  66.     if (!empty($limit)) {
    9 K; X$ i+ Z1 y8 R4 K) ~2 ]+ r
  67.       $data = $data->limit($limit);2 T# M" O- a$ x' e  [
  68.     }2 H! |. _0 f7 R1 @
  69.     if (!empty($skip)) {) _' B8 `6 `; j% v: @5 ^5 {5 n
  70.       $data = $data->skip($skip);5 l1 Q; B$ x( p4 r
  71.     }9 B; r6 E6 {* v8 Y: Q2 R
  72.     $newData = array();3 H( n0 Q7 C' J) f! @, v
  73.     while ($data->hasNext()) {
    $ U' v2 `+ _& S8 g5 B
  74.       $newData[] = $data->getNext();
    & n: }# y, C5 k! z# }& P
  75.     }
    ' y- h7 g3 N3 b5 k0 @1 k8 |1 w9 A' F
  76.     if (count($newData) == 0) {
    3 N/ J6 S- n; ~5 S# C
  77.       return 0;
    : y/ I$ D3 U0 {
  78.     }: m- y5 g4 w: z
  79.     return $newData;
    " B7 @% n6 Y9 M& z, m9 L* C( C
  80.   }3 Z+ N3 y  p' [! G) ]  U6 h/ [
  81.   /**
    + n/ V4 E/ j: L
  82.    * 查询指定一条数据
    ' O3 }, v; S0 j4 [9 W& W. N! G) Q9 m
  83.    * @param $table
    % r; M1 b8 k7 f' A) e' ?, D
  84.    * @param array $where
    1 B% a, S, l- c
  85.    * @return int% W, p% L* `8 R+ q
  86.    */& o( g3 j$ L' @8 g
  87.   public function getOne($table, $where = array()) {+ {$ c$ o# S7 _/ D
  88.     if (!empty($where)) {
    / o4 Z4 C0 d: r: b1 L3 V) V& T+ Q
  89.       $data = $this->database->$table->findOne($where);- G  v+ p" v1 H' D
  90.     } else {& n* q" ?4 E0 G) v! [" s9 p( f* e
  91.       $data = $this->database->$table->findOne();8 @* Q9 W0 J2 I0 m! P" w
  92.     }
    2 L4 B) k" x  P# H
  93.     return $data;
    % o7 D0 \" `2 K  U
  94.   }! y8 n, I% ^) s3 w" b( S& j1 _
  95.   /**
    # T& S5 D, f, _2 ^, p$ n
  96.    * 统计个数
    . Y! r2 n3 S0 x3 d" i& m1 ?; B) p
  97.    * @param $table
    9 W3 T  O! c; H5 d$ m
  98.    * @param array $where( J: K1 A$ c* W% P2 h( B
  99.    * @return mixed/ G# N' }* M, v! C
  100.    */
    5 `4 Y" R2 A1 I$ v+ _) t' w, |
  101.   public function getCount($table, $where = array()) {
    8 F$ T1 b- C* _0 _1 ^7 U9 P
  102.     if (!empty($where)) {
    5 C+ l3 C% k! H5 o* L$ K5 g
  103.       $data = $this->database->$table->find($where)->count();
    ( b  B0 b$ ^: Z. A- |- t% u
  104.     } else {
    6 J& {0 D2 j# `; R
  105.       $data = $this->database->$table->find()->count();
    , l! U! H" _1 [9 ~
  106.     }
    " O/ v0 j( ?( F1 b' K$ ^
  107.     return $data;5 {" L7 r' m# e# |
  108.   }& z% R$ d) l: s: {3 q
  109.   /**
    . a! h" _7 z* f' D, o! ?) D: c7 d
  110.    * 直接执行mongo命令! k6 C/ u+ I; f; S( N! E
  111.    * @param $sql
    " x% `3 D1 v: z. K. [& ]1 ?
  112.    * @return array% r( J) w$ z0 }( Y8 K3 {) I
  113.    */1 c) s2 F) U/ Q) [6 x
  114.   public function toExcute($sql) {
    4 h$ m3 F  S9 W( I2 m5 y
  115.     $result = $this->database->execute($sql);+ I& X  Q8 a- H# Q8 ~6 J7 ~
  116.     return $result;; I5 f+ J0 s- o% s
  117.   }
    * ^5 v3 ?$ F2 o
  118.   /**
    . X- z/ Q0 r5 b* o
  119.    * 分组统计个数: P" n$ l, ]9 L4 m+ y2 r. a& T
  120.    * @param $table
    5 x6 T* M: @* K% T" i1 @" K
  121.    * @param $where
    % b+ m3 p8 S; z+ w' d" V3 m* y
  122.    * @param $field+ C# H5 O2 e2 G8 P
  123.    */) p4 Z4 x# m$ X3 O! f- ], m
  124.   public function groupCount($table, $where, $field) {
    + D) T% N* K; f$ z9 S: r
  125.     $cond = array(
    6 }5 W; |' v% W+ X3 d; v! K
  126.       array(
      b5 T8 y; }8 E3 M1 w2 ^. F5 g8 c
  127.         '$match' => $where,' ]+ r9 l( u, E' C
  128.       ),
    8 |2 J' g" P. ]/ |
  129.       array(' h& r- O- _  W5 X' Z8 ^
  130.         '$group' => array(# {2 h, g3 |3 q6 A# z
  131.           '_id' => '! d3 g9 O6 Y7 T$ c; I  E
  132. ; E- A9 z& S( h9 }% ~& U
  133. . $field,, v5 T. {/ M( p3 N6 \& _
  134.           'count' => array('$sum' => 1),. U5 L8 S, }: i/ o. T5 V
  135.         ),
    4 P+ H: [+ q7 v6 H$ I, n" H
  136.       ),, h/ C( x0 a  L5 U
  137.       array(. F0 w% W% R& S, }9 I* s
  138.         '$sort' => array("count" => -1),
    & Z( C$ k6 a8 ^" I0 o
  139.       ),, n* a# v& z( \; ]8 z
  140.     );
    / R( s) ^9 ]" e/ K) d
  141.     $this->database->$table->aggregate($cond);% b( d2 }; g: |, p% \
  142.   }  u8 C  Y9 _7 z" `
  143.   /**# L5 _: }+ g% E5 `
  144.    * 删除数据
    ' K4 S. c( O9 [- E% ^" Y# |
  145.    * @param $table
    $ J. [0 W; Y* H; P
  146.    * @param $where7 f. _( y' v. U; W8 H) v
  147.    * @return array|bool
    % C% O) a& P+ o
  148.    */
    ; l8 S7 o* c  E0 K  `
  149.   public function toDelete($table, $where) {4 |* `# U$ h' z) u3 J
  150.     $re = $this->database->$table->remove($where);
    7 T1 M' p. E$ q3 i; J8 X
  151.     return $re;
    " X( j+ C& z7 L  h" S
  152.   }
    ) i3 ^6 p3 `: }( {- g3 G1 g  O
  153.   /**
    * n9 R9 M9 X& s% x% B
  154.    * 插入数据6 [( P% \7 n; j% F* `
  155.    * @param $table
    / L+ K' W( B1 ^: x2 H3 K* ^, B
  156.    * @param $data
    ! h* v7 j2 K& @7 ]# b. W
  157.    * @return array|bool
    2 m6 l2 y9 ?# J# m4 b
  158.    */+ c) Q7 E+ l: Q! t/ g
  159.   public function toInsert($table, $data) {$ {  ^2 s  m* X
  160.     $re = $this->database->$table->insert($data);3 L, H& c: |2 v1 b  M
  161.     return $re;
    ; p8 B7 F# E$ r, p4 o
  162.   }
    4 O5 {2 t5 ^6 F
  163.   /**9 |# \! i4 b* U1 |  d2 S8 a" Z+ L# A" n
  164.    * 更新数据
    : m5 t  ~+ D6 P# ]6 M
  165.    * @param $table+ J8 _8 `5 l2 x2 X) [. P
  166.    * @param $where
    + q0 g' J8 i* Y: k
  167.    * @param $data
    8 B$ i$ P- K/ W9 E! D
  168.    * @return bool
    6 q7 d: A9 Z7 B* b/ [
  169.    */$ g5 ~6 E* Q' Y& Z8 M, w' v
  170.   public function toUpdate($table, $where, $data) {
    ' ?9 t0 C% R: S/ D3 `6 l+ \) A$ A# L
  171.     $re = $this->database->$table->update($where, array('$set' => $data));0 d/ F: t. D1 }( p( ~
  172.     return $re;7 p, Q" ~# n) \  K' x0 C( x
  173.   }# j+ [) |  f- z9 D; F
  174.   /**
    7 j0 J7 \. v: y& \5 W/ _
  175.    * 获取唯一数据
    % A5 B! s. R# A% @) @, e
  176.    * @param $table
    : e9 j- d* `. K
  177.    * @param $key
    ' _9 t2 q6 D$ Z+ z' ]/ ?
  178.    * @return array9 G0 _. e8 N0 o  G5 R4 M/ N
  179.    */
    1 F9 a1 i( N, U, N# A
  180.   public function distinctData($table, $key, $query = array()) {
    7 y3 L5 D' M+ ^
  181.     if (!empty($query)) {
    ! Q2 D! d- C4 W1 Z) Y& t9 k1 e; T7 u) B
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    : A: W! G: F; W# s+ L& v& M
  183.     } else {
    3 }- o" \- d9 N. ]3 v- H. |$ k
  184.       $where = array('distinct' => $table, 'key' => $key);
    1 M7 L( O, t1 v
  185.     }# K2 B4 P: j9 C" {8 Z; V* }
  186.     $data = $this->database->command($where);2 ]/ Q8 m9 Y" H  P
  187.     return $data['values'];
    . {2 @5 v" H8 W  F* J
  188.   }, {- n! p( U: |! R) p# W
  189. }
    ! H' K4 O$ \5 J" ]
  190. ?>
复制代码

# W+ g, n  _' u8 e' S" Z* \! ?& K7 C3 w9 L( k: U; {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-22 04:12 , Processed in 0.051852 second(s), 19 queries .

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