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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。. \% [, }! G) I$ n
模式自由。
9 d8 f# y$ l" N# F( Q+ }1 ?支持动态查询。% i/ x; k1 J4 D4 G' T# ~9 r
支持完全索引,包含内部对象。
; i+ {3 y7 w' b4 ^) {: }& U支持查询。
. L/ c8 q+ X* J+ M支持复制和故障恢复。7 g8 U' l: ^5 {8 J# h/ w, s
使用高效的二进制数据存储,包括大型对象(如视频等)。
  B. F1 C, f! R自动处理碎片,以支持云计算层次的扩展性# f8 r9 U0 z. u2 v# D
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
& E4 t2 s, d4 _  ]7 D  B文件存储格式为BSON(一种JSON的扩展)( q  ^/ B4 w' U1 d4 t; 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. <?php
    . @1 b* E$ C* u; n: l0 F) q
  2. /**
    . C% g" q5 t5 ~6 R! f
  3. * PHP操作mongodb数据库操作类8 G+ l4 L# e# h& ~& N
  4. */
    ( s# }) w. h5 S5 K2 G
  5. class Database {0 O% Z0 F- H. m: j) u- {
  6.   protected $database  = '';9 \4 I4 M$ D; s/ x0 Y. M5 i
  7.   protected $mo;
    $ U9 K& Q# K) e9 a
  8.   /**
    ; a7 {5 v: r9 u
  9.    * 构造方法5 ?6 e4 k( I: \# b- p
  10.    */, G) a1 E3 P" a( l
  11.   public function __construct() {8 ]2 ^$ C8 {0 x* o$ R3 v
  12.     $server = DBSERVER;
    ' J2 Z' [) v+ ~  {  N1 y1 ], R
  13.     $user = DBUSER;
    6 X+ d2 l2 ~5 _# x! S" ^8 u
  14.     $password = DBPASS;
    3 p8 K$ j, N5 y) g
  15.     $port = DBPORT;! I" H: ?5 B( j/ p( \
  16.     $database = DBNAME;/ G3 a+ R* X! n$ T; i4 S' k
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ( L/ z. U" w" G& n  ]* I
  18.     $this->database = $mongo->$database;
    - c$ n: p# D) S  o6 y9 N, r
  19.   }; c' Z. z1 r3 K
  20.   /**. ?- K: ^4 B8 ^$ z6 q  N
  21.    * 数据库单例方法; w) L, W# E8 ]: V- i' B' e; a
  22.    * @param $server
      V3 w0 e, j' j! W
  23.    * @param $user8 e6 |3 k1 W& l7 T1 d
  24.    * @param $password. O* s2 i* _  l2 y1 f* h! E) u
  25.    * @param $port9 e! c0 L; {; r+ x) S
  26.    * @return Mongo
    3 n! [. t3 b+ |, W5 ?/ h
  27.    */& `* P9 n. u; h% j+ o% S
  28.   public function getInstance($server, $user, $password, $port) {
    7 j0 V# n; q* o" g5 r' d
  29.     if (isset($this->mo)) {: Y6 f% s& y/ ?: Q
  30.       return $this->mo;
    5 h9 S  p& [1 J
  31.     } else {
    ! l6 Q$ U/ f8 V. F
  32.       if (!empty($server)) {
    * I" C" B8 p: D
  33.         if (!empty($port)) {! G% X& e9 f+ J6 I: l) x, h
  34.           if (!empty($user) && !empty($password)) {
    - q- `  C; d/ |9 I. Y4 a
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, r% O9 c: _# j
  36.           } else {
    . i9 ~: c  o8 B! @- G) K7 [. L  p' \
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ) [/ R6 X* k! {  _( {% {( E2 ~
  38.           }
    % h2 F. P" x+ G) I: p
  39.         } else {* `5 ]& o" ?, R/ B) ~& ?4 [
  40.           $this->mo = new Mongo("mongodb://{$server}");
    ) U. f  C% K- z, d+ t4 V  K  e5 a& L
  41.         }/ T; C2 [& x% D
  42.       } else {
    , E( ]  F6 ^- U& i$ h& v. }
  43.         $this->mo = new Mongo();/ `( e' H; |3 F. T
  44.       }% [3 l; y9 ]' R, a# W
  45.       return $this->mo;2 n) h0 u7 b6 u2 ~& i% Y8 l' h
  46.     }* B6 i/ o- w* {5 c
  47.   }
    " x; }# V- g+ f" Z- M
  48.   /**$ O+ a5 M8 ~( e3 X# f$ W
  49.    * 查询表中所有数据
    : @+ ~0 R) ~* y9 N3 C
  50.    * @param $table
    ) U$ o7 s8 G$ D
  51.    * @param array $where
    ) ^# c7 s: g; {: I* R* ?. Q
  52.    * @param array $sort/ Z! }9 Z" d- @
  53.    * @param string $limit" m% R# j7 |  ]; h: p: O) {' F1 X
  54.    * @param string $skip0 U  _. k. Z3 Q
  55.    * @return array|int
    9 i) e& i' p& J4 x4 u
  56.    */- a* G) l: c2 C% Y
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {0 [3 q. H3 t# }! f  G& J
  58.     if (!empty($where)) {+ \- n! U6 ]  p- \+ [( P
  59.       $data = $this->database->$table->find($where);
    3 d; G- ?+ G2 @, s+ M% ^' g
  60.     } else {
    - x1 o) d! o4 z
  61.       $data = $this->database->$table->find();
    ; T7 r! f6 [! g" M0 t
  62.     }
    : V/ \' T% K, Q5 N
  63.     if (!empty($sort)) {. v# |# h- I% [6 W
  64.       $data = $data->sort($sort);
    / K- m' a% w2 \* q( e
  65.     }
    ; V5 j+ ]2 P+ n: A0 D
  66.     if (!empty($limit)) {
    6 e1 b* j* l$ |) a' m" E
  67.       $data = $data->limit($limit);
    8 r2 ]+ g: V3 m# N% w$ B
  68.     }% b+ Z- s' \( |
  69.     if (!empty($skip)) {
      k: Z' J( I. _$ S
  70.       $data = $data->skip($skip);, @, }6 }# ~' w0 ~7 c0 I; T
  71.     }3 S5 n# a4 ]6 {
  72.     $newData = array();
    & v$ p! }) p4 v: K$ {
  73.     while ($data->hasNext()) {: s+ N1 B( W8 m; j% }# T% L: m
  74.       $newData[] = $data->getNext();
    $ b( K9 F. J2 `# N
  75.     }
    , \$ g$ l0 n. W9 {
  76.     if (count($newData) == 0) {8 P# J* c' o2 N# O2 t* l
  77.       return 0;& z& F$ N5 l$ J8 S+ P5 ]' [
  78.     }
    8 k4 c$ [/ {* q7 h7 j
  79.     return $newData;: O3 d& a6 B8 m" ?
  80.   }
    & _# B. z* D; S' n! x
  81.   /**
    3 h9 y0 H5 G+ |/ T+ i2 J$ a1 P1 ]& X
  82.    * 查询指定一条数据
      F9 C( k) W7 C' b3 I
  83.    * @param $table& `0 _5 h' j/ U4 h
  84.    * @param array $where
    ; q6 P! V; l4 |8 B
  85.    * @return int
    - t/ }4 X# k6 |0 p! o8 ^; L! o7 ]5 s
  86.    */
    7 r3 L4 \; L' ~* Q/ Y; @- |
  87.   public function getOne($table, $where = array()) {
    3 n) L) w) c$ r: O. a; j/ P
  88.     if (!empty($where)) {/ Q# z. u3 l! g9 d+ x) N
  89.       $data = $this->database->$table->findOne($where);7 {& V$ k8 i8 D3 g
  90.     } else {
    , m% E/ b6 z# p
  91.       $data = $this->database->$table->findOne();  O7 @* t+ I1 Q/ p+ n2 j% p
  92.     }  H1 ^! x# Y3 f6 U! H$ b- o1 M
  93.     return $data;  p- c& G/ g# H0 v
  94.   }
    7 M) i# c! D2 {6 u' H
  95.   /**
    & t' |+ o! w/ ~- C" x( m1 p
  96.    * 统计个数: W: q9 W( |8 a$ P% Z) I9 _
  97.    * @param $table5 f: e& r# u( w; G: }4 N
  98.    * @param array $where) ^' o1 d0 a+ Q# N; [4 v6 R
  99.    * @return mixed
    " y* ]" @4 p5 m+ R; B6 o7 N
  100.    */4 [; T) c8 H7 N6 F- g& R
  101.   public function getCount($table, $where = array()) {( _" H! U5 a! d* t/ R
  102.     if (!empty($where)) {
    5 x* T& o3 d+ c# e% D
  103.       $data = $this->database->$table->find($where)->count();/ b! D7 E2 z7 Q7 u/ K3 Y) I- ~: o
  104.     } else {0 P1 B7 b9 @; |  X' c# R# O
  105.       $data = $this->database->$table->find()->count();) W( U" p4 s% I# S/ l( y" S: W: B9 T
  106.     }
    ; K7 `" ^1 L4 [+ {$ h5 ]: E: |
  107.     return $data;
    1 x- }" c6 r& b5 }% S
  108.   }
    . J" O) }0 w; v; X, z0 g
  109.   /**+ r+ M/ W  {9 X: Y/ d! W
  110.    * 直接执行mongo命令
    # W" k/ s. n% F; K, j7 |
  111.    * @param $sql/ s2 N# J- {( O' B+ h1 H4 y
  112.    * @return array  K0 \/ h5 e. j" p  s, N
  113.    */% ^3 P. F* r! w7 L& j
  114.   public function toExcute($sql) {7 d" J0 x5 a5 g3 T) i  q) e- T7 ^
  115.     $result = $this->database->execute($sql);9 b, H: t8 ^) L' @2 f4 r# ^3 C
  116.     return $result;- z) X5 f9 E% L  K, E; r  P
  117.   }, h5 p/ P& x, C) M: P" W
  118.   /**5 R3 {$ u* i( y- q0 E/ j
  119.    * 分组统计个数
    2 u  `+ V6 y0 p. e7 J3 h' y2 s
  120.    * @param $table
    5 j' f  {+ t7 x2 I5 D/ H) Y6 X' t
  121.    * @param $where8 o: F5 Q/ Z. i  I5 J5 d
  122.    * @param $field5 D) e0 i0 x3 y; g2 u5 m
  123.    */" c' z4 ~3 p$ Q/ r+ M7 X( r$ E
  124.   public function groupCount($table, $where, $field) {
    3 p8 e  @0 R) \3 M! Z8 [
  125.     $cond = array(" b+ \1 j3 E: x' @
  126.       array(3 _9 V" ]1 \& C7 R$ |1 B' i
  127.         '$match' => $where,! y; X* M- G" x2 m4 {8 g
  128.       ),/ y4 ~, P, f8 R  c
  129.       array(. \0 S* o- D7 r- O+ Z7 ~
  130.         '$group' => array(
    8 T2 E& i) u- Q# U# ]- D
  131.           '_id' => '  s+ l  v  r: Y* C, ?

  132. - M3 t) U1 x; I1 E+ N  n: @' m" R/ a
  133. . $field,+ X! Q7 C- _$ H' q) A# g
  134.           'count' => array('$sum' => 1),( }; e/ O- [6 n0 D# o  e
  135.         ),
    . s0 M/ Y- p: Y# {
  136.       ),; G. ~1 i5 x6 {8 j, \2 L
  137.       array(
    9 W3 L5 [/ F  z$ [! `5 j# ~+ y
  138.         '$sort' => array("count" => -1),# m$ N0 x* w" e6 P. W0 ]8 [
  139.       ),+ w2 F- B9 M7 ?- y% N% r
  140.     );
    6 i9 i, \$ C" E3 F4 j
  141.     $this->database->$table->aggregate($cond);& ]( A+ ~9 Y5 }1 w; X' J
  142.   }$ q& p9 n& X4 B5 L& Z2 q
  143.   /**
    $ W4 W8 c) l& o
  144.    * 删除数据9 B$ Q( D! k8 e  k4 _( m, z
  145.    * @param $table
    ! ^5 J* [$ Q* Y9 o) B, _9 \/ e
  146.    * @param $where) m2 Z' q9 C5 t: @. t
  147.    * @return array|bool$ _1 C: Z; k) g9 C
  148.    */
    " x! |! D$ D9 |* {8 d
  149.   public function toDelete($table, $where) {8 m0 ]( _+ }+ q
  150.     $re = $this->database->$table->remove($where);
    , W) A& o+ D) x' N5 @
  151.     return $re;' B  ?6 N: d4 X1 l7 w
  152.   }
    , y1 D. P; F4 s" k1 h+ n% E
  153.   /**4 J" l9 G, Q) {2 ]" w7 K
  154.    * 插入数据8 S- _' g# f7 p# Q! J" A
  155.    * @param $table
    & G$ R; Q: M2 h4 o3 Y# N
  156.    * @param $data
    # }9 ]! [/ |$ A
  157.    * @return array|bool  b' `8 y+ }1 A7 @! C
  158.    */
    - X) ?4 n  r7 d& q% ~5 h8 D2 I
  159.   public function toInsert($table, $data) {
    5 l! ^2 c. @/ Q9 u
  160.     $re = $this->database->$table->insert($data);1 ~1 |: T5 R1 L7 B) E# O3 v0 a
  161.     return $re;
    ! d& z  t. a+ G( S. P3 R+ x
  162.   }
    2 _7 f5 Y) q( x* O2 f
  163.   /**" @# z: o, H; A' {, X, R
  164.    * 更新数据
    2 z: Y) f8 M4 [6 G6 P1 Z0 L
  165.    * @param $table/ O: s) s+ D1 z  k
  166.    * @param $where, a8 r: e3 |2 H. a) T
  167.    * @param $data* b+ u3 L! t; P  g+ r; r1 j
  168.    * @return bool
    : h7 B2 u2 |+ y6 `% h. A4 }
  169.    */  ~9 e0 j5 F! W- E3 D: D4 G
  170.   public function toUpdate($table, $where, $data) {
    3 K4 c: l; [: U: L! B1 N# j5 |2 L5 E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ; {1 j  P5 D! E: O
  172.     return $re;4 V, ~# a& X$ H& W$ Z) g
  173.   }
    ' T0 G; ]# b* {3 @; u( o
  174.   /**
    * w* d) z9 ^9 m9 O: v) w# T
  175.    * 获取唯一数据
    3 n2 U' G4 f! d
  176.    * @param $table* u/ d7 }1 k; q
  177.    * @param $key
    ) B7 m9 N' J. c; z/ o# K& r' ?
  178.    * @return array
    / ]1 A" f! Y* O6 c9 x! v
  179.    */
    8 @8 _7 k$ d- ]& @
  180.   public function distinctData($table, $key, $query = array()) {
    ' `8 I' F: z  Q$ p* m1 i
  181.     if (!empty($query)) {. _" B$ u" j& k+ i+ E( V
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);: g. }8 x2 r6 j& E) w1 t5 l
  183.     } else {
    + R  t2 V' _! r% Q5 [* y
  184.       $where = array('distinct' => $table, 'key' => $key);
    2 a+ ?. R. T7 _" ^. j" f
  185.     }
    & p/ e4 D2 x4 `3 o, g
  186.     $data = $this->database->command($where);* _0 k6 p4 V7 n% B
  187.     return $data['values'];7 \% ?/ m& t2 |. i
  188.   }' n# @2 ]! p$ Y6 B
  189. }! d7 n; z. S# s! d3 l* z+ h) C9 j
  190. ?>
复制代码
; E( p7 \! O8 [  _) n3 J
3 ?6 {  Y- Q. l2 c9 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 02:07 , Processed in 0.051962 second(s), 19 queries .

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