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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。7 W' c+ ~. j% _- T# _& u5 `
模式自由。; J# m4 [/ u$ Y5 Q) x
支持动态查询。
, U4 a6 u: Q- h9 j) C& P支持完全索引,包含内部对象。5 R8 q6 C) C0 s- g( a2 w
支持查询。
  \0 S; R! e* p支持复制和故障恢复。
1 ?  Z: t2 f: u+ ?  P使用高效的二进制数据存储,包括大型对象(如视频等)。- s* W0 C$ B# B
自动处理碎片,以支持云计算层次的扩展性' E: N# \, V  k% Z9 T+ w
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。3 I# ~" a% o0 L  Q3 E+ _% N1 n
文件存储格式为BSON(一种JSON的扩展)
; f8 b( M/ Q( A1 K: V可通过网络访问

所谓“面向集合”(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
      V; K* B& v2 g1 h9 F
  2. /**
    , q& l+ k0 H0 U  A6 H" E1 G5 u! Z7 e
  3. * PHP操作mongodb数据库操作类. K( \& l9 ?( n& C- Y' `
  4. *// k6 d" d% E. E1 r3 P9 D
  5. class Database {
    0 c2 n" n1 r: t- W( b
  6.   protected $database  = '';7 n, y. D8 L7 D) E* K
  7.   protected $mo;$ u6 j5 V7 l; H$ i
  8.   /**
    2 T$ |% D4 }0 y( ]. P$ C* y7 Q
  9.    * 构造方法7 k; i1 Y: \. ?4 S5 ~
  10.    */
    ' Z5 h" }% e+ O5 f
  11.   public function __construct() {$ y2 V1 G- u4 v2 C
  12.     $server = DBSERVER;, \7 V9 Q" f' l/ R# l" n
  13.     $user = DBUSER;
    + W- C$ p% A( V9 F
  14.     $password = DBPASS;$ N2 V4 E! Y5 R- |; K5 y+ |7 v
  15.     $port = DBPORT;5 e8 m) w6 u* V0 v/ k
  16.     $database = DBNAME;, H: j1 j/ |3 ^3 E- u' a$ h
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    9 O+ i6 r' n" t0 `/ o: u
  18.     $this->database = $mongo->$database;
    1 `+ V/ {2 Q+ d* u
  19.   }" Y% }- `& N) r7 d7 J' @0 Z
  20.   /**
    + `! V0 B6 ?# t0 O$ L. g
  21.    * 数据库单例方法
    + x  v) m8 {" ^
  22.    * @param $server
    : \7 [5 W% S9 S: Y2 ?4 |
  23.    * @param $user
    / N5 E, ^) y( S7 [- p  D8 a
  24.    * @param $password
    4 g: A( o% x& e; `
  25.    * @param $port* s9 H" p3 j5 F9 d2 @# h) N
  26.    * @return Mongo4 x0 h6 N/ Z( h! I' Z5 J* r4 I
  27.    */
    / m2 v: ?; V/ S& e5 f7 y1 q
  28.   public function getInstance($server, $user, $password, $port) {8 j4 I  d- ^. G7 s, ]4 X. I% V' Z
  29.     if (isset($this->mo)) {2 M- ^. E- }% n: W( F! l% E
  30.       return $this->mo;3 |' C5 J5 T  Q' [0 g) r
  31.     } else {
    7 c  f  |  G& T( ~1 M& Y# U3 S
  32.       if (!empty($server)) {
    & a5 E, a+ Z% Q% Q
  33.         if (!empty($port)) {- o: B' y& Z" [4 ]3 e) X
  34.           if (!empty($user) && !empty($password)) {$ ^/ S' C! e0 F4 {% {) L
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");' ?- Y4 c$ s  r* {6 q4 g) m
  36.           } else {$ @$ r$ Y$ N) r6 V/ M
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ; E3 D+ t# B+ p" n, B
  38.           }: l5 c6 ~' _( u" K# Z% A2 d
  39.         } else {
    % f; n6 d- d& N
  40.           $this->mo = new Mongo("mongodb://{$server}");& ]- R4 N9 f( C2 D0 M0 g
  41.         }+ x3 u6 q# y- h  I5 g3 e' b
  42.       } else {6 Y3 V/ p# Y1 {
  43.         $this->mo = new Mongo();2 T! @) }, f( m: t5 \
  44.       }
    1 Q" D1 Q; E3 E+ ~3 B
  45.       return $this->mo;
    , i$ Q- U/ e% ]
  46.     }! N: b' o# B5 `2 g" K4 S
  47.   }
    : Z+ P6 u1 Q- r2 K$ K0 v: l6 ]
  48.   /**
    0 E3 |; j4 K1 ?, Q$ Q
  49.    * 查询表中所有数据0 ^8 p4 r9 w" k. y8 }3 c' i1 w
  50.    * @param $table
    ( n3 f& \" Y/ k2 B
  51.    * @param array $where% B& h" {0 n# c1 z' g- u
  52.    * @param array $sort% \: P* Y1 X; d6 h; O  ]7 w
  53.    * @param string $limit5 x& Z% K$ E0 P7 Z
  54.    * @param string $skip' P) b2 l# }# ^9 J8 c6 ~) K  |
  55.    * @return array|int
    7 _+ A, f6 {3 N* p. h) Y1 q5 E( s
  56.    */
    $ K, O/ k+ s) ?" r! J. Q; V
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {7 h& Q# d4 Q% V0 |: o4 Q
  58.     if (!empty($where)) {! a4 [7 P9 w5 x. y! w* W
  59.       $data = $this->database->$table->find($where);( G! Z8 a" }( a$ J- ?
  60.     } else {& b. X6 R" e) I+ ~* R% M
  61.       $data = $this->database->$table->find();. V& h7 m& g& k; j
  62.     }8 F0 ?8 z5 R2 z. j
  63.     if (!empty($sort)) {- w' ?* |1 w9 x8 i& \, c
  64.       $data = $data->sort($sort);; q# w( r  K6 L
  65.     }
    9 g! X, }; x3 x$ ^  H7 N+ u
  66.     if (!empty($limit)) {
    # U* C2 C6 v: B: E% j. Q9 u+ z
  67.       $data = $data->limit($limit);# s+ c: q# f( |) y0 ]" _2 q
  68.     }
    / k+ k) ^  B2 h7 H! ^7 \9 y/ G
  69.     if (!empty($skip)) {' n9 l% N" y! o, B5 D
  70.       $data = $data->skip($skip);
    5 o- J9 @5 a9 Y9 h- h# n+ K
  71.     }  b  k/ k$ o: q% k: ?) E$ p
  72.     $newData = array();
    " ?0 ]5 C" T& p. Y( \8 e. I  Q
  73.     while ($data->hasNext()) {
    2 ~  b( x4 {& V8 R) ~  S" C, U( i
  74.       $newData[] = $data->getNext();2 I6 }3 T; \$ g/ ]
  75.     }
    / i7 H2 c* R5 f* Z! \
  76.     if (count($newData) == 0) {
    8 w7 Q3 j- t: Z& ~0 }* U; }
  77.       return 0;' v: f0 L; t7 _: E4 S
  78.     }' R/ ?0 u- N) t- `+ |
  79.     return $newData;  T/ M* l# [! D# N5 W3 O
  80.   }6 p% s: e; i9 m) W- U
  81.   /**5 S. F9 U" p1 u  i1 E
  82.    * 查询指定一条数据
    0 C+ @4 \% V+ X9 n
  83.    * @param $table
    + x3 c% w& b5 C& X4 R
  84.    * @param array $where
    + D" a7 _3 i( I; m4 {
  85.    * @return int; }) f( A, s' c: I. A8 y  o
  86.    */) O6 R4 g/ `% K* E( E
  87.   public function getOne($table, $where = array()) {0 i) Z8 i/ R' j1 B7 H# y" c
  88.     if (!empty($where)) {
    ) N9 i4 A; g6 a9 K7 ]6 i" @3 f! f
  89.       $data = $this->database->$table->findOne($where);
    ' K& I/ F' f' l* ^/ V( j
  90.     } else {
    3 H3 O" [/ {6 i% o; `$ l
  91.       $data = $this->database->$table->findOne();
    1 U; M% P/ G9 z# V0 Y
  92.     }
    ) _: L: F( q  u( Q& {& Q
  93.     return $data;
    7 {8 W0 H- z5 T4 W: Z( H
  94.   }( p  i. K  c4 v& F# P
  95.   /**! d0 J  Z: F4 x3 Q8 E# l
  96.    * 统计个数
    + @; [8 t, O( J2 G6 [; r4 J; v7 c
  97.    * @param $table/ W- e' |# \& G  J/ a
  98.    * @param array $where
    . j! F5 }6 k) i& z3 R4 T
  99.    * @return mixed0 d3 p& O( U0 ]/ Z# @9 C
  100.    */9 f" O1 q. D3 }6 X
  101.   public function getCount($table, $where = array()) {0 i, Y" E" H9 k6 J9 R
  102.     if (!empty($where)) {
    5 a- H0 g; w0 L
  103.       $data = $this->database->$table->find($where)->count();& p  T& ]: O+ M/ L! e/ I0 j6 i
  104.     } else {) P6 _& [5 V5 q- ^8 Z
  105.       $data = $this->database->$table->find()->count();7 U, d0 W6 c+ G- S0 {8 M5 f
  106.     }
    * @4 J3 P$ [/ ?3 J9 K
  107.     return $data;  m) P  Z9 G5 L1 u6 @
  108.   }5 L4 B' \% Q  s1 H& E. L$ Q/ C
  109.   /**- z" {# d, B% s1 O
  110.    * 直接执行mongo命令' }' L6 S; k' F% V% X8 Z+ }( R0 Z2 ~( S3 e
  111.    * @param $sql
    # C( ?" j0 Q/ e
  112.    * @return array
    ' J- u. `+ W; {5 T4 t
  113.    */
    : f2 u2 t$ v8 ?% m
  114.   public function toExcute($sql) {/ {/ J7 w% Z6 z# Q! ?' c
  115.     $result = $this->database->execute($sql);
    0 s7 s; f  K8 @9 z1 `% i/ k0 v
  116.     return $result;4 P, Y1 @/ [2 O  D: K
  117.   }( N, }" Z( H* W: c% @* r- Q  H
  118.   /**! v+ S" l9 t% P) `
  119.    * 分组统计个数
    / g; l* m" |  s6 q3 y
  120.    * @param $table
    5 p/ N3 N* r* K0 @
  121.    * @param $where
    4 O$ h1 K2 }: P, n2 F/ o
  122.    * @param $field
    : H8 O6 Z4 G! Q' F& V: @6 A+ Y
  123.    */9 N8 f# ^; J7 v: w. ]& W( G( F# ?! Z
  124.   public function groupCount($table, $where, $field) {6 V5 h/ h. T+ e% D; x- Z# `( X
  125.     $cond = array(5 t8 n) f  v6 ^
  126.       array(+ L2 d- J& d1 t' z" }" d
  127.         '$match' => $where,
    * e- {9 U7 O" a# E: v! N
  128.       ),4 \" |4 K% ~) Q) _/ b0 s7 K5 |
  129.       array(8 @' w( V! a3 ?+ m
  130.         '$group' => array(
    3 C9 q" T$ M7 y, c1 p- M
  131.           '_id' => '7 |8 [. w% P9 \, V! u0 c

  132. 4 G0 @0 T! v; b
  133. . $field,  ~/ R9 @/ y1 U% }. \
  134.           'count' => array('$sum' => 1),
    7 t& h! F' r( S" g6 t5 ~
  135.         ),
    ' J# m/ Z' f( d1 e, y! f
  136.       ),
    . t7 `  l( p" o: a# s
  137.       array(! L7 T( [3 L5 y
  138.         '$sort' => array("count" => -1),
    3 I% I1 I7 X# t1 p1 x3 D: }. ]
  139.       ),& w: m3 f2 `: ]  Z0 _/ J
  140.     );8 e! j: m5 H, R  `" }4 ]* p- A  t
  141.     $this->database->$table->aggregate($cond);% R' ^; k* _3 M- A; w* u: v! y
  142.   }
    * `: V( n2 f1 H" {
  143.   /**6 }# I. ^3 S' q$ x9 }! ^" T
  144.    * 删除数据
    ' e3 n- U" N" p' J* T7 |: H/ @
  145.    * @param $table
    " n3 Z0 X. ^# F$ E/ D
  146.    * @param $where
    ; T$ C( a- m, I
  147.    * @return array|bool
    : ]  h# i' L5 z, X2 D6 k! D
  148.    */5 P/ y9 G  ?9 o0 H7 _9 c
  149.   public function toDelete($table, $where) {
      y% _2 u( J3 {* N% ~
  150.     $re = $this->database->$table->remove($where);
    8 v0 O9 g9 l0 Z! U, l9 L" p
  151.     return $re;. S8 Y+ w& q- u8 t
  152.   }- L& k# ~# }9 [' y
  153.   /**! d' O7 N7 j% H$ m8 s3 F8 T# W
  154.    * 插入数据
    - |' ^% X, b! |+ T8 ^
  155.    * @param $table
    # G1 E; |% q0 ~; R( O' g
  156.    * @param $data" z0 a. x/ A! z4 X1 {; M' a
  157.    * @return array|bool& O' a6 z1 z/ s8 k) m
  158.    */
    ) {5 }5 X0 t' w9 ?6 ]& X. z! p" x
  159.   public function toInsert($table, $data) {
    9 t$ b$ S/ w' x& ]4 O# ]- `$ W
  160.     $re = $this->database->$table->insert($data);( A8 n; ^2 B) W* Y6 O6 S0 `' W; J
  161.     return $re;
    ) R) m& Z' [" @0 X1 N. Q# P) ]' z6 w
  162.   }
    4 x9 f* M5 m, P6 |# L' I: q
  163.   /**
    5 q" z  T- L" T  `/ I9 @6 B
  164.    * 更新数据4 w2 B/ v5 J5 k4 t
  165.    * @param $table$ I" [" f9 M( ~& ?  i" d7 m
  166.    * @param $where0 U; _" e" \5 v& m) s2 h' l2 d3 Z
  167.    * @param $data
    / v/ w/ E7 N+ z( @  |: [5 `( t
  168.    * @return bool0 {  b* m4 ?0 m% m0 c7 o
  169.    */
    ( o$ m: u) P+ |8 y" ~
  170.   public function toUpdate($table, $where, $data) {
    6 N! B& \1 L3 n* J6 O2 e
  171.     $re = $this->database->$table->update($where, array('$set' => $data));5 p" O* d9 E6 w9 j8 x( p; f
  172.     return $re;/ \/ D) e9 w2 [' }& U: R4 q
  173.   }
    2 K, b9 C( O3 D  M  v+ g9 k' [
  174.   /**( y) D0 i; _  D" I8 Y( C& [
  175.    * 获取唯一数据2 U+ j8 T: t5 F
  176.    * @param $table" m' w! X7 z0 B' ?
  177.    * @param $key! I4 Q, e) z4 ^7 ^
  178.    * @return array# E" j: g) \- t7 @7 C2 e
  179.    */# O  g+ Y3 k6 Q& z% c" g
  180.   public function distinctData($table, $key, $query = array()) {
    2 K# `; V2 r/ X0 g
  181.     if (!empty($query)) {
    8 E5 K, k2 P3 C5 N) y
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    2 R! E/ U$ L: H3 \& D* C' Z
  183.     } else {
    5 f8 x9 w2 a0 a2 h& {* U. R
  184.       $where = array('distinct' => $table, 'key' => $key);
    % N/ ?! Z3 x' O) }
  185.     }# F" F9 L" K0 o) X; }8 ~
  186.     $data = $this->database->command($where);! M  c3 j* n+ C; E$ e0 {' `  W) |3 w
  187.     return $data['values'];& X5 e% S& H! g" V( |7 }
  188.   }9 N# G& o- b( Z, |
  189. }4 G0 J1 I8 p  E6 S. M: j" ]/ [; C; g
  190. ?>
复制代码
2 W% J; s# m" I

  q! @! ^/ I9 o& [/ c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 22:38 , Processed in 0.114230 second(s), 21 queries .

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