cncml手绘网

标题: PHP实现的mongoDB数据库操作类完整实例 [打印本页]

作者: admin    时间: 2019-3-9 02:49
标题: PHP实现的mongoDB数据库操作类完整实例

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
, W) u' C$ j) L) Y模式自由。% ^- h' c/ m0 S$ U8 y
支持动态查询。
, {1 Z) K8 [3 H( Y* Z支持完全索引,包含内部对象。
# s6 `  Z; i& d" ^- W& Q2 z, l& m支持查询。# |2 |* V3 Z7 R
支持复制和故障恢复。+ A6 i6 {2 n: x$ o% J) h+ \# B8 ]
使用高效的二进制数据存储,包括大型对象(如视频等)。
/ o( v: e' y" \7 z, ]  @8 Y- C7 v自动处理碎片,以支持云计算层次的扩展性
, Z# _8 v" d8 h" \+ @/ Z0 ~0 X" n支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
8 q  n$ V& }) @& W( x& ]* H文件存储格式为BSON(一种JSON的扩展)- l7 u. \6 Q' K" r  @& f
可通过网络访问

所谓“面向集合”(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
    7 Y* d5 F7 ^" k% x
  2. /**
    $ D. t% Y) d' K5 t
  3. * PHP操作mongodb数据库操作类/ Q" @  i& S" P8 U4 D
  4. */0 M9 |$ r/ a7 n0 z! C6 Y
  5. class Database {
    3 b1 [4 V) `; [& H/ \
  6.   protected $database  = '';4 H' H% B7 n3 e7 u1 q6 u# K
  7.   protected $mo;
    ( V' q4 F' S& Q% {2 N& n
  8.   /**; x/ y/ B7 t+ J/ y( q5 ~
  9.    * 构造方法
    & s: h- p/ l1 ~# j2 ~
  10.    */
    , S8 o; \8 e+ z7 y
  11.   public function __construct() {4 i: N+ X% f9 G) d
  12.     $server = DBSERVER;
    6 l9 o, f' s8 {
  13.     $user = DBUSER;
    ' d, b8 \+ I; X* ~
  14.     $password = DBPASS;
    3 O# O+ `' X; s- O
  15.     $port = DBPORT;: t& I5 I) s' f3 h# v3 @! x9 R
  16.     $database = DBNAME;
    $ m) {( H- [" Z$ l' k, e0 C
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    ) F1 U* A" }/ s1 x5 ]5 n. u
  18.     $this->database = $mongo->$database;
    / s7 q' ?4 R8 J7 ]) u
  19.   }
    & ?9 z9 w  R6 A" F
  20.   /**: [% p3 `: d# W
  21.    * 数据库单例方法
    % C2 ^, i' R. a# F
  22.    * @param $server( s* O/ q/ _2 b* V
  23.    * @param $user' ]: j# H/ O9 m
  24.    * @param $password
    % {2 x9 T( D" j8 a! u4 O5 ]/ u. }4 Z+ d
  25.    * @param $port
    9 [' F" i4 T5 F8 X8 y
  26.    * @return Mongo
    ! z5 B8 E# k7 p, }# H
  27.    */
    ! R6 r* R3 H, j& P: B
  28.   public function getInstance($server, $user, $password, $port) {+ _0 @0 J7 d( k9 A" E7 `" k; O$ z8 a
  29.     if (isset($this->mo)) {
    - l* V# O& p( S3 U  g  l
  30.       return $this->mo;
    " l7 Y( j3 `* t" S1 [" e
  31.     } else {
    ( H- B) l% S' l) ~2 G* u" M3 N
  32.       if (!empty($server)) {, F8 l* x8 B+ D  g+ o4 g  ~' `, G; V
  33.         if (!empty($port)) {
    : ^# m4 S. D/ M5 |3 ~
  34.           if (!empty($user) && !empty($password)) {) B% X% j/ M; e' W2 C% m
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");6 b' q, I8 ~/ k8 ?& A: g1 u0 [8 n
  36.           } else {( O& d. z, G3 f
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");; E* p+ d6 c! k! @' v; q' {1 g
  38.           }
      {7 J6 X9 X7 ?2 U% Q3 G' y
  39.         } else {
    ( m: k, j3 Y2 S% k9 E' B
  40.           $this->mo = new Mongo("mongodb://{$server}");
      S( p/ g  q4 C( L( k7 l- K+ R) i* Z3 v
  41.         }
    ) c5 b* y6 O8 `2 m2 Q4 R3 }
  42.       } else {
    ! }; v2 [+ Z7 f: {5 p
  43.         $this->mo = new Mongo();- R  C7 n6 [) K) l' J; u
  44.       }
    . p+ H- I# i0 s
  45.       return $this->mo;
    # C' M$ y' T& F. w! |
  46.     }
    , j3 ?. c; @; Z8 D& J1 |
  47.   }# I% I. `7 G) a
  48.   /**
    1 Q  W. H% ~& Q* d9 L8 T4 b
  49.    * 查询表中所有数据' i3 O1 z. A" o! G& a
  50.    * @param $table" o- a; d" h1 t5 q3 p0 j( I
  51.    * @param array $where4 O3 {1 P1 L6 C: y* \2 ~8 ~' C9 x
  52.    * @param array $sort
    6 t$ l8 S4 ~, a$ k  m
  53.    * @param string $limit- X  X2 {6 ?; O1 ]& I' g* w* k
  54.    * @param string $skip
    % h6 ?0 ]1 {( k: O" \( S
  55.    * @return array|int( w9 h& G9 v  p9 r0 f+ `1 M
  56.    */. ]1 K4 n1 r/ T5 o$ m1 {
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {8 n9 r2 j+ o4 q& M9 X
  58.     if (!empty($where)) {& M- c" ~. L" `  M0 R+ f
  59.       $data = $this->database->$table->find($where);
    % z# J! Q9 A  v4 [( t
  60.     } else {( A' d/ e; C* X. y% _& p
  61.       $data = $this->database->$table->find();" [& I9 R% A# L3 V" D1 g; s5 r
  62.     }/ q" l; c' Z7 V
  63.     if (!empty($sort)) {
    % J9 B* k8 g4 p0 b. A
  64.       $data = $data->sort($sort);
    * A, A7 x& C) e. H' n4 D  ~
  65.     }5 g4 C; Y2 D( I. Y- N5 i" V6 @
  66.     if (!empty($limit)) {" u. M. v, `+ x, P- W! Z
  67.       $data = $data->limit($limit);
    : ?! ~+ F1 \: \7 e
  68.     }
    % `5 S0 n( `, T: B
  69.     if (!empty($skip)) {. f/ x+ y7 Z: H, d. Z
  70.       $data = $data->skip($skip);0 m0 g+ M+ V7 p: C) \
  71.     }' H9 O$ x: {( m" t
  72.     $newData = array();
    * b" \4 P/ u5 w: B( e* H' R3 K
  73.     while ($data->hasNext()) {
    , Z% @$ ~) t, `) Y" O$ S
  74.       $newData[] = $data->getNext();
      m7 O, E6 h3 ^7 C9 L
  75.     }: t( |% K' S- O
  76.     if (count($newData) == 0) {1 U2 E8 O( m1 K5 B4 S
  77.       return 0;
    . f: B' P- H  X' F9 t8 o  U
  78.     }; I' x! M, h) n9 n8 V
  79.     return $newData;; u% H9 _  D* \! L1 M( Z; A* B+ F
  80.   }7 r4 V  B4 B6 v9 e1 t
  81.   /**
    8 x9 s; P- E/ u! `
  82.    * 查询指定一条数据
    6 E1 T( M7 i0 x3 @6 c$ v
  83.    * @param $table; r: e+ ~0 A3 z& r) d! t7 O
  84.    * @param array $where7 {% K- w' E% q) ^: T7 O
  85.    * @return int
    . l2 l6 v5 k0 T2 {# w: f, Q8 u
  86.    */
    " ~6 D8 R8 S9 E5 G
  87.   public function getOne($table, $where = array()) {
    & C; x+ e4 {9 \5 [
  88.     if (!empty($where)) {3 T2 m7 L5 ?- A- X: @
  89.       $data = $this->database->$table->findOne($where);
    ' g& s" z4 r4 x/ F1 S
  90.     } else {
    % B% I9 X' s5 u1 P  X6 q$ r& u5 D
  91.       $data = $this->database->$table->findOne();
    " O4 Z* Y# s2 }& b% X' m9 K
  92.     }2 n0 K6 \( F3 H8 Z8 I4 k  |$ u
  93.     return $data;
    4 W4 ~* A3 P) R6 M  A9 \+ @
  94.   }3 |- Y2 i$ }3 q+ M
  95.   /**
    9 s. y& v8 k8 Q8 Z1 [# p
  96.    * 统计个数, ~4 `" A& b: [- C9 @' j
  97.    * @param $table( n8 i% M% k% J9 F9 K# I$ }# n
  98.    * @param array $where
    0 {' x$ i" {+ e) q
  99.    * @return mixed. _: o0 t: u: a3 l9 ]; A
  100.    */! u: k' r' e( X9 }
  101.   public function getCount($table, $where = array()) {
    + A# ?( y% J, s- f9 d4 _) ?
  102.     if (!empty($where)) {! l+ X% @7 H! l
  103.       $data = $this->database->$table->find($where)->count();6 h7 D4 T. ]. R8 i+ L
  104.     } else {
    ( Z. \- y, T0 m. p% E. Y" v! K
  105.       $data = $this->database->$table->find()->count();2 Q6 ?; o9 F' `" `/ @7 v& F4 ]- |
  106.     }
    - K; {1 R! E% b4 a. {6 I
  107.     return $data;" r7 b; X. A6 t: C" C( f
  108.   }  d5 b8 z5 e# v$ Q7 x
  109.   /**
    4 u6 m# b5 x; j0 `+ Q7 x/ }
  110.    * 直接执行mongo命令
    " L+ t7 [. \& a" t
  111.    * @param $sql
    , E: |. Z# Y/ E" s4 g
  112.    * @return array$ y3 v/ ~2 w/ v: N5 b- X
  113.    */
    " m# i: ^6 e! \; q! ]
  114.   public function toExcute($sql) {! ^0 u0 R8 ]- W& @9 P) O$ r/ m3 t
  115.     $result = $this->database->execute($sql);3 b# o0 J# K2 O  N  Q# c5 j
  116.     return $result;
    / i: y# j7 V- Z. y5 Z) R) B
  117.   }9 \6 ^& N7 l3 K, s, w) _5 ^; v
  118.   /**
    % e5 R2 u, b9 f* d+ ^) `
  119.    * 分组统计个数- o( [* X) k8 ]  y. F
  120.    * @param $table/ ^6 O8 |- g( R) O4 l. e
  121.    * @param $where& v/ ?: I2 F& ^; d2 v4 l0 O4 Y% g* @
  122.    * @param $field% `$ t5 y" L8 D  y1 h8 b+ b
  123.    */& x/ }( Z2 T1 ]9 b' K
  124.   public function groupCount($table, $where, $field) {
    ( l7 e5 r' ]( V. P& H9 R$ @4 n
  125.     $cond = array(* {' l0 U+ p7 ?/ v- b& p
  126.       array(2 h& F# ]- \9 Y- N. E: h6 M; S( Y
  127.         '$match' => $where,
    " S% H& b; I. @! y
  128.       ),- J+ f1 }8 q8 K' k) n9 O
  129.       array(
    2 l8 g* Q2 V- o" A' K
  130.         '$group' => array(0 n/ P7 j1 k  B) k
  131.           '_id' => '
    ; m' D/ q% r  ^2 `

  132. # {3 s7 v0 X% x9 ~
  133. . $field,
    0 ~1 Z: C: A+ K; T: S
  134.           'count' => array('$sum' => 1),
    # ]. j1 d: h* N/ k6 N( t
  135.         ),% w3 `# t8 Q  G; l$ o; S- G. U
  136.       ),; C* a9 z9 u. E
  137.       array(; x6 c9 R6 N5 _& O
  138.         '$sort' => array("count" => -1),3 U- S9 R+ @( Y' S0 h* X
  139.       ),( v, G' O4 v) Z7 {) Y- c
  140.     );2 y9 P. ~3 W/ O6 `0 @
  141.     $this->database->$table->aggregate($cond);0 q  ^& A, p2 t# D  v' h' J
  142.   }
    1 ~. s+ z% W3 Q6 D) C4 H
  143.   /**
    ; ?6 X8 @0 Z' E" T' s3 S
  144.    * 删除数据, ~9 s0 G7 c8 S+ R
  145.    * @param $table- ?8 o* P9 \$ U; u
  146.    * @param $where
    , O5 N, l+ r! W* a! r1 F  i
  147.    * @return array|bool6 }/ I, B( D* O
  148.    */+ S+ y) |4 Q; k
  149.   public function toDelete($table, $where) {# R* L  Q1 u) ^. |$ C# l
  150.     $re = $this->database->$table->remove($where);
    / U% s* v! L5 K3 e2 w$ j) W
  151.     return $re;" q! l( q8 |6 N. x- ~2 E
  152.   }) V! }4 R! j9 W. P/ o- y* F
  153.   /**
    5 H3 ^; l0 P: w+ F
  154.    * 插入数据8 X# C* D) V! v1 q$ U9 Q" j0 @; I
  155.    * @param $table  K0 V9 v& A; {
  156.    * @param $data
    + H- V/ d, j. }9 d
  157.    * @return array|bool
    ) J9 h/ J% ?: {; B& _" c
  158.    */
    8 D" J4 g6 {4 y/ K; g) K0 T+ H
  159.   public function toInsert($table, $data) {+ }; l6 D: p: [# M: x% i
  160.     $re = $this->database->$table->insert($data);# y$ b# p) ?8 f6 A
  161.     return $re;
    , O- h2 |( C7 X& f
  162.   }
    " E) t% W; F1 z3 w" ~  P& T
  163.   /**
    , @; w. V4 K+ j% g
  164.    * 更新数据
    ! }; @; O+ F% G' N- @9 H
  165.    * @param $table- x) J4 j( _: |/ C
  166.    * @param $where
    ( T1 B0 D8 d) Q- `7 T$ V7 h/ ~* O
  167.    * @param $data" P$ S0 H% H; [1 a
  168.    * @return bool
    % P, [1 c# I# U( U7 F; c) c3 B5 F
  169.    */
    7 [8 s; Q( Y6 L, c
  170.   public function toUpdate($table, $where, $data) {
    , ?5 \' Z/ K: f5 U; l1 A; ]; t  }
  171.     $re = $this->database->$table->update($where, array('$set' => $data));" z8 Y  u4 t- r$ K) {: v
  172.     return $re;" h! K7 r" L7 z9 c
  173.   }, W; P( t' I. h! e
  174.   /**
    3 ]! u8 v. x8 b/ b. G
  175.    * 获取唯一数据; S% J+ j2 B6 A7 [# x/ P  P
  176.    * @param $table
    4 S7 E5 ^, t. l4 G- @
  177.    * @param $key# f* H& b6 y6 R
  178.    * @return array
    " w7 S$ A7 ?3 e
  179.    */
    ) n; r& o9 O$ {( a- Z6 E$ S1 G
  180.   public function distinctData($table, $key, $query = array()) {6 j) @! F8 F0 g
  181.     if (!empty($query)) {9 i: K/ G& _' e; R1 f: q' M1 v
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 b& f1 f, s4 K) r, y( ^! `$ M
  183.     } else {( F, p3 W7 e/ L: S- x' s1 o* V& F) Y
  184.       $where = array('distinct' => $table, 'key' => $key);
    & ?/ ^: \& ?; D1 V: \
  185.     }
    7 X; z3 z6 Z# c: E( C$ E/ i) _  s
  186.     $data = $this->database->command($where);
    7 i$ T6 d1 R1 `# c" [6 q
  187.     return $data['values'];$ S5 ^2 Q: E7 b: G* i; S# a) M0 R
  188.   }
    # ^  R7 C6 \- `0 y  L
  189. }- H& j0 w, q) `0 {& N$ \
  190. ?>
复制代码

  `* a+ A; p  W4 a/ g( q1 X: k; w. h
- ^& A9 ]8 f, s. w. y




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2