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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。8 H9 r3 f# @) N# n
模式自由。
2 r3 W) M  r' T4 J; j# S6 f, g支持动态查询。8 H. ~" v5 l! ~
支持完全索引,包含内部对象。
4 l6 R0 ?6 e7 [3 h$ Q支持查询。: C0 N% A' {3 b  s. l/ C
支持复制和故障恢复。- c! J: O+ S/ Z: t
使用高效的二进制数据存储,包括大型对象(如视频等)。
! j, U. S# {- e: O自动处理碎片,以支持云计算层次的扩展性# U0 ^$ S+ J0 o' L
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。* _" r& @$ H/ v
文件存储格式为BSON(一种JSON的扩展)
: H4 q! c5 l# C; i可通过网络访问

所谓“面向集合”(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
    9 D4 V3 {3 d7 q# |7 g# F
  2. /**
    " p. ?+ P3 s2 X6 i& ~) n8 U
  3. * PHP操作mongodb数据库操作类
    % |0 [4 @& p; f+ @+ U4 ~/ e9 W/ E4 L
  4. */
    / S5 Z" ]3 r5 i
  5. class Database {
    7 P; W" u+ T3 ^. t# c2 ?" C
  6.   protected $database  = '';
    ; P; v# D) h4 U, ]
  7.   protected $mo;
    ) X5 H7 z8 R' l: N! T6 p
  8.   /**
    - z- Y, H+ \' g! S
  9.    * 构造方法9 Q. I+ p( ?3 d
  10.    */
    7 G8 j. T+ b8 G
  11.   public function __construct() {  O# I( T; e/ g
  12.     $server = DBSERVER;
    ) o% w6 B$ K+ s( k
  13.     $user = DBUSER;
    ; e! z5 a) n) w  p! b8 D3 `. G
  14.     $password = DBPASS;
    ' S& G( o; f/ F- L$ [, i
  15.     $port = DBPORT;/ @" |" S* t; C/ \/ [! u
  16.     $database = DBNAME;7 o. ]& J& L6 @# P6 ?  Z
  17.     $mongo = $this->getInstance($server, $user, $password, $port);8 }* {. @" r/ |' \0 n. A2 ]  ^
  18.     $this->database = $mongo->$database;2 F% u! ?) t, O% u7 y) }( ~% _
  19.   }9 ~& K% o  P" E4 B% z
  20.   /**& s! O8 o  C0 z* [- \" h, b
  21.    * 数据库单例方法
    8 ]0 \: S: M* P: S3 B
  22.    * @param $server6 q# \# A+ N3 [7 |8 O  Q6 V
  23.    * @param $user
    5 t8 r/ N. n/ a* Q% T. [
  24.    * @param $password
    7 a  |0 r9 `" }8 |( J! p
  25.    * @param $port
    / K) q" x9 Y: Q. w  _" j( ^; }
  26.    * @return Mongo" m7 }* v  M; N( O7 O8 L
  27.    */9 b! b! S% N7 j9 j# c9 |  n# t# w  _9 X
  28.   public function getInstance($server, $user, $password, $port) {( l0 q" {2 M* Z4 h; h( Z, [$ d& Z! @3 H
  29.     if (isset($this->mo)) {) Z, M$ Q: J2 P# j
  30.       return $this->mo;
    % W! a7 n& a4 X7 B3 j/ X; q
  31.     } else {3 @/ s' s0 f% W+ E5 K) a
  32.       if (!empty($server)) {2 o" l1 U1 ?* t! D& x( y# W- B
  33.         if (!empty($port)) {; f1 r( r( l3 I( m0 C
  34.           if (!empty($user) && !empty($password)) {
    : Y1 I0 K2 E! L" y
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    : R( t/ o3 U6 v+ r8 z2 K
  36.           } else {! w  p! _2 B6 A( i6 ^
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    8 i5 G1 _1 ~5 g  z& k5 ^
  38.           }: d' ?& ^8 c: n0 o  s, _( @6 d
  39.         } else {
    4 r1 z( u7 h7 P; \
  40.           $this->mo = new Mongo("mongodb://{$server}");
    1 ~( V, w  i0 m8 V
  41.         }! i. |) h: `2 l8 m& g4 R7 @
  42.       } else {' k- m6 U8 V; D2 E, n! R- {  ?
  43.         $this->mo = new Mongo();
    6 A9 X$ S2 o' i. d0 f" w
  44.       }
    : `6 s) E8 ?7 i- o9 Y
  45.       return $this->mo;
    $ ~% m; V: v% N" _, [2 v8 x: e
  46.     }: k% d1 e* D' J& o
  47.   }
    2 P5 C* V2 L2 T& @! }: C' ~
  48.   /**
    7 [; D9 H) T5 F- A# _, r2 K
  49.    * 查询表中所有数据5 G: F1 c4 z) F- I. s2 c# M1 U+ X
  50.    * @param $table
    * e8 z+ t, n$ @
  51.    * @param array $where
    9 e8 N4 Y. K+ K9 M7 C
  52.    * @param array $sort
    0 Y7 Q& u; `7 [( f+ W' N/ v( t
  53.    * @param string $limit1 q# _) J- m; G4 O  i+ _
  54.    * @param string $skip
    2 Q8 R% ?7 M/ d* {( ?* G5 ^
  55.    * @return array|int
    ; G% f+ ^) k3 q, p+ N
  56.    */) i  E3 }" C: _' o( Q3 L4 I/ W- L
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    / u4 C- v& O9 H+ h
  58.     if (!empty($where)) {
    / N9 |+ e( y  {" _
  59.       $data = $this->database->$table->find($where);
    + G4 o; y, _5 g, o( Y
  60.     } else {3 D$ o- ?- D2 W
  61.       $data = $this->database->$table->find();
    $ F6 q4 `7 ?' H$ U
  62.     }
    ! M, r$ K7 h% V
  63.     if (!empty($sort)) {1 B+ N1 m5 Q1 c6 }- b/ m( m7 e
  64.       $data = $data->sort($sort);
    4 R9 c7 \  E" F" D/ w8 h5 [9 a5 j
  65.     }7 H3 c" [  @4 n. N' o" \# ]
  66.     if (!empty($limit)) {; j' f9 A) F+ b0 @
  67.       $data = $data->limit($limit);  |0 p4 m6 Y: O
  68.     }
    + K' \) P) F+ ~
  69.     if (!empty($skip)) {( e9 s4 ?, t& Z& S+ j" U
  70.       $data = $data->skip($skip);2 l' i% j8 i" [8 D1 X8 n- v, s" X: Y
  71.     }
    4 L7 D. |9 j( k1 }) ?. c8 ]
  72.     $newData = array();
    % |  j- G0 {4 E1 f( _9 L
  73.     while ($data->hasNext()) {
    , T& q; C( D2 M7 }6 E1 y5 K0 _4 K2 h
  74.       $newData[] = $data->getNext();
    & x8 f& X; t7 @2 x' F9 w
  75.     }
    $ ?' X2 g: |( R1 w
  76.     if (count($newData) == 0) {! Q$ J# q$ ?8 B( a' `
  77.       return 0;
    ( y1 w. T9 u1 f
  78.     }1 _5 a, `1 H  c
  79.     return $newData;4 [' f$ N8 k: \; l/ Q* S8 G7 l' t
  80.   }; `/ m  n4 g4 r3 h7 B- x
  81.   /**
    * x2 E" A) |4 ?. d- z6 T  F) [  n
  82.    * 查询指定一条数据4 R4 E, c- D& b+ u
  83.    * @param $table
    2 k( m1 f. u# V
  84.    * @param array $where
    4 b6 h; _4 B7 O  ]3 I+ Y  o0 x
  85.    * @return int
    ( g7 }0 a. J) ]2 ?9 C( Z
  86.    */
    6 K3 t" j& j9 D. \
  87.   public function getOne($table, $where = array()) {- K1 U0 M- P2 T! ~3 D0 f
  88.     if (!empty($where)) {! R) |' B1 V$ c( P
  89.       $data = $this->database->$table->findOne($where);
    , P) Y! K) a, O" U  y. ^
  90.     } else {* l' G5 ?5 z9 l! c7 H5 c  g
  91.       $data = $this->database->$table->findOne();  y2 B9 q/ z% y7 p5 P; ~
  92.     }
    1 N8 y1 b* p8 d
  93.     return $data;/ p+ V: D& Z- X
  94.   }9 d$ m8 }5 Y0 h; ^- b2 K
  95.   /**! ]4 y1 C$ {- D4 n
  96.    * 统计个数
    4 [& b% a; [6 R. e: C
  97.    * @param $table1 V" e' R2 G; r1 b
  98.    * @param array $where
    4 O4 L/ q4 H) @) p8 i" `: X8 _9 s
  99.    * @return mixed
    - c$ p3 T* ]+ f
  100.    */. h. Y8 a, g" ]5 _: [$ _& Z/ @  I
  101.   public function getCount($table, $where = array()) {
    4 u& @! W: }& U# W) F& S
  102.     if (!empty($where)) {
    2 H1 U2 U' W% J) Q
  103.       $data = $this->database->$table->find($where)->count();
      ~6 _' L- |: s# J: X; z' z* \
  104.     } else {
    $ R$ b2 i' D9 M+ F# [% k& ?
  105.       $data = $this->database->$table->find()->count();
    $ k# x& O, o3 M3 T: j9 T5 K
  106.     }
    8 k$ N7 M: m6 b" _; w
  107.     return $data;5 V  j" B- s8 I+ f
  108.   }* |3 {/ Z' [. x6 c7 ?
  109.   /**
    ' \+ T* f1 E: L$ `, N" K! f' c
  110.    * 直接执行mongo命令) J# N0 X5 X$ l) |) m
  111.    * @param $sql. M! U$ z; ^# y4 J/ W, M% ?" Z1 N! p
  112.    * @return array4 v# r& H% \9 l  Y
  113.    */4 o, e+ a  N5 R4 D9 ]0 S
  114.   public function toExcute($sql) {
    , R3 G" ?1 z) R0 F4 _
  115.     $result = $this->database->execute($sql);: l( m6 ^: {" i# y6 s
  116.     return $result;
    " G" l" h+ }7 V, D, K9 A$ R6 H
  117.   }, B% ]. f1 U- L( n5 t$ ~1 J
  118.   /**
    4 B; h0 n9 l! _
  119.    * 分组统计个数' h: C5 n% N! U$ }8 M
  120.    * @param $table
    9 |. f5 g% T2 @- g/ U& b
  121.    * @param $where
      g' o- w5 V  i4 N: X4 X$ y
  122.    * @param $field
    9 E/ u( ^0 p! z) m
  123.    */
    % D) {7 X! o$ W4 L& e
  124.   public function groupCount($table, $where, $field) {( J, z. i2 Z2 I7 c
  125.     $cond = array(2 [* G, [# u- d; A3 E' A
  126.       array(
    ' H7 K. z! `1 p0 z
  127.         '$match' => $where,- P( C# j& N6 q4 G+ T" K0 n
  128.       ),( I0 D, r6 @6 ?) Z
  129.       array(
    ( g) {+ a! f9 @6 k
  130.         '$group' => array(
    . v: ^, K) l) S" l8 e; {
  131.           '_id' => '
    # B7 m8 n" Y- T3 r. L5 r. T4 M0 G
  132. 9 a" I7 `, l$ B1 I! N- o/ `
  133. . $field,* o1 v0 E8 D9 I! ^
  134.           'count' => array('$sum' => 1),
    8 u3 M2 `) E4 X
  135.         ),( o+ a; X+ A' b$ y
  136.       ),& R- O! }- n- `) O9 f; Q
  137.       array(
    ) p9 c% I$ N" q# B( `( J
  138.         '$sort' => array("count" => -1)," i' g2 `+ }" m; z) K9 \+ W; K
  139.       ),
    6 B" f9 t) B/ b' @! F7 u4 L
  140.     );* a4 M% p# T8 \& _
  141.     $this->database->$table->aggregate($cond);, f, L* B) ]9 O& r
  142.   }% D9 L7 t3 E6 N$ y) x# M
  143.   /**
    6 R- `5 T/ C5 F! \& i# H" V
  144.    * 删除数据% o, ]/ v9 X1 Z8 ]  L7 v
  145.    * @param $table
    7 {4 I$ Z) G" `
  146.    * @param $where
    . d( B) B2 e* a; \! l
  147.    * @return array|bool
    # w  o6 w  {+ J5 e
  148.    */
    - n3 d4 ?6 l7 F
  149.   public function toDelete($table, $where) {$ T% V, [/ C. b  y4 V# _$ p
  150.     $re = $this->database->$table->remove($where);0 h: Z3 F- W0 [
  151.     return $re;: L, G6 g. T& l+ B
  152.   }
    6 Y! H! Q7 M9 _) R, A" u( b$ h" t
  153.   /**  x+ i. H4 s" p* T. u) E
  154.    * 插入数据
    , i. y% Y  c- j% s' E. b, Y" W8 ?; @
  155.    * @param $table: B: Y: I& \' d2 j& \
  156.    * @param $data* \# T8 l: Y& U! A" `
  157.    * @return array|bool
    - C9 }) @3 W. u/ x% ]0 E7 _. ]1 B0 [
  158.    */
    0 f/ d7 s9 `4 R- c6 B( {
  159.   public function toInsert($table, $data) {$ |1 i* t: ^4 S# n& j2 }7 N5 g
  160.     $re = $this->database->$table->insert($data);3 X1 ~' R) w* A. Y0 w1 u4 o
  161.     return $re;3 v, I, E  R( y
  162.   }
    " T5 R! k; U8 Y7 I. f5 }4 Y
  163.   /**
    " u8 S3 _( l. Y8 ~
  164.    * 更新数据
    / i; N% |1 I& ]$ t( {
  165.    * @param $table
    3 k/ o) x2 i5 r9 c( B" F* j
  166.    * @param $where
    ) ]  j! P  p5 {  L
  167.    * @param $data: X" [- ~* A- E1 f2 b
  168.    * @return bool
    , r; R: c; w) ]
  169.    */0 Y1 I" N, p$ \% p6 H4 E
  170.   public function toUpdate($table, $where, $data) {: T1 e" C4 M7 ]
  171.     $re = $this->database->$table->update($where, array('$set' => $data));0 _6 U+ Z# [0 ^; p' X
  172.     return $re;' B; e( n% L1 i4 z) H
  173.   }- y  e: {/ N7 a0 O- _1 ^0 j
  174.   /**& `0 h$ n, @2 W# f- p. S9 j3 b
  175.    * 获取唯一数据* L/ G* f8 r* [. {7 A+ p
  176.    * @param $table0 I. H* R1 X3 u! v( ?7 |
  177.    * @param $key* i' ~2 U9 K, l, P# V$ I
  178.    * @return array
      P8 e- I" j4 I
  179.    */
    / e. U& l7 C8 Y5 O1 x+ O/ I
  180.   public function distinctData($table, $key, $query = array()) {' ^6 O$ P2 R* |* q9 D
  181.     if (!empty($query)) {
    2 |0 S  z& v. K3 R2 [9 B/ H
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    . x6 r; ?6 R0 b, {6 D- _3 _
  183.     } else {
    " T2 r6 Z4 ^7 f% J/ `! W: R
  184.       $where = array('distinct' => $table, 'key' => $key);7 z8 ?) A5 i7 A5 o$ u
  185.     }& V! H6 {$ V( Q8 j
  186.     $data = $this->database->command($where);4 t' R: o( f5 H8 v/ M- x
  187.     return $data['values'];
    4 p5 R/ h% g$ s) [1 m; v5 c
  188.   }
    , j. \  j0 ^: H' m; ~" v
  189. }9 O4 t7 T( c* N6 Q
  190. ?>
复制代码

( ?. M( k- M7 R$ }* H9 Z0 I& ?- V0 y3 {0 W0 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 14:58 , Processed in 0.112179 second(s), 20 queries .

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