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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
* o0 u, x% y- H: q" Y* F模式自由。
- S8 D% r" A, G% Z- j支持动态查询。
4 x9 U+ s5 w# L, X3 o支持完全索引,包含内部对象。* f6 F; |# c$ \! [9 |" ?! n
支持查询。- X+ A2 K' T; x+ ^0 R) F! D
支持复制和故障恢复。' |; _% w# b, A/ h% n5 B% x
使用高效的二进制数据存储,包括大型对象(如视频等)。' i, O1 X* s# A& H
自动处理碎片,以支持云计算层次的扩展性
  O, [& I9 q: @+ J& p支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。' `. L' R$ x; F9 q0 O% e
文件存储格式为BSON(一种JSON的扩展)
/ x; _7 F" d+ H可通过网络访问

所谓“面向集合”(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
    5 T! q' z- r: u* e, |; c6 b  m
  2. /**
    ; H7 `2 B! W  m* F! E$ |
  3. * PHP操作mongodb数据库操作类
    2 D/ _$ K$ ~* `( R: I. Q. j
  4. */
    ' p: D9 i. D0 A$ R" z) q, @, d" _; L
  5. class Database {' Y1 C3 J% T# \/ b& u! h9 A9 L
  6.   protected $database  = '';
    5 Z8 e) z$ Z) q) |4 A
  7.   protected $mo;1 t0 D4 H( N) O7 ^5 \
  8.   /**
    4 K* |8 t- O- M! N9 q' |
  9.    * 构造方法
    3 {; x6 k- y1 ~
  10.    */2 ?/ z2 d  _" T" K& e6 N3 I
  11.   public function __construct() {
    . V4 i# C- {( s
  12.     $server = DBSERVER;% @5 v# v$ J3 |% w; i
  13.     $user = DBUSER;
    9 W3 U* K- D% g/ ~# |
  14.     $password = DBPASS;
    * B6 J* v! p2 q7 g3 m
  15.     $port = DBPORT;. m- q/ ]$ C' A' q2 _5 z
  16.     $database = DBNAME;
    ! r5 B" W, ~/ b  Z" c
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    7 d7 L- X( @* [
  18.     $this->database = $mongo->$database;
    3 R4 V, S2 B7 Y2 @& \
  19.   }# X% C' z4 g) j
  20.   /**
    ! N: h3 \4 `& U0 ~# u1 {, ]! O# h0 l
  21.    * 数据库单例方法
      N7 Z' L. y2 v: l4 F
  22.    * @param $server
    3 m  |+ A; w0 k3 F/ y+ p
  23.    * @param $user
    8 j) e/ @% U4 J7 ^% _$ [8 p
  24.    * @param $password
    ! |( N7 u0 O( u! B
  25.    * @param $port, ^) K2 A  C! j" ]: H  i; i% ~
  26.    * @return Mongo- [  x) f8 k9 l' Q3 g
  27.    */7 A" m& Z' _2 e& e; K
  28.   public function getInstance($server, $user, $password, $port) {% f6 ], ^. R4 J8 [* w, v
  29.     if (isset($this->mo)) {
    2 e! @5 N8 W3 X2 Z3 ]& i
  30.       return $this->mo;  g" \8 A# M) [. x, T- P5 W
  31.     } else {2 [7 A0 j) N6 n
  32.       if (!empty($server)) {
    " w4 K0 X3 K  t+ X+ j* Q
  33.         if (!empty($port)) {, H- z0 Q$ j' O$ A
  34.           if (!empty($user) && !empty($password)) {8 I- d8 V( k$ L3 L9 y8 Q
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    + ~" [  b) U- l! M7 Y& l
  36.           } else {
    6 q% x" j( p/ a4 k+ M9 Y" [
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");3 Y  w+ X& s9 K5 D: H
  38.           }9 H3 |: a- R$ j$ h# W# l7 n
  39.         } else {
    $ T. N1 a9 }( c: s/ ~
  40.           $this->mo = new Mongo("mongodb://{$server}");
    2 v. P/ q8 L7 ^' Y6 i
  41.         }$ ?6 Z5 M8 `9 E* C
  42.       } else {& I2 E* }5 l8 c( M2 r, ?+ i' Q* j
  43.         $this->mo = new Mongo();+ d  ~( b/ s! E- u% N# e1 i. t
  44.       }9 k+ E3 E: Y5 ^, P% L9 D
  45.       return $this->mo;
    * [4 _. X( R+ P! U! z- R
  46.     }* X8 v5 U$ X5 I. A
  47.   }
    / v0 M0 O! x+ h
  48.   /**2 x; {- q, Z# G2 q
  49.    * 查询表中所有数据) m; O0 v: d& o. h
  50.    * @param $table% p8 U; k* U5 d$ N( m4 }1 @
  51.    * @param array $where2 R* V& M: k  g
  52.    * @param array $sort: o6 Z2 F" O: Y3 N0 F  ~8 h
  53.    * @param string $limit: t" C/ `* T1 Q4 \
  54.    * @param string $skip
    8 j% i. N. M- C' G; ]6 ~+ r
  55.    * @return array|int
    0 B4 G" Q; T* V5 G  S
  56.    */) S# G8 q$ \' Q  v7 I8 G
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {6 l3 ^9 h+ i8 N  Y$ C
  58.     if (!empty($where)) {0 }: ^! [% c4 D* V5 C; W
  59.       $data = $this->database->$table->find($where);, o2 O7 S- }8 f. k0 Q
  60.     } else {
    ! W$ B! m% a& m( W# H2 I5 @. `# u. k
  61.       $data = $this->database->$table->find();- O. e1 x8 w' V+ x6 V
  62.     }
    ) b% r+ m' j# N/ W( C
  63.     if (!empty($sort)) {% i# d/ x5 y( A6 e3 i7 b5 J
  64.       $data = $data->sort($sort);; Y4 H; W7 k/ i2 O4 b) `- {3 o
  65.     }
    ( X/ C  `! V& u# e/ R8 f5 \! x
  66.     if (!empty($limit)) {  }7 S/ o5 C4 U7 b: O- Y# X7 S
  67.       $data = $data->limit($limit);5 w2 j! l2 z$ j7 s9 ^; B3 E
  68.     }
    ! K- o- i$ O% t6 A9 b* w* p
  69.     if (!empty($skip)) {
    . j2 l% Y3 j7 y2 Z+ i, T9 A7 \
  70.       $data = $data->skip($skip);& S( J/ X4 F! U" A" \; ]; X0 Y
  71.     }( U+ v7 v. ?" u" ]+ n1 v
  72.     $newData = array();
    6 }- v$ T* Y( o- |: {7 P
  73.     while ($data->hasNext()) {# f0 S3 F2 a2 Y, H7 U! G
  74.       $newData[] = $data->getNext();
    $ K- d5 B4 w2 k: D: k" a# Z1 s& K
  75.     }$ o( n9 v: u% R! l0 A+ V" s
  76.     if (count($newData) == 0) {& m3 `9 \6 {& ]8 V: p8 g
  77.       return 0;: Y0 x3 T( M  D0 Y
  78.     }
    " i/ X% V; \: v0 e" D$ m. b
  79.     return $newData;& {6 n: u% Z( [; r+ V' r% u
  80.   }) A1 l7 J, a4 Z1 h  z
  81.   /**7 P% T( L2 k: z& j" \& D" E
  82.    * 查询指定一条数据2 B7 S  f# x4 \- E. K
  83.    * @param $table  A( q( L( Y4 }5 G$ ^' G6 Q9 o& W
  84.    * @param array $where
    / C8 A4 l  {, i; q. i/ H- U
  85.    * @return int9 x. ]& d7 [7 {, `3 N
  86.    */
    4 ~- ^( T" O+ S, |6 Q8 X# A
  87.   public function getOne($table, $where = array()) {
    / o+ \/ O+ S" m: L
  88.     if (!empty($where)) {* {3 B7 h1 ~( `  l4 V5 ~% }
  89.       $data = $this->database->$table->findOne($where);
    + O' ?: t: v  O, c8 c" z: Z
  90.     } else {
    4 {: _5 R' p; S. c% U: q$ r
  91.       $data = $this->database->$table->findOne();# [! V' s( J) O. P" a5 W
  92.     }' d7 V8 \. t6 l7 l9 @9 c
  93.     return $data;
    & Q) F, l. C" v
  94.   }
    * j5 P8 `+ l6 P: z
  95.   /**
    0 {# t  M8 M( s
  96.    * 统计个数( v% S; A5 B, g% b( Q
  97.    * @param $table0 t0 C- i' v& q' M4 g
  98.    * @param array $where
    ; e, w1 x+ u5 i& u2 d& S  L
  99.    * @return mixed
    , B* Q0 r- O$ O7 C. M1 j& S
  100.    */& |# _5 P% T" d+ ]3 S
  101.   public function getCount($table, $where = array()) {
    " B, e: Q, a/ K& X' w6 w
  102.     if (!empty($where)) {
    - y" B9 h3 Z$ S
  103.       $data = $this->database->$table->find($where)->count();
    " v2 c7 \# v" x
  104.     } else {
    * y" Y- u4 W. [5 W
  105.       $data = $this->database->$table->find()->count();
    3 N% p' V5 }$ d# |3 I
  106.     }8 _8 r" u8 n2 F, E
  107.     return $data;8 ^: i& ^2 z5 b. j3 o
  108.   }
    % j1 K" M' Q/ }0 M- ~
  109.   /**
    . V$ d2 ]2 K/ W$ b6 f
  110.    * 直接执行mongo命令
    5 b4 S* [5 `/ q5 |
  111.    * @param $sql
    3 B: K8 }5 `. h( c4 p
  112.    * @return array+ |5 Y* b2 T. `' W
  113.    */3 P! ^3 b  B; V# o& x3 o- y
  114.   public function toExcute($sql) {
    " z. |* V! K# {, |, J' V' m9 z
  115.     $result = $this->database->execute($sql);: _  c0 s3 i, x; N- S
  116.     return $result;
    ( t- _1 _' k; S
  117.   }
    0 M$ d4 G* Z* w7 F/ H
  118.   /**; l  y: D* B7 M' h8 m, _
  119.    * 分组统计个数( n) O9 U1 T9 }2 z
  120.    * @param $table
    2 ^# G. `5 S+ U9 ~6 _
  121.    * @param $where
    $ c6 k! e: V4 O. c  p0 q
  122.    * @param $field: V3 K# c) I+ [' W3 Q
  123.    */* _' ], U3 |# r/ [2 P1 y: {" x
  124.   public function groupCount($table, $where, $field) {' Z5 d1 B  e* u/ c  B
  125.     $cond = array(
    + Q6 k5 L. }4 m
  126.       array(, n& M. l5 I) G8 A# Q, I
  127.         '$match' => $where,
    ' G! p" N. \: f) o7 i4 g) h
  128.       ),  ?( @  U5 Q" C! L2 T- `5 w
  129.       array(
    8 c1 N; W/ H8 L1 c0 C
  130.         '$group' => array(( o; g6 D* n- S, r; f
  131.           '_id' => '3 J) h* W9 u/ G; a4 K9 Y( g/ z
  132. 0 N! w: @2 B5 l( _8 U
  133. . $field,# r6 }8 n, ~2 B, l/ C
  134.           'count' => array('$sum' => 1),2 v/ c2 @5 o- w3 k0 K( I
  135.         ),
    * ~5 r' y; d$ m  `% M
  136.       ),
    , C( h1 a( T" B* U( G9 a% s
  137.       array(
    3 s$ {5 T8 h) W8 d; d
  138.         '$sort' => array("count" => -1),
    5 i9 q) z3 p7 n" T( Q% \, [
  139.       ),
    6 ]: w8 a( _! J/ v" I6 g: j3 n4 s
  140.     );0 Z/ p! D& N6 @& L) F* K$ F0 ?
  141.     $this->database->$table->aggregate($cond);6 @+ P5 z8 D9 h' |
  142.   }
    3 d& z& l/ J- n& ?
  143.   /**
    , m) S3 g( L7 I3 V1 N% w
  144.    * 删除数据8 {3 r8 _5 v8 ?  r
  145.    * @param $table- i! t5 ]9 A0 p( o' b
  146.    * @param $where
    6 m* U& `& x$ @; Z( _
  147.    * @return array|bool
    / T3 I  B. F1 |6 M
  148.    */
    5 w  v7 R( W* U: s) U
  149.   public function toDelete($table, $where) {  r8 W! J- u" C4 o; a
  150.     $re = $this->database->$table->remove($where);( D8 O9 q" X+ t3 A/ Q
  151.     return $re;- ?" a+ B9 }3 a" h8 ?3 b
  152.   }
    - N6 b, w  m1 z' F* ~/ \
  153.   /**% ]+ r1 o3 P9 y* Q' c
  154.    * 插入数据# y5 C& x( z' O: H& F3 Y& s- m$ N8 N
  155.    * @param $table, g' _: W: k( P. v+ V+ a$ s
  156.    * @param $data* D, J2 C$ K' ^0 h% d- c1 v+ e
  157.    * @return array|bool
    5 Q9 o) O5 C+ C( C5 b; [4 P
  158.    */0 V9 _/ u! h" d; a6 \
  159.   public function toInsert($table, $data) {* k7 F# e; c3 J2 {% i5 [' h
  160.     $re = $this->database->$table->insert($data);
    : l) i0 `* I5 n/ a. K" B
  161.     return $re;- v9 `  a8 G, m7 W* P
  162.   }
    6 }+ s* c! _8 \, Q
  163.   /**
    4 v) m4 o  ?  C7 r# n& ~( M, J' P
  164.    * 更新数据
    ' B4 ^6 i6 M/ \0 N4 ~3 A9 e
  165.    * @param $table. s8 Z/ e% w  ?  G7 V" Y5 X9 L
  166.    * @param $where# I& f* b/ s5 O& E
  167.    * @param $data/ j5 @* B1 J4 R8 B  ]1 E
  168.    * @return bool
    9 J6 e7 `) [/ q% D2 s# B# {
  169.    */
    + Q1 s. ^7 R' V
  170.   public function toUpdate($table, $where, $data) {
    + X7 R$ g( Z$ \; r( F  @# B4 E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    & |( E, P4 Q6 z% ]9 _7 P
  172.     return $re;
    $ T# G9 g+ Q3 {& b) x' J- h4 g
  173.   }9 I; n7 n. V$ _  A
  174.   /**
    8 Q& h3 g+ d- J: t+ k* I: \+ ~
  175.    * 获取唯一数据  ^8 e4 l, _+ p( o
  176.    * @param $table
    5 N8 r- R5 J1 g
  177.    * @param $key
    + R) Y. G) w& g+ T  a+ g
  178.    * @return array- r( J, L2 ~4 C4 B" u
  179.    */& j; ^' E1 K% A+ Z
  180.   public function distinctData($table, $key, $query = array()) {6 W( M: u3 ~8 b) _# F, o% r* E
  181.     if (!empty($query)) {
    : i" n4 M+ K$ D* [: a: K2 |: E
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    $ ]8 A$ {4 e8 G  d
  183.     } else {3 d2 [# S( _. H9 Q
  184.       $where = array('distinct' => $table, 'key' => $key);
    ' b, U) ?# Z8 ~) D! X' X! j; C
  185.     }+ z. I- O+ a4 x5 D- _$ w% S% |* _
  186.     $data = $this->database->command($where);+ V$ R: ~# g) j4 V. {
  187.     return $data['values'];/ V1 q1 H5 U& g; i' w: I! e
  188.   }
      r% t8 I( f" Q: L
  189. }
    8 E- Z5 s& ^( i; D
  190. ?>
复制代码
& a# O7 ?" P; J4 {5 N) ^& @+ [* y" v
6 J: b3 I% o) K* Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:53 , Processed in 0.060947 second(s), 20 queries .

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