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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
& j9 ^8 @# P, J! k( m* B$ t模式自由。9 H& l* @- g0 v
支持动态查询。
7 P  F; _, P1 k支持完全索引,包含内部对象。
6 ?6 b4 j' {! q* d9 }% R, ]3 ^支持查询。
4 w1 ?1 c* z. `4 h/ O. X支持复制和故障恢复。
- r) K% x- N; K5 {+ n- F# u* `使用高效的二进制数据存储,包括大型对象(如视频等)。
3 H' f' i6 O' a, c& d自动处理碎片,以支持云计算层次的扩展性* m+ w- }9 a, h1 y! j# O" t3 S" H; V
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。( w6 T; `$ D8 T% J: f
文件存储格式为BSON(一种JSON的扩展)
5 D9 Y9 K0 c  c% 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. <?php& D3 L. {% X- [3 Z# ?! r5 s
  2. /**+ m: ~* N' H; _7 j
  3. * PHP操作mongodb数据库操作类
    6 a" q0 e# [+ X% }! J
  4. */
    / p, U0 g5 T* \+ C+ n: ]
  5. class Database {
    8 Z, v/ T. T/ }( k- l
  6.   protected $database  = '';
    2 y) Q! U. c$ f) ~, ?$ U
  7.   protected $mo;
    + X5 l3 M$ z! `4 i
  8.   /**
    * v9 r0 J5 a4 l$ y" n3 v
  9.    * 构造方法
    4 T7 ]/ I) R3 b, j7 u1 [! X
  10.    */
    & l7 h: V( c( @2 D
  11.   public function __construct() {
    ! b" u6 p" p% _
  12.     $server = DBSERVER;
    8 N( V9 u4 Q3 P" r, z! ]
  13.     $user = DBUSER;
    0 _* g, `, m, D2 a; K+ \5 u
  14.     $password = DBPASS;6 S6 |% G8 y5 J2 ^! r/ x4 u
  15.     $port = DBPORT;* q& i4 t, R$ A* x+ D, A2 h* r) u
  16.     $database = DBNAME;
    0 ~$ h2 v# M+ z: x
  17.     $mongo = $this->getInstance($server, $user, $password, $port);) u: |/ n) I: u# c( x" Q
  18.     $this->database = $mongo->$database;1 K: U2 c: x) A) L# v. @
  19.   }
    ( C- W! h! R0 Z* P2 i* w
  20.   /**
    7 L" {6 {1 @) v
  21.    * 数据库单例方法/ {6 g* Z- E9 c+ H( c2 `! U
  22.    * @param $server  g( ~/ ?7 k0 v
  23.    * @param $user
    . d! I6 [: {$ j$ h# d9 `7 o3 s
  24.    * @param $password4 m2 J. e; _+ H# M! w
  25.    * @param $port8 o9 J3 I: j1 r* ^3 j6 f
  26.    * @return Mongo
    9 @: O9 W6 }' N+ }& _# _2 D) T
  27.    */: ?* P) `: I+ ~  w
  28.   public function getInstance($server, $user, $password, $port) {$ ^' M' x# B7 E
  29.     if (isset($this->mo)) {2 K8 D" F* c, j4 M/ A
  30.       return $this->mo;
    ) s2 [% E3 d  x) q: H0 ]0 p
  31.     } else {
    2 {* x# p. [  y. b
  32.       if (!empty($server)) {
    ; W% W; \! K1 A" C6 Z: Q
  33.         if (!empty($port)) {+ O0 `  N/ B! f4 S" g
  34.           if (!empty($user) && !empty($password)) {3 Y, Z( K  i* S1 ^3 H5 E# S
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ' s5 m# {$ a- M+ x8 j- l
  36.           } else {
    2 v0 C  Y% p+ |% s3 Y, F
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");/ A* `2 s! t3 D
  38.           }
    0 ^$ x3 d# V+ d$ Z* T
  39.         } else {
    + N- `/ u4 R3 R9 \5 q) O# @6 S# m
  40.           $this->mo = new Mongo("mongodb://{$server}");: i9 Y' {; b, j( A& ?1 F- P2 W
  41.         }7 d$ \" t. _& q6 I# V
  42.       } else {
    9 S2 }" }6 R. Q% d- Y  T
  43.         $this->mo = new Mongo();
    ( G/ o( o" F! |* Q% r
  44.       }
    8 `! |0 O9 t8 j: C. \- i
  45.       return $this->mo;8 d, X5 P' N' B0 `  ]& R! s
  46.     }, J5 h6 z" o& F$ W$ `3 X; Q
  47.   }7 h) s) W  }4 b4 \( G3 U4 i
  48.   /**
    ; o/ e1 V9 |& l
  49.    * 查询表中所有数据
    2 w! m/ h: x* r* p6 l9 _8 v; l
  50.    * @param $table% q4 a2 m' T6 s
  51.    * @param array $where- Q, e2 @: C9 ~9 V+ I
  52.    * @param array $sort$ {  n/ ]: |' L) a$ |6 a( q
  53.    * @param string $limit6 b& _2 p- s( {' W5 \
  54.    * @param string $skip
    / N% [5 s6 [( G" E8 i
  55.    * @return array|int' a' J0 W9 C) a9 T5 i- g2 a5 y
  56.    */
    ( O, X2 y# l$ V* ^# y& M9 n
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {# F. h/ c2 Q1 m0 l0 N
  58.     if (!empty($where)) {
      _: r( J' L. v$ n
  59.       $data = $this->database->$table->find($where);5 t2 X5 K" }, X+ N8 k5 y, O6 H
  60.     } else {
    8 q# _) W" V2 ~# ?* K1 A
  61.       $data = $this->database->$table->find();5 z1 d" f& |& G9 m
  62.     }
    " ~* C1 Y+ v- T2 {9 w$ |
  63.     if (!empty($sort)) {
    8 r2 z2 S" \) C/ _
  64.       $data = $data->sort($sort);5 p$ J5 Z. _) v$ ?
  65.     }3 w; N! p8 T# \( U  C
  66.     if (!empty($limit)) {: x7 m" \# L8 e0 @( a% p% U
  67.       $data = $data->limit($limit);
    ) [5 |2 B* ]) ^7 u* @6 b+ p( v
  68.     }5 o0 w7 U( J4 I
  69.     if (!empty($skip)) {& Z- ]% D' K2 |2 V& \# Z' U! X7 K, |
  70.       $data = $data->skip($skip);
      E- @' F6 Y9 F! w3 O# z
  71.     }1 w4 S: r% ?8 ?( g* y( S
  72.     $newData = array();( r7 J$ y5 _6 z- q
  73.     while ($data->hasNext()) {
    # `# p' f0 \: j# V
  74.       $newData[] = $data->getNext();6 b9 y; ?- d7 J& ^8 x
  75.     }2 E5 j6 J8 ~: o/ R8 b
  76.     if (count($newData) == 0) {
    / f9 X! i; d, c& a4 P8 t+ c* X
  77.       return 0;5 ^) i' s$ [% U/ K/ ?, e  q" @
  78.     }* s8 i2 m) X+ s: A
  79.     return $newData;% @% n" ^" I- \3 X
  80.   }
    1 a  N8 D8 }5 k3 Q, i: v
  81.   /**! B( f) o' }, d
  82.    * 查询指定一条数据
    " a6 h, _' ?3 j$ j! k
  83.    * @param $table
    ' a2 ^3 _1 v/ H* {7 B) X
  84.    * @param array $where
    + ^7 ~* j2 d! ?" u: y7 }
  85.    * @return int
    7 _2 t5 F1 P# Q2 f: t. V
  86.    */
    % t0 [$ W% U6 T
  87.   public function getOne($table, $where = array()) {
    ; d! E# N: R  Z- J( w2 o
  88.     if (!empty($where)) {
    5 ?9 ~) |! R3 _8 e
  89.       $data = $this->database->$table->findOne($where);& }! Z0 J8 Q% q4 U  H; @# ?
  90.     } else {
    % w( L5 ~$ `. Q* `9 A7 ^4 w5 I
  91.       $data = $this->database->$table->findOne();
    ( \- `  K2 I9 b1 S! P
  92.     }
    2 y! v2 \6 e. b$ L/ h6 `- J
  93.     return $data;8 V% o- O* X% B. ]. c9 @
  94.   }
    5 t; r1 W6 {; e# f6 ]( f
  95.   /**
    # N- z+ S; V7 u4 I) ^
  96.    * 统计个数0 R7 {8 [& Z( }; b
  97.    * @param $table2 y7 L% q) D; M$ `/ x) o. z
  98.    * @param array $where
    3 ^! l! t+ l& H1 J
  99.    * @return mixed
    , P9 V2 P8 T4 ?
  100.    */' F5 e6 I0 w7 P4 @* k* N! ]
  101.   public function getCount($table, $where = array()) {$ _$ y/ |' o* {. G/ J
  102.     if (!empty($where)) {  [" Y9 w1 b, Y! P
  103.       $data = $this->database->$table->find($where)->count();+ @3 w0 Z' i1 ?" _
  104.     } else {
    7 o5 E" C" f9 U7 C8 _( U/ T
  105.       $data = $this->database->$table->find()->count();
    ( D& |7 n/ y7 H9 [
  106.     }+ Q3 y% T- e# C: E
  107.     return $data;' \0 H7 Q" F$ m* i/ b
  108.   }9 w8 x/ ]. U7 S, G* p
  109.   /**6 Y- |) c# ]% N! C1 V2 Y  @
  110.    * 直接执行mongo命令
      g, L( F) h$ K6 s% x$ v
  111.    * @param $sql
    ; G  A: M# }9 N$ A% v& T
  112.    * @return array: e* t% m& d. @) ]: f  N
  113.    */* G) J  h5 S9 D  a2 y, X, H0 n
  114.   public function toExcute($sql) {
    5 l. |6 k6 B; o5 g& K0 C7 q
  115.     $result = $this->database->execute($sql);0 h  [1 ^" S0 _! B
  116.     return $result;
    7 S6 H- [3 S, q. y% o& V
  117.   }$ s5 E7 F1 T1 k- m: L7 g% l' e4 y: o
  118.   /**
    : Q* `2 c) |. y( K  G" G, P
  119.    * 分组统计个数0 T0 k! h8 t& w; T' y  Q! \6 O' [
  120.    * @param $table! O$ ?( x0 h1 C
  121.    * @param $where
    3 f% U# r4 {6 V) j$ L
  122.    * @param $field8 E5 m0 k' x% j8 W- E
  123.    */
    4 F9 p! k( u* ?+ {2 V+ n$ X8 y
  124.   public function groupCount($table, $where, $field) {
    7 S) y$ J9 i) w: {8 v  a- h' r
  125.     $cond = array(
    ' w) w) u; x1 F6 k: J# v( K
  126.       array(% t7 @) b. \) b' E# S
  127.         '$match' => $where,
    9 v: X1 B; N  ?3 f3 w7 G3 }
  128.       ),
    . ~0 H6 r7 a% u" s9 T) O
  129.       array(
    + ^& S3 b& q$ H0 q/ X/ ~' d- ^7 |
  130.         '$group' => array(; R9 G, Q8 D; q+ X9 O
  131.           '_id' => '
    $ k2 h( u/ ~  k. m

  132. * ~. {4 \8 X* o# V. l3 @
  133. . $field,
    , a0 W  r4 p. V
  134.           'count' => array('$sum' => 1),
    + ]# M7 u" I- H$ w9 n$ A
  135.         ),% ]$ ?: G, E" Y/ y1 _+ a7 t/ v
  136.       ),' p: S" Q3 G/ H. u) o
  137.       array(3 J! n4 i) R& u9 W7 N/ b) C7 g$ a
  138.         '$sort' => array("count" => -1),
    " X5 E( b  _* s9 x7 r
  139.       ),5 r# ^2 w( r8 H1 Z: j* C9 C
  140.     );$ i" N' S, a0 ?2 z
  141.     $this->database->$table->aggregate($cond);
    ! v4 Q4 r* m$ v9 f/ \2 a
  142.   }
    & H+ [+ y' H; S9 t) K1 }
  143.   /**
    ) \5 D. v7 [; x4 B
  144.    * 删除数据* {0 i/ ~" v5 I4 ?; _
  145.    * @param $table5 d) u9 j- s% D
  146.    * @param $where
    2 Z3 S2 ?  e$ I* v" T5 y
  147.    * @return array|bool
    # {2 ?( p' n# m) K5 s
  148.    */
    ' J; I8 @% u) D2 O
  149.   public function toDelete($table, $where) {
    4 C# [" J0 J5 G4 a# e- M) [' b1 B
  150.     $re = $this->database->$table->remove($where);1 i7 }5 o8 \3 h1 [, l( O
  151.     return $re;# A9 k* {; k% v4 o! f4 r
  152.   }6 u) K! ]7 v% |' `
  153.   /**. L  a, c; L- c
  154.    * 插入数据& p5 d2 I1 p' d# m- y5 n
  155.    * @param $table' Q% ^9 C0 p* ^+ y; b
  156.    * @param $data
    % X4 X* p3 i# ?! {
  157.    * @return array|bool9 r* v7 Z, h5 Z* j* ~  f7 b9 t
  158.    */; ?, V6 p8 l- m- x( p$ {6 K
  159.   public function toInsert($table, $data) {
    % [  D7 O: w* J9 W+ @  ~2 r3 |' Y
  160.     $re = $this->database->$table->insert($data);$ C' H9 J* a. I+ S! u9 R0 Q
  161.     return $re;* \1 ]) K+ n5 F
  162.   }
    . @: k; J0 {6 ?9 o6 X, \
  163.   /**) {2 x6 k; D. P1 `
  164.    * 更新数据
    : w: w$ \/ ]+ |$ Q6 L
  165.    * @param $table3 n; {3 g) }# v
  166.    * @param $where9 H/ v! W, S  f
  167.    * @param $data
    6 g6 g0 R4 o7 N
  168.    * @return bool
    & H: |1 [, L9 {/ r9 v
  169.    */' B) {3 s6 L& v
  170.   public function toUpdate($table, $where, $data) {" S1 I; L6 O% V! q; g/ ^" Y
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    8 l8 R, L* N9 `9 P0 |/ t
  172.     return $re;
    ) z* q1 Y1 f! m1 N* P
  173.   }
    # w$ L3 H% [, _9 l3 f. K! s# ]
  174.   /**& g) X3 H6 g4 y+ Y
  175.    * 获取唯一数据) W) S5 J8 o' h
  176.    * @param $table, `$ ]9 Y1 p. K1 v9 b
  177.    * @param $key
    % f) @& e4 X, l, m
  178.    * @return array
    - p2 p) }, Q, [$ L1 m9 A/ [
  179.    */3 o7 j/ E" ^2 a# `9 K1 `. v8 {0 N$ U
  180.   public function distinctData($table, $key, $query = array()) {1 ^% ~& E2 a" X- F& N
  181.     if (!empty($query)) {; o3 m/ d! T; L: R4 h
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    # @$ [( s, j0 B! ^/ `) e0 K1 b
  183.     } else {
    3 A' j  E' A2 J2 G3 N
  184.       $where = array('distinct' => $table, 'key' => $key);
    * u+ M% H- G6 k% o2 |
  185.     }
    6 \) B1 z! N8 |2 k0 D: F
  186.     $data = $this->database->command($where);2 y  n3 W4 x. n+ v* a9 S- n/ ]
  187.     return $data['values'];
    , J6 g* [' v' ]  z1 u8 e' |
  188.   }
    . H/ g& D/ l6 ?0 h; b/ g
  189. }/ c9 C( z8 h# r" W1 X6 l; k" Z4 r
  190. ?>
复制代码

- B& R- Y' x, x" E- I9 O3 Y$ m
3 E# t! I! s& D0 w7 u5 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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