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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
+ ^0 y1 j, E- a2 P模式自由。4 z4 l# Y9 i8 S4 m2 X, c
支持动态查询。
3 F# y. L3 O9 g$ ^2 o支持完全索引,包含内部对象。
. s1 s4 G: Q$ E' S支持查询。
) Z5 `0 E! z* `支持复制和故障恢复。& ~4 V5 F4 A% S: g
使用高效的二进制数据存储,包括大型对象(如视频等)。
( b: e; |0 X3 i7 |4 A自动处理碎片,以支持云计算层次的扩展性1 B9 }. d+ K3 ?/ i
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
$ o, `% X3 \6 K4 r, x6 S文件存储格式为BSON(一种JSON的扩展)8 }+ c  }% N8 C" H4 u
可通过网络访问

所谓“面向集合”(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
    & q2 D. h+ t# W) G9 x5 T
  2. /**- i' s: C2 P/ S, l5 Q
  3. * PHP操作mongodb数据库操作类
    , W' z; c: g7 H! R( Z9 r
  4. */
    $ B' r1 X0 H4 }/ g7 w
  5. class Database {/ a4 k0 z2 M/ G% a2 O" f0 N
  6.   protected $database  = '';8 S9 [2 E& A. \; s4 e" `+ R
  7.   protected $mo;# j: Z0 F1 J$ i) @1 G
  8.   /**6 D) w& ]: S: E* ^* T; ~3 \
  9.    * 构造方法1 p- s! V  {5 k, f2 q" b2 T, F
  10.    */) z/ x# |' r/ |6 o
  11.   public function __construct() {
    / R( B' U+ b3 e: f
  12.     $server = DBSERVER;( A% t( v- H2 ~! V
  13.     $user = DBUSER;
    * b7 ^# M% \4 }6 N- _- y
  14.     $password = DBPASS;8 H9 a0 U0 ~% _' Z: s
  15.     $port = DBPORT;( ^# j5 U* C/ r$ M
  16.     $database = DBNAME;$ x6 [3 v& G6 L" j
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ) X' ~* r4 p2 q9 B0 U
  18.     $this->database = $mongo->$database;
    ) g( _1 w' X% i! J
  19.   }& D  }2 Q. a2 i
  20.   /**+ K% @2 S9 `3 Q& R( w# |
  21.    * 数据库单例方法7 p0 H8 g4 M! s5 f
  22.    * @param $server3 Q0 {1 ?6 u7 b. `$ R
  23.    * @param $user
    * D$ r! E3 d1 o, w2 z- e
  24.    * @param $password( z7 a4 Y6 @+ p) W4 E
  25.    * @param $port: d2 D& D4 \- B) {8 e1 h
  26.    * @return Mongo& `  F! k1 ]7 c6 {* B% O! n6 m
  27.    */
    + e$ C5 s: L  j$ ?9 @
  28.   public function getInstance($server, $user, $password, $port) {
      q4 p/ W; r7 d: }
  29.     if (isset($this->mo)) {
    " ]- Z! L5 O, b. P! l. o
  30.       return $this->mo;/ Q& U/ S# ~4 `5 c; _
  31.     } else {* U' \2 R/ ~% t1 _" u5 B; E  w
  32.       if (!empty($server)) {
    " g$ }; l2 y. ^: A
  33.         if (!empty($port)) {
    ! j; U% @9 M( e, ^7 Z4 J
  34.           if (!empty($user) && !empty($password)) {" u+ B+ H3 r4 R$ B! v- l8 A
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ' y6 U% t. e% d
  36.           } else {. V4 L1 l! ~. A( `9 H0 l9 N" B
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    - F2 B2 v) g1 v
  38.           }
    ( }1 ]( }) [: J; i- V- I- w
  39.         } else {6 X: h' h7 ~6 }- `
  40.           $this->mo = new Mongo("mongodb://{$server}");4 M- k8 |4 _3 T4 P* a/ W
  41.         }
    * J1 x* i: ^9 c! k8 ]! {
  42.       } else {
    $ N$ x3 s* C, O9 `- r
  43.         $this->mo = new Mongo();# J- |) q! z* ^. x' I
  44.       }% F/ O% ~" k& O7 e1 p7 S4 c
  45.       return $this->mo;6 F# Y" s* b3 O' L5 A
  46.     }
    ! V  R) f7 _8 A3 W8 ~( {
  47.   }! H1 ~: [3 ?5 v1 F" h) G
  48.   /**# I' I5 l* i! ~; W
  49.    * 查询表中所有数据
    ! j) v% X0 q7 O
  50.    * @param $table/ C6 t3 |4 C/ c& G
  51.    * @param array $where1 L; }8 d( T) Q1 _
  52.    * @param array $sort
    6 Q. P0 M: j+ o" y# n
  53.    * @param string $limit6 L" ?; G7 F( a* j1 G/ M
  54.    * @param string $skip* i& [% B* b- C) q' B/ X2 P5 }
  55.    * @return array|int
    2 k" O" Q' H0 U
  56.    */
    ' Y+ J; h% H" u" a  y7 p6 f  i
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {0 P. u7 g0 X/ O( r0 n' T  }" M4 o$ K
  58.     if (!empty($where)) {
    7 c4 B7 F$ S5 l8 D% z# w1 x
  59.       $data = $this->database->$table->find($where);
    3 I: \* [5 x% c' t
  60.     } else {+ |. K, u: A- @: Y' K' E
  61.       $data = $this->database->$table->find();
    - N2 M* G- k) E; y; R/ f5 g; \
  62.     }
    8 w% A" q  ~! J% i( x7 G( d
  63.     if (!empty($sort)) {# \. ]/ Z8 Z% K; O
  64.       $data = $data->sort($sort);% L1 p: Y8 u" T( k5 s6 R
  65.     }( n4 p- }3 Q" ]  C
  66.     if (!empty($limit)) {. v# N: i, s  r+ B7 F+ g
  67.       $data = $data->limit($limit);
    7 c& w. J( J, I8 ~
  68.     }
    ) u' q2 Q1 `& c+ b# ^6 O
  69.     if (!empty($skip)) {
    : z6 V1 R* T3 w2 @% ~
  70.       $data = $data->skip($skip);3 i& D& Q2 K1 {3 _+ x
  71.     }% ^1 X: ~( G* M& q- n
  72.     $newData = array();
    ! K  ~# A1 |' d% M
  73.     while ($data->hasNext()) {3 l7 d" ^8 {; K  ~1 R9 `
  74.       $newData[] = $data->getNext();9 T9 B1 n' Y5 C4 a! E* t
  75.     }0 {1 r+ W/ {/ C
  76.     if (count($newData) == 0) {5 E. }3 s* z4 l4 {; Z. f3 Y. [6 A
  77.       return 0;
    ) ]  x# |& n, [4 _" Y$ e7 J! M
  78.     }
    8 G7 j9 E* M) X7 ^
  79.     return $newData;' s$ ?' V6 m" M3 i( P0 V" L2 t- n
  80.   }. N. x* W5 E0 [) K1 s! ~8 s7 c
  81.   /**
    - g$ s; x6 l/ T6 \$ ~$ E! D2 C
  82.    * 查询指定一条数据
    9 ^4 t8 A% L/ C: y
  83.    * @param $table4 n) h. [1 W1 [5 i" B/ C: j
  84.    * @param array $where& |6 D% f2 B. B* u# M  c
  85.    * @return int
    ' W' k/ ~0 Q. A. P7 P' m, e
  86.    */. J( m( N$ r+ l/ K  H
  87.   public function getOne($table, $where = array()) {" {* k3 {9 J  y6 A1 s1 M
  88.     if (!empty($where)) {
    9 @( a" [5 F% W2 _
  89.       $data = $this->database->$table->findOne($where);4 L- X( a" z) V% E6 P( y
  90.     } else {# ?( y' D$ L4 Y
  91.       $data = $this->database->$table->findOne();
    - N5 d( I; U" u5 q) Q
  92.     }
    0 I- W  S  M. c% O. c& \
  93.     return $data;3 p3 m, z/ Z# }8 r& b6 J4 |) ~
  94.   }
    6 ^4 M( r2 l% r$ T* K
  95.   /**+ E. s/ i2 v  s* @0 ~
  96.    * 统计个数* |; [( L* {+ q( q
  97.    * @param $table
    3 i, h/ N! L  D7 q0 o1 H* n3 d9 C& E. T" q
  98.    * @param array $where
    ; M  t, W" I- b/ Z/ J7 C5 _9 X
  99.    * @return mixed
    ; n& A8 R+ V! z+ f8 V  {/ O
  100.    */
    4 \! Z2 z  H) n$ S, G
  101.   public function getCount($table, $where = array()) {8 N" r' V* W' Y, ?3 k8 F
  102.     if (!empty($where)) {
    + S0 ?7 m# Y; v  [, w& ^- R
  103.       $data = $this->database->$table->find($where)->count();; K1 A& e( e; s/ ?" M3 r+ P
  104.     } else {
    & |* S4 G" S- N* x* |+ ^  n
  105.       $data = $this->database->$table->find()->count();( }; G/ }% T5 n5 f
  106.     }
    % h$ H6 r1 p' @7 `+ y
  107.     return $data;
    : x1 k5 e9 g1 c) x0 `2 y% C2 }
  108.   }
    ) z6 Z; Z: }+ p1 n+ m
  109.   /**1 E' F5 f4 J" x: S
  110.    * 直接执行mongo命令
    9 S7 X+ E# X; I! A5 R1 g6 y
  111.    * @param $sql3 H- v( c& s3 Q6 o) x7 E& c
  112.    * @return array- B$ p- a% Y, w- G+ s# X) c
  113.    */
    ' J8 f, I4 F* R( J& R0 E! c
  114.   public function toExcute($sql) {5 ~/ G7 i4 [+ B  L+ T2 f" x
  115.     $result = $this->database->execute($sql);
    5 n) n! k. e& m1 [/ c  \% d
  116.     return $result;
    " W1 g5 ~3 j4 ^( E
  117.   }$ G- ?; o% f+ e0 f5 Z6 Q) W
  118.   /**. W; [9 M7 ~, c% x0 o
  119.    * 分组统计个数
    ! z7 f& m4 M# d9 C& A4 O
  120.    * @param $table. R0 y% o3 a( i, q# k- P, g
  121.    * @param $where
    ' Y& p* x# `# @
  122.    * @param $field% h* Q+ |( }  d# `- m- I* {, r
  123.    *// q5 Y4 f' o* U  F* k/ z& X
  124.   public function groupCount($table, $where, $field) {
    4 i) t- Q# _) j
  125.     $cond = array(% o) I, ?) }9 v7 |$ p6 m
  126.       array(, |7 L' t; I* G$ p
  127.         '$match' => $where,
    ; B. Q% h8 v4 L/ r+ z) Q
  128.       ),
    0 \9 j; L+ Z/ |7 r1 u, d
  129.       array(
    ' G: K& F% s2 h& A3 e9 f
  130.         '$group' => array(* n$ j2 s7 p& P; w
  131.           '_id' => ': M5 J; R7 V7 T- z* ]# ?, C
  132. 6 P! I% k5 V3 \1 m- N
  133. . $field,
    , O  ^: Q  G5 d; Q! Y  N. o
  134.           'count' => array('$sum' => 1),
    ( A: L5 @6 B* }' o9 b0 R
  135.         ),0 M4 h5 A+ \6 t! g# f9 J: U1 A: U, a! @
  136.       ),6 Q8 L2 W) a9 E/ }4 Y- x5 k
  137.       array(5 j! ]# R" Z0 `) p/ E% }& r* A
  138.         '$sort' => array("count" => -1),6 m/ A. Y8 `' r9 U4 V" g
  139.       ),
    4 Z1 U6 d! f. }- K
  140.     );
    - d" c  F* C6 q! n" X' l
  141.     $this->database->$table->aggregate($cond);
    3 ~1 ~5 \9 q! u" ?# a
  142.   }
    , b) ]5 C5 E7 o
  143.   /**- T- X" O* q4 G1 O' c4 U4 S. R0 d+ N
  144.    * 删除数据
    2 w9 i* n7 n+ @7 s  ^
  145.    * @param $table
    ; }# k% y& F/ Y2 _" p! l' P& d
  146.    * @param $where% G- Q! K5 [% I+ a( {, x4 F* [
  147.    * @return array|bool
    : R' P6 w( O: D
  148.    */+ n4 N, y( I9 e
  149.   public function toDelete($table, $where) {
    & |  {6 g. ]) l" D' k3 S
  150.     $re = $this->database->$table->remove($where);
    / h& t5 T6 ?) Z0 o& j# E# s
  151.     return $re;
    : z& I+ w5 l0 s6 Q- S" l& j+ Z
  152.   }
    & w( i$ u; `5 H+ T' L) Q  A
  153.   /**8 S) F& }3 ?) Y- a
  154.    * 插入数据
    8 d9 M% T3 N3 B; ^# l
  155.    * @param $table
    4 p$ M: y+ I1 b- Z
  156.    * @param $data4 U8 ^7 V& @- Z9 q
  157.    * @return array|bool
    # ?6 _  f4 ^5 H4 y
  158.    */
    , |& c. z. M  N3 n$ i( w- M1 c
  159.   public function toInsert($table, $data) {
    3 Q# U" f9 G& s# U1 \
  160.     $re = $this->database->$table->insert($data);: a# y$ z' N* V! K0 @3 n* U
  161.     return $re;
    + A. t* c" P. m
  162.   }( o$ Q5 b7 {# |- g( ^& s
  163.   /**! A. C/ l' T8 ]0 Y1 g" n
  164.    * 更新数据  ]6 h# D( \6 F. M8 Z
  165.    * @param $table
    0 U! |1 T$ Y: b* S& ~4 g
  166.    * @param $where
    ; K: B; L* k( w9 w
  167.    * @param $data
    " T5 q) R" }* t3 K# b9 K3 Y# H) L. {
  168.    * @return bool* d+ l! w# D1 X) C& G
  169.    */
    % p; o: W; f4 B8 R0 }: L5 ~
  170.   public function toUpdate($table, $where, $data) {
    ; o3 ~# I# ^5 ]! M1 h$ ?8 o
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    5 [# j1 j  B5 b# n2 O0 d1 J2 i3 [
  172.     return $re;
    5 b+ u! Z0 ?1 q% a5 m- [
  173.   }/ R3 t: i4 v% H% G. a# }! t2 y
  174.   /**
    / d  P+ q0 h* B
  175.    * 获取唯一数据
    - n; b5 W! ]' N: Q/ X6 V
  176.    * @param $table( [! s) k/ E. B, h7 U& C4 c6 S5 A  f
  177.    * @param $key
    & b. r$ A+ L6 E# V
  178.    * @return array
    0 j) u% }7 E  X+ w
  179.    */6 g& f! N0 _4 y3 L5 w
  180.   public function distinctData($table, $key, $query = array()) {$ K* h% ?0 J, S0 A9 R
  181.     if (!empty($query)) {$ i1 D4 S" A. c/ l% Z
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);: @. @( Y% c2 U4 B5 }/ v7 r6 a) p
  183.     } else {
    1 s8 O) Z3 r) E" j7 \0 o% t
  184.       $where = array('distinct' => $table, 'key' => $key);1 ~" M: d# E8 h; G5 k+ [. p  ^% o
  185.     }
    * r3 S3 s% }1 R* Y/ ^1 w* k; w
  186.     $data = $this->database->command($where);
    ( z+ A  V5 u* H% r
  187.     return $data['values'];
    4 R; ]+ k; K* k5 p5 d4 _4 _
  188.   }
    " s6 S5 r) J1 [% a
  189. }
    ) y2 p$ o) u% l! M  o0 E) K5 n
  190. ?>
复制代码
, H& J  U: W! j  m, \% o
( Z) D+ g9 v4 I2 K9 @* Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:51 , Processed in 0.056459 second(s), 19 queries .

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