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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
5 b  @# b! o, _5 }模式自由。
8 o& |' ~: o7 v支持动态查询。' I* n$ Y% _6 b2 C/ V9 J5 [
支持完全索引,包含内部对象。- C8 I/ D6 l6 ?
支持查询。
$ k! [  l+ c4 H0 a支持复制和故障恢复。- t9 T( l# E: @% U
使用高效的二进制数据存储,包括大型对象(如视频等)。
; R, ?2 T9 Y( o& I; Q自动处理碎片,以支持云计算层次的扩展性4 K, \+ f% \5 J) k6 |6 E6 U( Q
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。2 E9 K6 o) H; @0 L
文件存储格式为BSON(一种JSON的扩展)
1 P! d( }- u! _3 d4 g# c可通过网络访问

所谓“面向集合”(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
    * n* A7 `$ M% N; R$ e+ n" c! F
  2. /**. i& {# b# d5 q- g7 I7 e
  3. * PHP操作mongodb数据库操作类' l* u! Q- b3 Q, r1 D
  4. */% x: U! I* B4 c4 }# E, {3 P. y
  5. class Database {* A6 T, `' f+ R8 q! L- c
  6.   protected $database  = '';8 F9 t% L0 R# d4 f" n
  7.   protected $mo;
      y+ k  J  B/ |( K. @# g/ J
  8.   /**. V0 y/ Z# }, E5 P" z+ O% [8 M
  9.    * 构造方法+ O' V. m+ N( s
  10.    */$ O9 q7 L7 c" S( L
  11.   public function __construct() {
    5 i  i9 Z4 m1 Z% C
  12.     $server = DBSERVER;* n. Y5 _% h& s# V
  13.     $user = DBUSER;6 I, ^' O8 N* W" \
  14.     $password = DBPASS;
    : \9 b. w9 A; r- c
  15.     $port = DBPORT;
    8 ]1 S4 C0 C2 ~& W* R4 O* W- G$ a
  16.     $database = DBNAME;7 X5 y( s/ r- F7 `: s
  17.     $mongo = $this->getInstance($server, $user, $password, $port);& d$ {3 C$ c: k5 R3 T
  18.     $this->database = $mongo->$database;2 _' m6 d$ S% Y2 n. ~
  19.   }* b0 t# W6 k  U0 s, b7 `/ y) o
  20.   /**# H' l/ l7 p6 t
  21.    * 数据库单例方法
    8 e8 i; }0 p/ R' f! y
  22.    * @param $server
    ! W; K% ?$ S% T: A5 _$ {
  23.    * @param $user2 z6 a7 e0 D6 z
  24.    * @param $password7 J- N5 H; q* K9 D3 p3 ^
  25.    * @param $port
    . j# N" B1 O; h' G1 _
  26.    * @return Mongo! n% m( v- H; c" M. Q
  27.    */, _/ O# _% c) L5 J
  28.   public function getInstance($server, $user, $password, $port) {4 A3 W! ]6 h, o! z, e
  29.     if (isset($this->mo)) {7 t9 f) A; n2 E4 {
  30.       return $this->mo;/ d# W9 h# l, b& c- B. Z
  31.     } else {
      ]/ L( G: V# K; M2 |
  32.       if (!empty($server)) {3 X5 ?7 @/ S$ Y0 w' m7 G  X8 l
  33.         if (!empty($port)) {! z5 A) W+ l1 ]8 A  z& }& o( A1 c
  34.           if (!empty($user) && !empty($password)) {
    * {" {! n' v2 l2 S. R2 S
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");! C4 h- D; b; c1 l  P+ O
  36.           } else {
    , L) B2 p/ \! c
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    ; J' I  X/ _, C, t
  38.           }
    6 ]7 G, t, l, i
  39.         } else {
    ( N6 `7 l5 y7 @: Q3 P
  40.           $this->mo = new Mongo("mongodb://{$server}");3 [! j4 e1 ?7 |1 M, G
  41.         }
    4 U# D1 [& P6 W9 b% a8 f' u
  42.       } else {
    ; D1 k5 W7 A" ]" e1 E7 p, @7 _
  43.         $this->mo = new Mongo();) A  o: f- t- Q9 x. a8 n  g: R
  44.       }8 U7 u1 f# _$ I4 H2 B1 N
  45.       return $this->mo;! y7 j6 d- n+ t! B* P
  46.     }
    # m: B1 L# z- e- ?+ f; G
  47.   }
    2 D! u9 U: K! b3 H
  48.   /**1 t9 N4 ]( Q1 W
  49.    * 查询表中所有数据
    2 q: Z3 {+ c3 G$ @9 Y" @
  50.    * @param $table  ^9 A# r( w" d& B8 w
  51.    * @param array $where
    1 x2 ~' c! @* ?+ z8 y: C/ j" q
  52.    * @param array $sort
    0 {2 w( n0 X  U( }1 k; i' u
  53.    * @param string $limit
    ! O$ c% Q6 H0 n9 T4 N
  54.    * @param string $skip
    $ W/ P, \+ X2 |  ]
  55.    * @return array|int# {4 B. P) T8 l5 v3 q
  56.    */
    9 W" s4 t4 B/ [) ?
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    5 Y5 g7 l. p. I# M; ]# c; N
  58.     if (!empty($where)) {# i  L, I$ l( u0 r
  59.       $data = $this->database->$table->find($where);
    2 Z6 \# _( S, B6 r1 f+ C" \& H$ t
  60.     } else {% O/ D! {1 l# [/ W8 j
  61.       $data = $this->database->$table->find();& T' o! E: A( ]& m0 l
  62.     }/ ^0 a7 r" d. W( |; C' q
  63.     if (!empty($sort)) {
    ; e4 L8 q$ N  s8 N
  64.       $data = $data->sort($sort);  h+ |# E0 y9 n. \; @
  65.     }
    * w2 |' w/ A' J. B. o
  66.     if (!empty($limit)) {4 \# g7 c" y+ A% T% _
  67.       $data = $data->limit($limit);
    0 b! J' |0 A5 {6 y% w( X
  68.     }
    % c9 e9 A. m# ?5 C  E5 S: V7 ~0 }
  69.     if (!empty($skip)) {
    3 ^8 L0 u. |; R7 T/ ?8 r
  70.       $data = $data->skip($skip);4 O3 a- E2 h$ M& K2 W* D
  71.     }, C6 E2 N0 t6 Z5 \8 @
  72.     $newData = array();% [/ Y5 Q- }' J+ G6 p
  73.     while ($data->hasNext()) {
    ! ?* g+ A+ N+ O4 Z+ d
  74.       $newData[] = $data->getNext();6 M" U# o# J# o/ S, i, x" a8 ~
  75.     }+ G+ W# v! l7 s& d- x8 Y
  76.     if (count($newData) == 0) {  g' x( z7 E- T
  77.       return 0;& w% P; o& n% X" }
  78.     }& y2 W  N0 x; M) j
  79.     return $newData;0 V( I' a9 x8 N  s% O* P' v8 O
  80.   }: h, O. `$ r9 {) o$ f
  81.   /**
    " S  ?. \4 Y7 C8 z: }
  82.    * 查询指定一条数据  I" E3 }: z1 E9 N2 M  c. A1 K' K
  83.    * @param $table6 w) ~/ B3 G9 Q' h! B9 S
  84.    * @param array $where
    4 Z/ e$ L7 ~. b& g" i( e
  85.    * @return int3 j% g1 i9 @: Q1 D
  86.    */9 y, X' g: _& z- K  E8 G; y
  87.   public function getOne($table, $where = array()) {
    $ f+ \/ @# `5 ~8 A
  88.     if (!empty($where)) {* j' S4 ^9 A) K
  89.       $data = $this->database->$table->findOne($where);
    & C; K% u/ E2 T& w' Y% H/ z8 Z+ z- U
  90.     } else {/ G2 _% S" Q7 W1 P# m5 v
  91.       $data = $this->database->$table->findOne();
    " Q, V' a: e) K2 H8 k/ ^
  92.     }
    ! X; l0 ^* k$ k4 }  N5 S& n$ k
  93.     return $data;; d, I' J) |" C3 P3 Y, T  ^
  94.   }
    : `7 F7 P3 [- n; _! ]- }* T
  95.   /**# _. t- ?; l' Y
  96.    * 统计个数
    # D. H& Q+ G8 O6 C# K' l& L3 B
  97.    * @param $table$ Q7 H8 x7 m! D9 r; k& f
  98.    * @param array $where
    ' L, M6 E4 ]6 c+ L$ m3 H
  99.    * @return mixed
    5 E% |' t0 a& e1 u2 Z
  100.    */* ~- q: N& F% t: B( F% m) n6 x8 e* a
  101.   public function getCount($table, $where = array()) {8 Q; N( g& g$ N. j6 z+ \! u
  102.     if (!empty($where)) {
    & ]7 A# I! y5 q3 N: @7 [- }
  103.       $data = $this->database->$table->find($where)->count();
    * B/ ^# l3 S; G  P
  104.     } else {- A3 ?/ l$ A" S8 o$ }4 r
  105.       $data = $this->database->$table->find()->count();
    ! g' J$ ]8 W- @: b1 m# L3 N: e$ H
  106.     }
    8 L8 ]) G& K2 X6 c
  107.     return $data;5 G$ O3 `7 v* j9 l  A+ Y
  108.   }
    # k" S2 t4 J* c1 ?! [4 {9 X2 P' V
  109.   /**
    9 q3 J$ n& \$ ~0 B( Y
  110.    * 直接执行mongo命令
    " M2 k0 z0 D- \% E' b2 B- \
  111.    * @param $sql8 U) D: p5 h' Y2 O  D! O
  112.    * @return array+ R# D5 q' M: S
  113.    */
    ' m2 f, q1 A" h1 I7 G, C; N8 r1 y
  114.   public function toExcute($sql) {4 R; J: ]7 s: [% p
  115.     $result = $this->database->execute($sql);0 N& E! @+ l/ q
  116.     return $result;4 k: h* v7 Y9 O  C' V
  117.   }! s7 u/ W  A4 _7 k1 }
  118.   /**
    + \! W( ]. P- K' B, h& i7 x/ m7 q
  119.    * 分组统计个数
    & J4 M! r  M$ w. M3 y$ X5 H
  120.    * @param $table& Y3 q( b, c* w" `- @
  121.    * @param $where
    6 g/ m1 m3 b  y! Z3 \
  122.    * @param $field) u9 R' |% y2 c; w" q8 m, O
  123.    */: _0 `7 t  E" Z; q* i" r
  124.   public function groupCount($table, $where, $field) {1 Q7 L) b6 `' Y6 S! W
  125.     $cond = array(
    3 U5 x$ }7 T7 E6 |+ j% U0 S+ S" _
  126.       array(
    4 p, N4 e, C$ j' M* o
  127.         '$match' => $where,
    ( U: ~) q  t: u$ _
  128.       ),
    ! o6 A& C2 B2 k+ \, ]) D6 T3 B
  129.       array(
    , [/ c2 e4 c: o2 a% i% I
  130.         '$group' => array(0 h8 X2 c4 T3 w/ d! t5 j! _
  131.           '_id' => '0 M$ Y% X7 P  s* S. I6 G

  132. % c2 C7 p$ Y1 F! K
  133. . $field,
    & U  T! D* e( U# f! l, G
  134.           'count' => array('$sum' => 1),
    7 Q+ {' \9 s8 F/ E2 ~/ M0 p$ a* F
  135.         ),
    $ d% i* |. G% v. m/ W3 [
  136.       ),% b- a7 t/ q# B2 A% f+ E: \
  137.       array(6 z5 I* D8 B3 u
  138.         '$sort' => array("count" => -1),! W8 l6 |' ~% m# d: M0 A# a! b
  139.       ),6 U8 d) H  }4 j! h7 q& b, b3 v
  140.     );1 u4 i+ S5 b: ^5 E8 @
  141.     $this->database->$table->aggregate($cond);, S/ o# |' ~# P; e
  142.   }
    5 p) T  j# x& A- e) u2 l: x
  143.   /**
    ( i% [3 V* ~) P) W' S
  144.    * 删除数据4 ?: [! H2 Y( h; @( `
  145.    * @param $table
    7 H% ]' U' k/ ?% Y; f
  146.    * @param $where9 b7 k! i  Q- \. c  |
  147.    * @return array|bool! w  @5 r! W& ^: B
  148.    */
    + |4 j9 N/ w: B2 ~5 @3 ~8 @$ \/ Y  |
  149.   public function toDelete($table, $where) {
      b! t/ i, b' q/ U6 u3 A9 F, h
  150.     $re = $this->database->$table->remove($where);: g' E8 q' x1 p. c2 L! q: G
  151.     return $re;
    " K1 S, _  _) S+ W1 H, R
  152.   }/ ]. F3 o2 V2 Y+ \8 _3 j
  153.   /**
    ' i# F# k! p8 @# \! \
  154.    * 插入数据
    5 ~8 U( W7 O5 J+ }! f
  155.    * @param $table, N; `5 Q7 }4 V
  156.    * @param $data5 b: f+ ?7 l: I' T' x9 d1 |
  157.    * @return array|bool  \/ [& F" R9 r" s/ l+ P
  158.    */
    4 P( I% k# Z& b2 ]& q2 z$ m
  159.   public function toInsert($table, $data) {& I" `( i# k9 d6 o
  160.     $re = $this->database->$table->insert($data);
    1 o% c4 S$ M8 e- b  |' j. ^
  161.     return $re;
    , }9 Y5 q8 C( V7 J& f9 s3 b$ V
  162.   }' g7 R- @' j: O+ U4 {- }# X
  163.   /**
      [7 x2 u2 ~8 H" }, L9 `1 m
  164.    * 更新数据2 n# v5 N9 j# n& O; ?1 z- {8 H7 K
  165.    * @param $table
    4 |' [9 w, d+ n% x: q. R
  166.    * @param $where' C8 p+ q4 P; h" a) d" W' x+ w5 h
  167.    * @param $data
    ( \* L8 r- {; G# g5 ^
  168.    * @return bool) V, K; m& y: Q( g
  169.    */
    9 c( Q5 L* t  J( z$ I
  170.   public function toUpdate($table, $where, $data) {
    ; S! V  w4 @9 {! ]
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ; T+ N4 p. m$ }9 `6 D0 v; A& I
  172.     return $re;
    # Z. W/ b: t2 Z; ?( V+ Q7 d2 p
  173.   }
    3 \3 y/ f: J( M' x4 D
  174.   /**
    , }  J% m1 t# p3 h5 L
  175.    * 获取唯一数据* S9 ?- d/ K* i2 }" x1 R! G3 D1 R6 c% I! F
  176.    * @param $table
    0 Z2 B4 {4 J* X' n* X, L
  177.    * @param $key( m. _: O% F; c& k/ D8 L4 V
  178.    * @return array
    $ b' r. q* o- k0 z+ b3 D; }8 G
  179.    */
    # M, }1 ^! A1 i' a4 @& m
  180.   public function distinctData($table, $key, $query = array()) {
    - O: K6 g8 V9 S7 q( Q
  181.     if (!empty($query)) {: |$ `+ E' H+ U' p8 c1 p% [
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    * H4 ?5 }9 i; M( ~7 E
  183.     } else {& J5 {7 N0 D1 g4 g3 Y. o3 t
  184.       $where = array('distinct' => $table, 'key' => $key);
      c) t5 Z# t3 y! L7 G5 w" B9 t
  185.     }; ^5 S* Q# Y" K: B2 |, v( p5 G5 B
  186.     $data = $this->database->command($where);
    5 _# M$ Q$ t% e# P; c' R
  187.     return $data['values'];
    . o1 F6 h+ h/ V5 X. s2 P
  188.   }
    " y# p  }* J6 n$ ]- [
  189. }
    + D- c4 u5 b% F9 m- S) {+ C
  190. ?>
复制代码

4 x1 S% y6 u* P
6 y/ ?8 T1 O3 e. f4 f7 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 19:21 , Processed in 0.154989 second(s), 20 queries .

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