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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
4 L5 j( {1 v& a6 q$ h模式自由。) q( a3 E  o: W
支持动态查询。+ L/ {9 O6 w1 k/ C' A: p, C6 @  z
支持完全索引,包含内部对象。6 ]3 T) H# X- M
支持查询。
. o! D5 x& x1 T- ]支持复制和故障恢复。, j% G$ I+ c6 m* y3 w5 f
使用高效的二进制数据存储,包括大型对象(如视频等)。9 ~  ?' ]& x) e& H8 v, A( W! X
自动处理碎片,以支持云计算层次的扩展性$ Y4 f, W  N" y' V$ t0 g9 s2 F
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。4 @7 L( @+ w# \  h
文件存储格式为BSON(一种JSON的扩展); O; Q" @! z9 C3 s% 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
    3 Q2 S/ h& d+ l5 ~# G
  2. /**1 Z5 E8 Y2 W' V9 j9 [) ]
  3. * PHP操作mongodb数据库操作类
    $ O- ?3 h0 ^3 p( L2 G9 u" x$ D
  4. */) v' d% s- B% r( q
  5. class Database {, Y: C! o9 F/ A7 p0 R& R
  6.   protected $database  = '';
    & N; R% b) Z/ O9 L) V9 p
  7.   protected $mo;9 \2 d% B' R2 n5 }7 m
  8.   /**, M, h# e- X  `) J9 j% d
  9.    * 构造方法
    9 Y, g; ~$ Y# P9 e# w2 B$ K  ?- R
  10.    */
    0 e- M5 y  |9 J+ y
  11.   public function __construct() {3 t5 C9 s+ [' R0 [. ^6 X2 R
  12.     $server = DBSERVER;
    % h% v2 g" @6 d- s8 H+ P: }1 H  A
  13.     $user = DBUSER;" E' Y* d7 W9 C; z
  14.     $password = DBPASS;+ l' c. v) H. C3 K0 H
  15.     $port = DBPORT;: ~4 b8 F' U' Q
  16.     $database = DBNAME;5 d' ^: B3 X- ^$ F  f' ]
  17.     $mongo = $this->getInstance($server, $user, $password, $port);, r" p/ F, T" F, y! @. C
  18.     $this->database = $mongo->$database;/ t; c5 K/ G; q1 d3 z" K2 P" k: \
  19.   }
    : ~. J' _9 k& n( W$ x$ Q
  20.   /**
    / M7 e8 {% }8 X, c  {/ x
  21.    * 数据库单例方法
    " R% F( h! n/ ^
  22.    * @param $server! n1 D. h& @9 \; s  o) {0 _
  23.    * @param $user" H; K8 X. Z, _' j( b
  24.    * @param $password/ R/ p! K. y: t9 p
  25.    * @param $port
    & ~& m6 _" P, c5 n+ j6 x- ^$ ^
  26.    * @return Mongo
    ; ^# W  W& B/ B) U
  27.    *// h3 h  [3 n4 r  j/ C  i; X9 I
  28.   public function getInstance($server, $user, $password, $port) {: e) j8 s+ K6 _6 \3 U$ Q
  29.     if (isset($this->mo)) {
    & u4 V7 R2 s  N
  30.       return $this->mo;/ [1 z/ G2 c% C5 r( S% N0 {
  31.     } else {+ @) u1 ~6 P9 y9 E
  32.       if (!empty($server)) {$ n' }8 B! F; ~- `9 {3 L
  33.         if (!empty($port)) {, c8 f9 @; w" k6 M8 o; ^0 `3 D
  34.           if (!empty($user) && !empty($password)) {
    & @, q4 `: u& d7 f1 ?
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    1 E. ]5 L( M$ j0 \
  36.           } else {
    4 A# @/ C$ U1 e" z
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    $ k0 c5 K8 m$ w+ O) P4 L5 L8 W
  38.           }  ?4 t/ C- z" s' x# s. `) J
  39.         } else {
    3 s' Q- n$ x& R/ _
  40.           $this->mo = new Mongo("mongodb://{$server}");
    # i5 J5 U6 \; q
  41.         }
    / {; v' N2 ?- m' v1 D% S
  42.       } else {0 Q! T5 D# t( X2 l  A
  43.         $this->mo = new Mongo();* e6 ?8 T9 j9 \
  44.       }
    5 n; [( e- g7 h  U, c- `" N( x
  45.       return $this->mo;  Z) B5 F9 }8 U4 U2 {7 Q
  46.     }* ^7 ^" e( D1 v+ Q( `
  47.   }
    - m4 W  |- s$ d$ N/ y1 I
  48.   /**3 l, r  r. l8 n/ v# D  H% y
  49.    * 查询表中所有数据
    ' t; |0 Y" C0 l+ b0 W" C$ m6 i0 s. u0 h
  50.    * @param $table
    , ~0 e& E! U; q) d
  51.    * @param array $where
    * ?! p5 c, i* k* j
  52.    * @param array $sort8 O3 C3 O- N  ]; e
  53.    * @param string $limit3 m& ~  }% d8 F5 Q5 {; B, X# ^
  54.    * @param string $skip
    2 N+ E, P/ D3 e# F; L2 i* }- i
  55.    * @return array|int" z% h% A" a4 B
  56.    */& m8 k+ F3 C. U* l- x
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
      q  T/ Q1 b1 t
  58.     if (!empty($where)) {; \% K+ b$ t0 L
  59.       $data = $this->database->$table->find($where);/ w* K: s4 o' `8 z4 A9 m: Q. ~9 D
  60.     } else {
    ( R4 @& t; C/ h# V/ g1 {
  61.       $data = $this->database->$table->find();
    " B* H) O- d  j9 D) I2 Y! `
  62.     }
    3 F7 b' ]# a" o# ?9 Z8 ?3 _
  63.     if (!empty($sort)) {9 e0 @  m# e% s% w
  64.       $data = $data->sort($sort);) c% O6 a( B/ O
  65.     }
    / x8 ~- c6 f8 C$ F
  66.     if (!empty($limit)) {
    # c, e0 h4 y. g4 r  j; ^8 |
  67.       $data = $data->limit($limit);, D( @9 |- Z! T( _. F* M
  68.     }
      g4 J/ w& m1 D( F6 x9 A0 `% @
  69.     if (!empty($skip)) {: ~# f. V* k  S( f
  70.       $data = $data->skip($skip);! i6 }: F: v- ?- ~6 B4 o3 B1 T
  71.     }, L, H0 p+ F) p  |7 H6 G' T
  72.     $newData = array();
    0 m& O% d* V- P4 B" m1 N" J  x
  73.     while ($data->hasNext()) {
    - B( Q5 j( i& @7 l. ?( ^& y
  74.       $newData[] = $data->getNext();
    ; B# x( r: W. L, ^, ^) T9 T
  75.     }
    ! ?8 C% o; K: N" b7 c
  76.     if (count($newData) == 0) {  Z* x5 n# Q3 i1 L2 z: @
  77.       return 0;' M4 h$ d7 {: o
  78.     }0 C& p3 M" n& ?3 H
  79.     return $newData;1 r# v3 e' |  m
  80.   }6 p1 ?6 `; L& G: O5 f0 m8 C9 X" p
  81.   /**0 F; W# ~$ A$ a# Z0 t1 f& y- u
  82.    * 查询指定一条数据2 T# @4 a8 K. a7 B# }
  83.    * @param $table0 c: b1 n4 w7 S- K+ |6 c9 p
  84.    * @param array $where9 I  k, @4 ^5 [# P4 X6 I3 c
  85.    * @return int& v1 l- h; b* O, n. i6 G3 y4 e& x
  86.    */. e1 s+ y; ^2 _0 {5 f; n# Z! ]1 _
  87.   public function getOne($table, $where = array()) {5 N7 f" Y# ~; |6 T% P1 }4 o
  88.     if (!empty($where)) {. M9 c8 A* u: v* P9 x) e, z' ?
  89.       $data = $this->database->$table->findOne($where);
    ) }- q( N" Q. V' B
  90.     } else {8 X3 s" U' Y' y& o
  91.       $data = $this->database->$table->findOne();
    " y6 f# C. e) r9 w
  92.     }
    ( e% ^, F0 {0 M2 I
  93.     return $data;+ H. e' ^7 l. [4 k
  94.   }
    3 F7 d3 t1 G6 O8 A5 w
  95.   /**- z/ R- v/ k' T: ?' ^
  96.    * 统计个数
    ) v* c$ S+ X  T  z/ F
  97.    * @param $table* L* y% R4 L  `5 C# w
  98.    * @param array $where0 h) b1 H6 ]$ e' i# C
  99.    * @return mixed; K0 y" v: M+ ^( e! X2 J
  100.    */
    ! A: T/ w8 _, S4 q1 [4 n
  101.   public function getCount($table, $where = array()) {+ j$ c6 D# _0 T/ B8 E. T6 o) y
  102.     if (!empty($where)) {/ ~9 ]+ {& A# [: X$ W) ^; U" Q. o0 H
  103.       $data = $this->database->$table->find($where)->count();
    6 |- W/ E0 w; j, a/ [
  104.     } else {, d, h0 s$ @5 Z  X9 x4 l, c
  105.       $data = $this->database->$table->find()->count();
    5 g3 o* q  \& X( q# Z( R; [
  106.     }
    : \; e' d: E0 T' Q7 v
  107.     return $data;, p9 K, O7 u" i+ I- z
  108.   }) R4 m9 ?2 F- ^/ ]6 g. [
  109.   /**
    ' t: b' H( Y2 _( ~/ f/ D* E
  110.    * 直接执行mongo命令4 ~! o* l0 b* i* u+ N+ g
  111.    * @param $sql8 w/ v! u5 r5 L: A; p
  112.    * @return array, h( |. q) d2 H6 R- w6 s
  113.    */; v3 S/ b1 f, X7 w* S) {
  114.   public function toExcute($sql) {+ ~) N6 V3 k1 q& C* j+ a! k9 Q
  115.     $result = $this->database->execute($sql);8 c: p8 S; F5 A4 w) H& ~
  116.     return $result;
    ! I$ e6 e# O4 c
  117.   }& Q  i' I+ Q$ Z+ H& g, r! C: a
  118.   /**2 n' o' I. @0 ]4 B
  119.    * 分组统计个数9 b% ?: }9 B. A; v
  120.    * @param $table, L% W! J2 i9 S4 a1 k
  121.    * @param $where) e" f. S) z3 v( k1 l& f
  122.    * @param $field1 E& ?, L+ ~+ h/ N0 Q2 i
  123.    */6 p6 R' ]: ^4 K, e
  124.   public function groupCount($table, $where, $field) {
    * a& ~, w8 A/ n8 g7 r# `; |
  125.     $cond = array(
    ; ^* `6 T7 @/ B8 h$ \3 i) G/ ]6 P
  126.       array(8 I9 e/ h$ E8 _- z( W
  127.         '$match' => $where,3 Q& ]9 A0 i# x5 @. M+ Z8 N# p) m; k
  128.       ),
    3 o" K& J8 A3 P
  129.       array(  c; W+ {0 }1 H. Q( @5 ]9 y1 @
  130.         '$group' => array($ n' U! r- g) a: U0 \9 P6 |% E
  131.           '_id' => '
    " x+ [2 h3 R: h  C) f! |; y

  132. 1 i4 U' E! H8 x6 g1 e6 K7 g, h6 \# e
  133. . $field,/ y0 m/ m- \3 y6 L% i
  134.           'count' => array('$sum' => 1),9 }' p2 X- f* y
  135.         ),
    + H. F- }8 n+ @/ ]' `8 k
  136.       ),
    4 d5 s0 z8 ]0 {" p  Y
  137.       array(
    7 }; V& ]& i9 P& K6 S# o
  138.         '$sort' => array("count" => -1),
    $ D# _' o9 A" U- }
  139.       ),
    0 T; f# n8 h8 S3 l
  140.     );
    # k4 e5 f& M  c# G
  141.     $this->database->$table->aggregate($cond);
    ! @( t3 d; ~: W9 r/ j$ \
  142.   }
    ; ]' Z9 e9 y! b
  143.   /**
    7 {1 }+ \* |0 d8 }  B
  144.    * 删除数据
      }" _' _  N! p$ c
  145.    * @param $table
    : \7 Q$ R; y7 r0 f# H
  146.    * @param $where
    0 Z! K4 U2 r! s5 D  }1 k4 w: e
  147.    * @return array|bool
    ; H6 t" k. j6 C2 n! Y$ g0 |# c
  148.    */
    . _) ^2 W1 ?3 c: }  F
  149.   public function toDelete($table, $where) {
    2 N: q" g: L: z0 c* v. \- c4 |$ k9 D+ W
  150.     $re = $this->database->$table->remove($where);
    0 B: q* ]9 `. Z/ _
  151.     return $re;# [- l! @0 \: }0 W4 x
  152.   }0 C$ g: D8 q9 O  v! [9 e) y
  153.   /**
    ' C, g0 R* Z( Q# w6 C
  154.    * 插入数据1 z1 q  k9 l/ s% m: a" w/ r
  155.    * @param $table3 p9 }$ c2 f; p) U: r7 w) E
  156.    * @param $data
    2 a+ |9 n/ f% n0 ?7 c
  157.    * @return array|bool
    $ b% H# H5 }+ ^/ ^
  158.    */; i; y' G( _; J3 F! H8 L
  159.   public function toInsert($table, $data) {
    ' E7 l2 W0 }4 B& l6 `
  160.     $re = $this->database->$table->insert($data);
    ; x% D' n4 l3 |8 W
  161.     return $re;8 U2 Z! s3 K* {+ x8 Z" k+ M
  162.   }0 s7 A3 W; X, v( B" X! J  |0 q
  163.   /**
    ) |; ~" B4 T) n! B1 Y5 b3 ^. ^
  164.    * 更新数据
    2 q+ [7 G3 ]) A, i8 Q6 t: \
  165.    * @param $table
    0 a8 @1 f4 q' S! F2 Y
  166.    * @param $where
    9 i. \* O. `8 k% e" m9 @, T
  167.    * @param $data: t, ^9 e: ~: p9 Y( l2 g
  168.    * @return bool
    4 e5 A. d% s; ~9 h: e
  169.    */1 j" l( u6 P2 w  @# R( W( r, k
  170.   public function toUpdate($table, $where, $data) {) V0 W% u1 h! n4 M! z5 W1 T5 e" e! E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
      L5 |, e$ ~$ z- k/ M. O
  172.     return $re;6 z6 d5 |+ X7 C) k, c
  173.   }/ m# S( ~) E4 \# J3 W
  174.   /**4 M/ z- o0 A+ Q- E2 U6 g/ A1 m
  175.    * 获取唯一数据
    3 {8 D2 c9 H, Z# I
  176.    * @param $table$ X" I# K& r% N* I4 s. D- ?
  177.    * @param $key
    % Q+ n) D% [& w, v" E
  178.    * @return array
    : j2 h: \) b* u6 x4 U
  179.    */
    ' N2 x% T4 v% w' @3 r
  180.   public function distinctData($table, $key, $query = array()) {
    ) N6 t6 a& U2 O
  181.     if (!empty($query)) {) ]& g8 w" N! t, H# d" k& K4 @5 X
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 g  Y# ]: X) ~; h: b5 F
  183.     } else {
    - \" _& M+ b% O
  184.       $where = array('distinct' => $table, 'key' => $key);
    & d: k# ^# a; F' n4 c
  185.     }
    ; q. L1 S: z- M
  186.     $data = $this->database->command($where);
    6 N8 [, J9 F; G
  187.     return $data['values'];$ x) U; [4 c+ s; s, ^
  188.   }! F: L+ _: N' [- S
  189. }
    . \( v6 z+ j9 y. g6 A5 i, Y
  190. ?>
复制代码

- m5 v. }1 R6 J# q+ p* Z8 l
5 a9 n& o/ `- M. }3 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-7 13:15 , Processed in 0.135891 second(s), 19 queries .

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