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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
! @2 n. L  b! |模式自由。- }4 j5 j. i6 E# H- r, P
支持动态查询。
3 i/ Y( F, ~% @& e- y支持完全索引,包含内部对象。+ p5 Z3 s- f* W
支持查询。' A7 X8 {8 r1 X6 z
支持复制和故障恢复。
' c& G) O- ~0 K; ?9 p7 d使用高效的二进制数据存储,包括大型对象(如视频等)。& ^; b; X8 J: t9 F! s( @0 B  `
自动处理碎片,以支持云计算层次的扩展性
, Y1 a2 s6 P5 t) R0 v支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。, v# R( A3 }" R, |: k9 m3 {/ T# f
文件存储格式为BSON(一种JSON的扩展)
+ e% k/ j% }, r$ e% ^# p( z可通过网络访问

所谓“面向集合”(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 I2 K) x2 k0 ?8 ~9 k
  2. /**
    . d, P0 u; S: @! t$ B7 y' N
  3. * PHP操作mongodb数据库操作类- ?4 @( Y9 s  q2 Z7 e
  4. */; s+ D  `6 I7 D
  5. class Database {. L) k  S  T. R8 Y3 S
  6.   protected $database  = '';+ e, m( ^4 j4 f) Z7 ?. A0 I8 n+ d
  7.   protected $mo;
    9 W& B5 q  [. G+ m
  8.   /**
    # a  e( c- N- L
  9.    * 构造方法
    * }! Y0 D: k6 t! h" L3 ^
  10.    */
    2 ~" C* `+ k/ G4 {# o  P) k
  11.   public function __construct() {
    ! G0 i; E2 C- d$ D( E. ]; Q
  12.     $server = DBSERVER;1 B1 C* j0 ?! _$ {
  13.     $user = DBUSER;, y: z) r8 @+ ?" P: r* d( q
  14.     $password = DBPASS;8 p* ?/ M* K) J2 Q- Q8 x
  15.     $port = DBPORT;+ ]* {8 J$ ]! W. x4 b( t  ?
  16.     $database = DBNAME;0 W9 }" D& Y& D2 n; O
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    & y. Z: m: ?6 Q1 C
  18.     $this->database = $mongo->$database;
    / n9 y* N0 a- {. Q3 x6 y# X' y
  19.   }9 A# X, S8 J$ H9 h3 k
  20.   /**2 l% ^' W" z% z# B2 l0 U
  21.    * 数据库单例方法, U9 J7 L# h+ b3 M& `5 D) N
  22.    * @param $server1 w' m5 J6 I7 q6 s+ P, ~9 t& O
  23.    * @param $user' R' P6 {1 s1 h* b
  24.    * @param $password
    . C8 T7 C/ ]5 y
  25.    * @param $port5 C+ P; G: J$ ~
  26.    * @return Mongo
    ) s8 E7 ?  w9 W/ J! Y) @( d0 m# F, t
  27.    */: Q8 T7 a7 `* Y* J& w! s
  28.   public function getInstance($server, $user, $password, $port) {  W# c' r/ E. u0 S
  29.     if (isset($this->mo)) {
    ) {# D; V0 U) |! h
  30.       return $this->mo;
    4 K- a' D8 r' v9 \, f' A7 e
  31.     } else {& @. R2 u" {, S3 u- O8 Y+ Z
  32.       if (!empty($server)) {
    ' ?5 i9 X9 E3 ]" l$ c2 o6 {+ V
  33.         if (!empty($port)) {
    , U7 a$ Y. O0 p0 T" {$ O1 E
  34.           if (!empty($user) && !empty($password)) {) q/ m3 P, `' n5 C* n6 v
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");1 e9 f: m0 T/ T) ?! d
  36.           } else {6 G, D7 c: u1 Y! l  ~8 \  C
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ! x7 P( O; Q# J, n, ~' S
  38.           }! }7 J9 [& [2 N% Z0 f% Z( P3 }
  39.         } else {5 t% A# u: t0 u( X1 }' I2 ?
  40.           $this->mo = new Mongo("mongodb://{$server}");
    & O; {3 k+ O7 j  Q8 G2 q7 s! l
  41.         }/ v. n# u8 Z! S8 ^( I  m
  42.       } else {, w% J3 r% F- W8 C0 j
  43.         $this->mo = new Mongo();
    0 A  r1 v- u, Z( Z; i$ q2 u! y7 E
  44.       }! j! }8 T' ~* U* }4 P7 N& m
  45.       return $this->mo;
    - ?# n; B6 i# A6 E- ]. |8 C
  46.     }
    - k- e) a/ x8 u, _+ b# R( D, K
  47.   }
    ) i6 q' i5 I+ N! d
  48.   /**
    / |. K6 Y; r- J$ r! T
  49.    * 查询表中所有数据8 W; i  t7 T6 q& M4 a
  50.    * @param $table- f% e: P9 }5 z7 ~
  51.    * @param array $where
    1 O( f5 T* C/ N6 P, }# q+ ~
  52.    * @param array $sort' r- Z3 {" Q0 p' \+ w1 |! d
  53.    * @param string $limit
    3 ?; N+ w) j4 e$ w, l* p9 x
  54.    * @param string $skip6 ?. J1 e  P- j  z
  55.    * @return array|int* s, m9 p& d$ B: [
  56.    */8 i. h* S0 ]( @- B- j- o8 b
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {; H  l% h9 c1 g
  58.     if (!empty($where)) {
    / o4 m* A1 R' N3 Y2 w6 t
  59.       $data = $this->database->$table->find($where);
    . T: ]1 N8 }- d; [3 M
  60.     } else {& P7 |/ z2 O: i/ N' V  @$ {; g
  61.       $data = $this->database->$table->find();
    - ?3 h2 n  I. M7 x* H- `8 ?4 N
  62.     }2 }& k- c" g2 t8 J1 r+ w
  63.     if (!empty($sort)) {
    / ^/ G% F: l1 g9 e4 O  h& _2 V! D
  64.       $data = $data->sort($sort);9 @6 C3 _# X  W4 v
  65.     }" a4 A4 V. k! v) D
  66.     if (!empty($limit)) {
    & k; t5 X) a# F0 T( G$ j5 H8 B! P
  67.       $data = $data->limit($limit);) ^8 y/ X: E+ ?1 P7 D3 e
  68.     }9 }4 r; Q2 {9 x/ Q
  69.     if (!empty($skip)) {* L  F9 w6 \2 M& G( D
  70.       $data = $data->skip($skip);7 U- B( m) A+ G+ p' \! A( H
  71.     }: |( \, S  w0 P1 u% m$ _9 D6 e) h
  72.     $newData = array();
    # d# w1 q. I, \0 |, [
  73.     while ($data->hasNext()) {. H5 e8 e/ {+ i% w9 C& l
  74.       $newData[] = $data->getNext();
    % f- b9 l. e1 _- K
  75.     }- L% L% P# g" X+ n$ @. C6 }0 F8 c
  76.     if (count($newData) == 0) {
    9 O) p2 }' t- O" A0 _* ]) D
  77.       return 0;
    + I0 i' r7 {: ~3 y! k
  78.     }
    + ]2 f4 t" W: D- k$ W
  79.     return $newData;
    : i' [# a! h0 B7 D
  80.   }
    # X5 P8 }8 E: n& Z7 Y! p0 A
  81.   /**/ M" E7 t+ L6 l' k1 F& S& D
  82.    * 查询指定一条数据, m% K! B& c! `1 ?
  83.    * @param $table3 I& |* Z4 U8 N0 S
  84.    * @param array $where/ N0 x2 n8 \; U4 R! y
  85.    * @return int
    & u0 |$ M9 M6 y: N% A( [1 o
  86.    */. r" Q  q% X" |" Y/ J
  87.   public function getOne($table, $where = array()) {
    / x6 h: M& H, U( L
  88.     if (!empty($where)) {
    3 i2 t2 O) v% }3 h+ _
  89.       $data = $this->database->$table->findOne($where);) O- y0 X' p4 X; R1 f% u
  90.     } else {! h: N8 i' a) d% {! y4 i
  91.       $data = $this->database->$table->findOne();
    & `# `8 |) b, x
  92.     }0 W4 P9 T* R& {. g) q3 }: M% `2 {3 o7 G
  93.     return $data;4 g7 O; r% ?" e* y4 v9 K1 j1 R
  94.   }5 D1 a3 S8 y4 v; A3 [
  95.   /**
    / A) c! D) S. Z
  96.    * 统计个数2 N  @+ G% ]8 L6 ?' `9 f7 K
  97.    * @param $table) p& S: u7 U$ u1 N
  98.    * @param array $where
    + x# j+ q2 I! c( w" O8 v
  99.    * @return mixed8 S) v3 ~% [  R2 M1 N
  100.    */3 [8 ^: h2 ^6 N7 y9 }2 X3 [
  101.   public function getCount($table, $where = array()) {6 _* G. h0 v- O' C( J7 @9 I
  102.     if (!empty($where)) {, n6 @/ M1 _, i( ]9 p% D( |) v  V
  103.       $data = $this->database->$table->find($where)->count();
    - }1 y0 }8 K. C0 E
  104.     } else {1 s$ ?2 V: H/ s1 j1 e2 ]
  105.       $data = $this->database->$table->find()->count();# Z9 D7 t( y9 ^8 g8 K8 f
  106.     }) m" e8 B; ?7 t- i3 x9 t* H
  107.     return $data;
    0 A& m2 Q3 O- L! S& ?
  108.   }
    3 k. X2 W' v) Y. M- _0 P' S
  109.   /**$ }! w, I; k' j! {. L
  110.    * 直接执行mongo命令
    ' b0 h$ g, v+ @3 J+ G
  111.    * @param $sql1 p( s9 g9 ~$ E+ @1 O( Q! P
  112.    * @return array/ p, x  Q3 q8 P* C
  113.    */  G  w- v. v! s+ t/ b8 u
  114.   public function toExcute($sql) {- F, ?' u7 O3 ~7 b( @  W9 Z
  115.     $result = $this->database->execute($sql);9 [+ d5 @. O! e# K) a
  116.     return $result;& X7 ~2 h. i- ~
  117.   }
    / Y* o! x6 u8 F6 r
  118.   /**9 J7 s9 D& J4 J! _
  119.    * 分组统计个数2 j( j  V1 N2 N5 K
  120.    * @param $table- O) `" D) G+ A! x* P
  121.    * @param $where
    4 f* |$ `+ y" w' x% Y) Z
  122.    * @param $field
    8 r3 G( R, G) Q+ r0 k
  123.    */+ c" I" C* [! \7 C8 ^8 J
  124.   public function groupCount($table, $where, $field) {( n" ^: s4 }# I0 F& b# F9 b+ n; R
  125.     $cond = array() s% u$ D- M5 ]3 \
  126.       array(" O9 u! l% H* C7 I5 n5 o& r
  127.         '$match' => $where,* M  K; c. c. |4 e+ o9 W
  128.       ),
    0 b. j5 d% K# |1 y
  129.       array(! @/ {" B9 i' d# o  A) ]" }/ H! g' n
  130.         '$group' => array(- }( K  [7 ?+ t& i3 {
  131.           '_id' => '5 H0 l* q/ z) I! ~1 e+ j& B

  132. : X' D, j# A# N5 |8 d- d, ^5 M7 O& f
  133. . $field,2 P3 f" q, ?* d9 ]9 U+ S- R" F/ i8 q
  134.           'count' => array('$sum' => 1),
      u9 w5 E5 a$ n% z5 E$ g1 X/ F
  135.         ),
    6 D9 I8 b# C7 h  T; X, x; U
  136.       ),  g9 D5 e/ y1 l9 a' H
  137.       array(1 o1 G. a& C) ^6 `# @. G  ~* O8 ?4 I
  138.         '$sort' => array("count" => -1),
    : a2 t7 t, @1 Z# [" r( a
  139.       ),
    ) |' r& ?3 ?( D$ i
  140.     );. P2 g6 G. Z* X6 f8 `
  141.     $this->database->$table->aggregate($cond);
      ]& L9 G2 g2 L2 p+ j) r
  142.   }7 X4 f8 ~- a& U/ K+ x4 p
  143.   /**
    & g( e: x* I2 y$ a( x! a$ m
  144.    * 删除数据
    # t, Q' v$ [2 r7 K/ b: D5 d6 d
  145.    * @param $table
    2 L7 K' Z! L- ~$ f4 ^3 K
  146.    * @param $where* i& {0 a- s( T" I
  147.    * @return array|bool: q( d- @( C9 o# G( ?
  148.    */' N" y! @# E9 J% U
  149.   public function toDelete($table, $where) {: f2 H) }1 U2 H& `$ z; }# L2 @
  150.     $re = $this->database->$table->remove($where);9 }: t& R4 B% m) R
  151.     return $re;0 g1 {' ?( U: V
  152.   }
    2 r/ C& V6 t: T0 @& u
  153.   /**
    ! a9 L; z5 w7 r% X' L7 X9 p
  154.    * 插入数据
    . n; v2 p# p( r8 c% g, S) Q* n
  155.    * @param $table$ a* a! q. v/ _/ N6 W3 M, S7 t
  156.    * @param $data, e/ t3 Q" O/ m
  157.    * @return array|bool
    4 R+ X: k2 }6 D7 k9 V
  158.    */, R& z' B, h" D6 R$ ]6 N1 v
  159.   public function toInsert($table, $data) {
    ( g0 ~) \. E- s* X% [( D7 C8 U0 L
  160.     $re = $this->database->$table->insert($data);' B/ }. w% I. X) l4 O
  161.     return $re;
    0 I$ S6 R; x4 q. M. e4 f' k  w/ I
  162.   }
      n1 G4 g' J6 s' I7 S
  163.   /**
    2 j3 [; `& U$ F7 z' P: s
  164.    * 更新数据
    1 x7 f' b1 C0 J+ [! A
  165.    * @param $table
    4 f# i$ `! T; x5 t
  166.    * @param $where& h' E0 _- B2 v6 b) F; B$ b  `, P' e
  167.    * @param $data0 F" M: L1 ^" g# {' h6 e! b3 B/ q
  168.    * @return bool' n: f' q8 A- j- ~- z* V
  169.    */8 R+ \9 d8 j; M/ b5 B; K7 j8 l0 L3 d
  170.   public function toUpdate($table, $where, $data) {8 \# ^" L+ U1 d
  171.     $re = $this->database->$table->update($where, array('$set' => $data));# ^: k! u- J2 C- @1 V
  172.     return $re;
    ! _, j  g; @# N% I7 \
  173.   }
    ; |) ]4 n8 ~' d" y2 i
  174.   /**
    8 _/ U9 P8 r: B. e
  175.    * 获取唯一数据/ y! M  c& u( |5 s% s  q, p0 r
  176.    * @param $table+ o$ ^9 p( G8 M+ Q  M# E$ F
  177.    * @param $key1 m7 b  m+ R+ X* w% Y. v
  178.    * @return array  [( L; {+ {5 _: b& {! a! {3 p
  179.    */
    * J' O$ P4 [( I
  180.   public function distinctData($table, $key, $query = array()) {
    : ^( n& T- l$ \8 [+ H
  181.     if (!empty($query)) {
    9 ?7 p4 h; C+ n8 n- d$ H. y% h
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    / W! v7 w5 @2 c- f9 y: l# V( z1 i2 X
  183.     } else {
    3 J( s+ c4 {1 K3 K* X2 W$ r' ]. X
  184.       $where = array('distinct' => $table, 'key' => $key);
    4 p$ ?) X# _$ t  e
  185.     }
    - M# ]# M" M" e) V
  186.     $data = $this->database->command($where);
    , A" R# ^6 T2 J  b7 H& {
  187.     return $data['values'];
    3 h2 i( J/ Q3 Z4 E, w4 s/ V
  188.   }( p. W8 W! j4 f
  189. }* n5 M# h. \& x
  190. ?>
复制代码

8 g: T/ ?8 d& W% H. A! g# Z
" q4 c8 l# g" u( r4 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:04 , Processed in 0.156984 second(s), 19 queries .

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