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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。6 a' s. S# U, n5 {$ {- d
模式自由。
8 \) J' N9 j7 C& s! r& Z# e5 x% N支持动态查询。
8 o% L# _2 z0 T# e' b3 Z: |8 x支持完全索引,包含内部对象。& v3 o4 d* M/ n9 V( G$ k
支持查询。' I# U1 ^' o! f  [
支持复制和故障恢复。
3 Z/ [$ m; w; e! Q使用高效的二进制数据存储,包括大型对象(如视频等)。
+ u1 p9 X& Q; n# F9 q自动处理碎片,以支持云计算层次的扩展性
1 x- x4 o3 e" `& ^. H1 X支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。0 I: [" J: k5 s9 Q6 U4 Q1 h* Z& W
文件存储格式为BSON(一种JSON的扩展)& G0 [. p" V# Z6 Q
可通过网络访问

所谓“面向集合”(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. <?php5 \( Q$ F# H. ]
  2. /**% b+ @4 e% h7 u( i6 \+ R) o  M0 @
  3. * PHP操作mongodb数据库操作类
    + ~) d9 e2 i8 n% {& W
  4. */
    4 E+ k4 M$ H( b
  5. class Database {
      u# S' l% N. j
  6.   protected $database  = '';) }) X/ u$ x: S& _- s" [2 b
  7.   protected $mo;2 n/ L7 @4 _3 P% ?# v" V( A6 V: D
  8.   /**
    4 c4 W9 i7 d# D5 |* }/ a
  9.    * 构造方法# v7 K+ H5 D, S/ T# L
  10.    */; |. i: X4 q- k% |/ d# v- l
  11.   public function __construct() {
      y8 [! V+ |, p, i& |
  12.     $server = DBSERVER;6 [% ~2 [8 h  I2 ~7 x
  13.     $user = DBUSER;
    1 m$ k% V0 Y' v. o1 |
  14.     $password = DBPASS;- l! A  d1 X3 M% Z) q
  15.     $port = DBPORT;
    ( @, G/ V" D% \1 W" h
  16.     $database = DBNAME;) n2 C& q4 F5 B
  17.     $mongo = $this->getInstance($server, $user, $password, $port);4 k7 Z3 ^& ], v3 k
  18.     $this->database = $mongo->$database;  \" s  B( \3 M$ ?6 s) m, Q2 A
  19.   }7 t- Q# L( W0 @5 D: {
  20.   /**2 g/ H8 _" o) c: o+ W
  21.    * 数据库单例方法
    & G1 |' a9 |4 y0 z6 i
  22.    * @param $server9 @- \$ C' V. d; X6 j
  23.    * @param $user- A; q/ V$ S' {  p
  24.    * @param $password
    8 C& R5 g# P7 \3 ~6 y# a  G8 m, H- Y
  25.    * @param $port! h" R# j! [3 K1 G
  26.    * @return Mongo9 ^6 o. Z  W$ N1 g+ L. M
  27.    */
    + ]$ @+ K% G  s* }. k5 r
  28.   public function getInstance($server, $user, $password, $port) {# ]" q3 i# {9 p2 H2 d* D$ d" u9 W
  29.     if (isset($this->mo)) {  N. h# _, K$ [) J: s' {
  30.       return $this->mo;
    - o0 F+ i# _( g- v6 O/ O$ p- c
  31.     } else {
    3 q9 K+ C% R4 `: {7 C  T+ p0 c
  32.       if (!empty($server)) {
    * I+ n7 t. \6 J& ~; G
  33.         if (!empty($port)) {/ k3 `! ~5 q- P+ I6 w
  34.           if (!empty($user) && !empty($password)) {- O" W% ?: |! Y" H5 J2 Y& Z, }. G
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ' d+ c' L4 h! }& [1 Z* F6 ^$ b
  36.           } else {2 m1 q3 E$ Z: s' y
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ) |* N* k- I* S! h
  38.           }
    # ?; U) Y  t4 Z8 g2 ^; I! T5 E
  39.         } else {
      W/ F4 o2 M3 s) `4 h8 j& t3 S  K
  40.           $this->mo = new Mongo("mongodb://{$server}");
    7 s: c3 S2 R' Z6 m
  41.         }; x  o6 Z# K- A6 a# |6 c$ b
  42.       } else {
    5 d! S$ L3 |4 c  J: B: N
  43.         $this->mo = new Mongo();5 v) {. y: ?8 R' M2 b' C
  44.       }7 _6 K2 f, P, D! @- W0 ]2 i5 ^
  45.       return $this->mo;8 F3 _& m4 Y& U& P/ C5 U9 L( ?$ ]
  46.     }
    8 P% p3 \3 {- \1 E
  47.   }, M' H, r; I, x1 p6 Y" j: N. W/ v3 N. f
  48.   /**" ^8 ]' j4 `* o( T5 Y
  49.    * 查询表中所有数据8 @4 }! V" K/ I% u8 n, G
  50.    * @param $table
    + V) ]( m7 I6 U) W1 R/ \& q
  51.    * @param array $where
    : ~4 J8 w# S4 e1 ]: |" G
  52.    * @param array $sort
      ?: A8 n2 r4 p) q
  53.    * @param string $limit0 k) I' Y7 W% Y5 ~$ R
  54.    * @param string $skip8 D+ k1 u( N7 g2 {: }  L5 w
  55.    * @return array|int
    6 @! {' ~& a" b/ d4 m
  56.    */" d0 E8 P) O, a- N3 e
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    6 r" i8 a0 |) o) {
  58.     if (!empty($where)) {* R9 D; f' ?" h7 ^
  59.       $data = $this->database->$table->find($where);
    6 i$ v' o1 L' M- y& S  `' o
  60.     } else {
    / @: A" y0 F) S6 x) t3 T
  61.       $data = $this->database->$table->find();
    + E, p- p, t. Y3 [$ U
  62.     }# _3 l9 ~9 d7 ]' @6 ^& X
  63.     if (!empty($sort)) {
    + h- @! d# g6 N5 b* j5 t
  64.       $data = $data->sort($sort);
    0 K! d0 n- T- N+ r* b# Y
  65.     }1 W8 }  R( H0 N5 R
  66.     if (!empty($limit)) {9 s% T; D2 [. P  D9 {  P, i/ U
  67.       $data = $data->limit($limit);
    % X! H$ p- p2 }' a' h% H
  68.     }  u' B7 }% L. E3 s1 z1 R
  69.     if (!empty($skip)) {
    2 X+ J! }0 c" z9 U& M: H
  70.       $data = $data->skip($skip);, g! w# ^+ y  ]) G  F5 o
  71.     }
    . y6 ?; h* X/ y: |2 R
  72.     $newData = array();+ \! Y- T8 f; K) g
  73.     while ($data->hasNext()) {
    & }' W5 w8 I0 t1 G' ^" {
  74.       $newData[] = $data->getNext();, W2 ?. W, x; s! |/ t& C
  75.     }
    2 u  F% `" f) E0 q4 G
  76.     if (count($newData) == 0) {
    7 W* h6 m8 T8 a7 L* N+ J6 r  n
  77.       return 0;
    4 w* u( n( _: U  N: J; ]
  78.     }
    " Q9 v1 Z. f4 V" j
  79.     return $newData;8 N4 E0 |( @1 i7 F  T7 ~
  80.   }0 W- `' i' f+ v3 r
  81.   /**
    7 y. p4 Y0 `8 Z0 A- P1 w
  82.    * 查询指定一条数据) k1 `, D3 p$ j3 ?2 V0 {' p
  83.    * @param $table
    / A) E& [3 X; ~, b
  84.    * @param array $where9 p0 z$ Z. M4 @, N
  85.    * @return int% A  [& L+ r1 F% u4 r; _" y/ Q! J
  86.    */
    - \+ W$ u, Z- }
  87.   public function getOne($table, $where = array()) {" d8 T  ]4 Y& w( v
  88.     if (!empty($where)) {, X6 A4 K7 ~, F8 V/ }) D) e8 S, }
  89.       $data = $this->database->$table->findOne($where);
    / J4 o' c2 T: R3 L8 f
  90.     } else {7 r' k" y; _! s  i
  91.       $data = $this->database->$table->findOne();
    , [+ h0 l9 U$ I3 c) x" F
  92.     }( X, k  m$ ]  Y! T9 b" ?. k. r! _
  93.     return $data;
    - b" C4 C% N6 X: b4 j* Z/ C" z- U
  94.   }* J& M4 e0 z: Z
  95.   /**
    6 Y; ]+ n$ R2 Y0 U& N
  96.    * 统计个数
    4 L: D, I9 K' r$ _/ G5 _, d$ k& ~
  97.    * @param $table
    % u& c2 |! r1 W/ `$ h* ]6 }
  98.    * @param array $where+ ?. \6 Q' q5 Z2 F& X
  99.    * @return mixed- A  I" j2 v2 N% t. d- U9 z2 i' L
  100.    */
    4 F5 }' ?! w; d) O0 ]1 _6 {0 W
  101.   public function getCount($table, $where = array()) {  R; D& u3 [; Z0 g7 _2 A  I. j8 [
  102.     if (!empty($where)) {
    ! B3 M% x+ V" c+ s
  103.       $data = $this->database->$table->find($where)->count();
      L' A* }# e  s0 S/ Y
  104.     } else {  w, u( T2 f" P5 `' C; G
  105.       $data = $this->database->$table->find()->count();; b  G0 u9 F! ]. g1 j5 C
  106.     }1 s  m9 X7 e! R! `# [5 D% d
  107.     return $data;$ \$ x6 ~) I4 c8 M
  108.   }
    6 r1 X3 h) ]0 Q. |  v- I! m4 @: |4 O
  109.   /**" W0 Q8 H3 v# m( |+ B
  110.    * 直接执行mongo命令8 ?0 |; I" r7 u
  111.    * @param $sql0 G) |) Z4 A) A+ i! R, ]& j
  112.    * @return array+ n  F1 h% J8 a$ M" X* _. g& H
  113.    */
    : X! Z  q; c5 x# X
  114.   public function toExcute($sql) {& f7 n4 E) Y1 H* o  a* G8 G
  115.     $result = $this->database->execute($sql);+ T4 |+ i5 E# n$ b
  116.     return $result;9 }- w( X/ G- L5 N
  117.   }6 ]; t0 P) ~: w9 Z6 ?( u
  118.   /**
    ! G& `3 r& Q9 Z+ t" {, ^& K  M
  119.    * 分组统计个数) t& f& ~5 X- M
  120.    * @param $table  ?( ]! U1 X3 U/ G1 x
  121.    * @param $where
    , Y9 t+ p7 |4 `# L; J( f! P2 S- O# [8 X
  122.    * @param $field
    " F8 W( O& g4 f8 H, a4 l. P
  123.    */
    ( \3 r5 G& s9 c/ h8 c
  124.   public function groupCount($table, $where, $field) {
      }+ {/ W  k# e$ g. \+ k' M
  125.     $cond = array(
    2 M6 A8 F" u0 F$ M: t
  126.       array(
      x' s% ?& N( F" ]% ?; }
  127.         '$match' => $where,- d8 f$ a7 ?- |1 w- H7 m
  128.       ),% U. C7 B3 R% P8 u. Y
  129.       array(3 _0 |* h  I: }
  130.         '$group' => array(
    9 \2 L9 Z6 J8 Z# U8 b
  131.           '_id' => '$ a+ N+ X9 f" A# k- M4 |
  132. 7 Z& C" a$ Y. E
  133. . $field,6 e( V; W: x8 G1 J& h
  134.           'count' => array('$sum' => 1),7 p3 |, o; f1 W
  135.         ),
    % @2 l$ q% f) ?
  136.       ),
    / g  w0 x" k/ u; y, ~8 U) C
  137.       array(
    ; h: r8 R- `) G4 e' _
  138.         '$sort' => array("count" => -1),
    : Y; ]* F5 i) p4 N8 z
  139.       ),
    ) h/ i! k9 D  R' I) f
  140.     );; R  j7 ?0 ^, S, S% @
  141.     $this->database->$table->aggregate($cond);
    2 e4 Z/ L  V3 q% A7 q7 x# @
  142.   }9 \2 S' Z* P  p$ r9 u3 |
  143.   /**
    6 p* a4 w& P0 F) q& e  I1 k$ N
  144.    * 删除数据7 R/ G6 ?  d2 h( E. \
  145.    * @param $table
    % }& D2 w) L+ ?" t, c$ H- e
  146.    * @param $where
    ( g# C' ?; V0 N
  147.    * @return array|bool
    % r; B/ L( I8 b% i  H9 I5 z7 h
  148.    */
    * r9 n. @! v8 p9 N  q
  149.   public function toDelete($table, $where) {
    . C- i$ W  B: u; D0 b8 j' V0 k
  150.     $re = $this->database->$table->remove($where);
    & _3 E0 J( p3 B: s/ u
  151.     return $re;. `0 C" o" q9 n
  152.   }
    / D0 e) d0 K& [" A) Z+ M  {" W- `& _
  153.   /**" M8 b. m% D: g/ @9 l
  154.    * 插入数据
    ! Z; I- |5 n' ]
  155.    * @param $table
    - r1 f! H' q6 p) Q3 J+ u/ R
  156.    * @param $data
    8 _! m! k! g! H
  157.    * @return array|bool2 h" U$ g( h# S) @
  158.    */
    8 N8 F. R  |1 v8 e) A8 F7 q7 B
  159.   public function toInsert($table, $data) {
    ; x% @3 E! o4 E3 D# J
  160.     $re = $this->database->$table->insert($data);
    , f6 l, T9 w9 v) S+ R" G: w! m, E
  161.     return $re;! L4 D# T9 k( X, `4 K
  162.   }5 g1 a# _" @+ J4 y* |0 e) {
  163.   /**
    3 b5 L$ C1 Q7 J8 r4 [4 e
  164.    * 更新数据! V* m0 q& ]1 i1 K
  165.    * @param $table  L- j; Z2 \$ n- `6 B$ F" Y$ b
  166.    * @param $where) r8 t% C/ y/ l" q3 ?6 ]
  167.    * @param $data. ^. Z2 W  N; ~3 ]7 a
  168.    * @return bool9 Z6 y1 K3 y6 s) O( x+ i! L5 r
  169.    */% `% E, O6 `; g- x6 j9 U
  170.   public function toUpdate($table, $where, $data) {
    ; {$ O4 }. e4 j- C
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    9 |2 g& E% M. j! u) o* k: o
  172.     return $re;
    - R9 K3 Q2 B: P! E
  173.   }
    ( c( y9 p4 z- f+ q  I, }1 Q6 E
  174.   /**
    4 \: z3 [9 ?7 i( \1 S
  175.    * 获取唯一数据
    5 }# s. Q. s; Z# e6 _0 U
  176.    * @param $table. i% z. N2 k9 n" |0 t6 j" [
  177.    * @param $key
    3 M& q# o$ @, l* W! W
  178.    * @return array7 |0 ^% t: L9 N& C3 Y2 M
  179.    */
    : \( C$ H/ l* X% x$ N
  180.   public function distinctData($table, $key, $query = array()) {
    0 B- P4 v5 i+ ^) r
  181.     if (!empty($query)) {4 b+ Y* p9 {& x# h. R
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);; T' U6 m* |" U4 q; m$ ]8 Z0 E
  183.     } else {: Y5 z( ^9 Y) P& U5 r) s
  184.       $where = array('distinct' => $table, 'key' => $key);3 c( B% U/ H2 K4 T0 N# m" Z5 o
  185.     }% |% ~6 K0 z8 M8 a( \# V# y$ T
  186.     $data = $this->database->command($where);+ @4 I9 h; H/ `6 f  w7 W
  187.     return $data['values'];7 h' L" N( W/ |. g) b
  188.   }
    + {2 n4 x* [; B8 P1 b+ m4 v' K' W3 {
  189. }
    + {5 S/ D8 t/ j% A3 \
  190. ?>
复制代码

1 o. U8 a! T4 k. h  l6 u, W& s
0 N8 \. R2 J- p% a3 r1 H# D: a7 ~/ }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:11 , Processed in 0.082364 second(s), 20 queries .

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