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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
7 I" `* c3 c& D' y1 @& c模式自由。% ?  W9 O' F. Z4 [$ A
支持动态查询。
+ `6 D0 ]) \+ o8 Z* s# R! ]支持完全索引,包含内部对象。
+ u! m7 Q/ I; {8 ]支持查询。; ~( \9 j1 o+ ]0 W# _; b* E7 S
支持复制和故障恢复。
8 i1 {! w# G  `2 c* d# y使用高效的二进制数据存储,包括大型对象(如视频等)。  K& V2 E% @( |
自动处理碎片,以支持云计算层次的扩展性
+ [1 s' E/ f5 e" A支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。, p* G. h7 u& S, d2 X
文件存储格式为BSON(一种JSON的扩展), n2 y  Z) U- r
可通过网络访问

所谓“面向集合”(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- `" a8 ~" B4 O: z+ A
  2. /**! A! r; I8 _+ \* B
  3. * PHP操作mongodb数据库操作类: F0 Y/ k- l# L( \
  4. */0 R2 u8 x* L- f4 X
  5. class Database {
    5 a* V& W1 C3 d, K( Y( Z2 ?
  6.   protected $database  = '';- o( k5 \$ x; |9 V
  7.   protected $mo;
    3 `7 d9 y! v0 i
  8.   /**
    7 K2 A/ g* ]9 ?/ ?( j
  9.    * 构造方法$ _3 j! E+ n! O; ]" B
  10.    */3 t/ A0 k$ B; C! C
  11.   public function __construct() {
    * ~# F. y4 u! C- t! V
  12.     $server = DBSERVER;
    3 U, L' o! ^& p; F+ G
  13.     $user = DBUSER;
    3 w7 D! {& |! {( [
  14.     $password = DBPASS;* a) O/ T4 I3 g& Y" |7 i4 p, ?/ Y) t2 ^
  15.     $port = DBPORT;) K  D2 O% K0 ^
  16.     $database = DBNAME;
    & c' m0 w/ |) T7 `; w& H
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    % U! N9 w9 d7 ^" x; p
  18.     $this->database = $mongo->$database;1 Z/ f4 ?, D* S, R
  19.   }' k' X% n1 B" O# J
  20.   /**% k5 C6 M( l  m8 t$ C  Y; s
  21.    * 数据库单例方法
    # Y+ B1 m+ [. k: L+ T: i0 F: i) m1 M
  22.    * @param $server
    ; ~5 K) ~$ o8 s+ ~1 m, J  x, @
  23.    * @param $user, h0 x  \* a* B! X
  24.    * @param $password
    7 y7 d0 L& z& I* j& z" ?
  25.    * @param $port4 f1 _$ K( n. @# f: C
  26.    * @return Mongo/ s. U# ]2 V/ i- o3 b0 o
  27.    */! E& E% k+ J1 \
  28.   public function getInstance($server, $user, $password, $port) {/ ?1 z4 A0 }1 \+ z' D& I' _: @
  29.     if (isset($this->mo)) {
    3 l4 R6 J* ]% a2 E# k/ u# `7 \( p
  30.       return $this->mo;
    2 x2 C$ b* s. f! Q4 {
  31.     } else {' j. |5 \( Z0 W) |! a: G$ W
  32.       if (!empty($server)) {
    9 U- c* u$ f* e1 \/ C9 M3 A3 x) @, q
  33.         if (!empty($port)) {
    1 D1 s' f& o8 X
  34.           if (!empty($user) && !empty($password)) {' a9 f- A5 z" H1 {& u3 H5 F  n! T
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    9 C1 o8 F* a7 E" `% V. |
  36.           } else {- r8 M, e! I4 x/ F9 K- b5 r. y; t
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");: P  J  r* j% x1 g
  38.           }3 G4 C4 ?# w. m) r) W2 |
  39.         } else {
    ) @  N& M0 i9 @. _! ?( y6 R2 C
  40.           $this->mo = new Mongo("mongodb://{$server}");
    0 ], q: Z4 r& _8 z# g& ?
  41.         }
    ( f1 r, n0 Y7 i3 }/ \
  42.       } else {
    " w3 {, o5 E) }0 q
  43.         $this->mo = new Mongo();
      H; f+ T( T9 c) k+ G5 j& D
  44.       }- T$ H- l- A! G, x# P5 i
  45.       return $this->mo;
    5 @7 G# c& r# v& |8 x4 I/ g
  46.     }
    1 B! `" z3 C+ I4 Z5 m
  47.   }
    4 U8 f) M, N4 o& [2 S* r
  48.   /**
    - {1 Y( _; I& Y# S7 h
  49.    * 查询表中所有数据9 b, L4 @2 D: I& ]
  50.    * @param $table# {. s0 W! \1 P
  51.    * @param array $where
    ' Z8 r0 X- m; `9 V9 }' A
  52.    * @param array $sort# Y& }  }0 G! O. O/ }& I7 M/ R4 E
  53.    * @param string $limit
    ( b7 b$ l4 U0 C7 U& l6 ~, G
  54.    * @param string $skip- z+ s) W5 S5 I" v
  55.    * @return array|int. g7 L9 q' y/ N5 J
  56.    */
    . d8 g* a% B% ~& a1 ~; v3 }
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    7 H6 n4 y0 c( H" U( ~* G: H
  58.     if (!empty($where)) {
    6 Z0 c3 v, \* Z& \) v
  59.       $data = $this->database->$table->find($where);4 P0 L; k- s& S6 z
  60.     } else {: n2 c  }, N9 v1 f  x: {0 s
  61.       $data = $this->database->$table->find();$ Y; U( U- i' u+ k4 W
  62.     }
    . {$ O4 f" f/ x& c
  63.     if (!empty($sort)) {. C3 N3 i1 G7 L( K. U
  64.       $data = $data->sort($sort);
    + G) `# `. m  X* m& v
  65.     }9 f( H( c1 c; c( ]  Q% P# Q
  66.     if (!empty($limit)) {) o1 Z$ O4 f. X& ]; H4 E
  67.       $data = $data->limit($limit);* H5 @5 C  b0 }$ }5 e. E2 i
  68.     }' Q+ p4 q. {0 p! E, M
  69.     if (!empty($skip)) {& B, Z7 q+ S0 c  M  R1 L$ h
  70.       $data = $data->skip($skip);+ F; f1 |" ]9 M% N
  71.     }2 `, P* A% f# V# ]7 m* h  g
  72.     $newData = array();
    7 k* }- r# k3 `8 g+ n4 Y
  73.     while ($data->hasNext()) {, x$ m& O# u9 `* F
  74.       $newData[] = $data->getNext();
    ( K8 X# m9 U* R" A+ E% q) ^- n
  75.     }
    % `$ X) Y) A- D& C
  76.     if (count($newData) == 0) {! Z( P' ?( ^. Z4 V
  77.       return 0;
    $ \: {$ D- d' z' P( T: f
  78.     }9 q2 ^' W# C2 J. r( d& R' L
  79.     return $newData;7 K( @* \" Q; h& o  d& D
  80.   }1 u7 D- K9 F/ r, w0 e- b0 }
  81.   /**
    ) \9 o- Y0 b4 V. e: B) K
  82.    * 查询指定一条数据5 U8 |- G% u: C) f
  83.    * @param $table3 I% t5 N' Q  W1 d6 K
  84.    * @param array $where$ `0 G: {" \6 d
  85.    * @return int* b7 ?) M3 l. G8 L; C
  86.    */
    : j: _& Z5 \3 w4 }
  87.   public function getOne($table, $where = array()) {
    , D& d/ E( b/ b1 I2 u" s4 X
  88.     if (!empty($where)) {& X2 s  @/ m+ Z4 P6 w+ b% Q( K( n: c# [
  89.       $data = $this->database->$table->findOne($where);, `7 f. ]( d; s2 Z% z+ r
  90.     } else {0 u8 i" \8 h9 [1 p
  91.       $data = $this->database->$table->findOne();5 ?# n5 O7 }, V) @/ K& k
  92.     }* p) _5 Z2 _' E9 m" ~9 C
  93.     return $data;" J1 `8 `( Q; `
  94.   }' l, N4 I# Q- R
  95.   /**
    ) p4 U: {8 I/ ?! M
  96.    * 统计个数, ]3 y0 F9 |; b
  97.    * @param $table
    . D" V: O- j% }" m8 J8 Q1 R
  98.    * @param array $where
    * \* t( ~  u0 g. o, O
  99.    * @return mixed
    ) H+ R$ c& ?- X. Z
  100.    */- T+ p, D3 ^% h. n
  101.   public function getCount($table, $where = array()) {5 K1 G1 K' H% l$ o- w
  102.     if (!empty($where)) {' w# t7 i# d5 q1 f; Z' F' k3 {, J8 t
  103.       $data = $this->database->$table->find($where)->count();
    $ U/ Z. [  L; U3 M) ?
  104.     } else {
    + c# u* Y+ H* \: b  ]- f
  105.       $data = $this->database->$table->find()->count();
    1 D( A' `$ ~' L1 m* ?
  106.     }
    : {9 l5 @4 d9 A2 C! e
  107.     return $data;1 `; u$ E: G/ n6 Q
  108.   }
    4 p$ E( W& u& W' x0 l
  109.   /**
    7 M: v' u1 R: d- P
  110.    * 直接执行mongo命令8 P$ s, H) I2 _$ \; Y
  111.    * @param $sql
    % O1 z) S$ S+ U
  112.    * @return array/ m. {7 N, T7 x$ O
  113.    */
    ! A6 c4 o1 S4 @1 y& s2 e( Q0 e5 Q
  114.   public function toExcute($sql) {6 y+ q0 q' e( |" ?- R
  115.     $result = $this->database->execute($sql);
    / i$ T" {  j+ D' `3 I. c: m
  116.     return $result;
    2 v' O) |% a+ Q- C
  117.   }
    6 L) |( c, {7 m; W
  118.   /**
    8 X$ w) N! A9 p  b' Y
  119.    * 分组统计个数
    9 n0 y- l( U% w7 u+ E
  120.    * @param $table
    1 f: i  t" B2 C
  121.    * @param $where
    9 W/ ^' W" m, u. ~
  122.    * @param $field
    2 C6 J2 x$ g; _4 o/ O$ P( z
  123.    */# k7 |* h4 n. d5 [
  124.   public function groupCount($table, $where, $field) {
    ! r1 b& t- K3 u' q2 {+ Z
  125.     $cond = array(
    6 {5 x, ?$ f# r4 J! ]6 G! }8 @6 K
  126.       array(
    2 a* ]1 J) S! ?
  127.         '$match' => $where,
    # G4 C& _. F% N, F$ U
  128.       ),
    " A# U8 ~' T1 t% M. M
  129.       array(
      P% @; F) Z' {
  130.         '$group' => array(6 |6 t. I2 m  c, f( @) t
  131.           '_id' => '- K% u2 [7 K' a7 T: G9 g& M
  132. , W$ J" B. q4 z7 j6 t
  133. . $field," ~" Q% ?3 E6 t) T2 Q
  134.           'count' => array('$sum' => 1),
    2 c, g$ ?$ c2 A: c( D1 w
  135.         ),/ E7 m! q% q3 \' H- g
  136.       ),' d2 z* x6 H0 V- Q, H. n
  137.       array(( K. {5 s& j1 P4 P  ~
  138.         '$sort' => array("count" => -1),
    8 u3 c# F+ }4 C- s4 S6 C9 Z0 I
  139.       ),
    / n) p! w' e" ]
  140.     );4 F% }/ B( x! B/ m- {+ [
  141.     $this->database->$table->aggregate($cond);
    ; W( b, `- P% x7 i9 t/ y
  142.   }
    7 B( E. ?! x( T& v+ Q
  143.   /**
    2 l$ e- @0 _) O
  144.    * 删除数据8 I# f- ^- K$ G+ r, p3 q
  145.    * @param $table
    , z; j/ [9 `; T/ d! Z
  146.    * @param $where
    . Y' v6 K6 R7 X! O% O: `) P7 ?
  147.    * @return array|bool
    " x: ?  j3 }% C) Z3 G0 a7 C- _
  148.    */; p8 T; O2 l# i" ]" N+ L% C
  149.   public function toDelete($table, $where) {" m3 T. A+ Q9 p! G$ W# H
  150.     $re = $this->database->$table->remove($where);; e. M% V. s+ s, p2 R4 _
  151.     return $re;
    & s9 N" {( D$ E: d8 p
  152.   }
    ; ^9 i  _$ Y& f% H% e
  153.   /**1 |0 W# c& c$ F* Q  }
  154.    * 插入数据4 [, k7 R- [4 ?" @' ?% p0 A
  155.    * @param $table" o2 v& j  X3 V5 X1 b
  156.    * @param $data" w" ]6 B0 i+ V0 f5 \2 J  S
  157.    * @return array|bool& ^/ N# q- a; v' h
  158.    */
    5 n6 e0 A$ ]8 F) n& B
  159.   public function toInsert($table, $data) {! z: o2 A$ i6 Q* A
  160.     $re = $this->database->$table->insert($data);
    2 P% _7 G) T# u& B. k5 _
  161.     return $re;2 ]! v; r5 |5 v& R6 J( K6 h
  162.   }
    , I+ A$ J# X( X3 K& K' @3 h' j
  163.   /**
    ; j0 ~! `3 a. g
  164.    * 更新数据
    & U6 O. t3 ]5 o9 F  {* K
  165.    * @param $table
    0 S) `+ q% T" Y, c) S% T- j' l7 G* ^8 N
  166.    * @param $where2 p  U3 I7 v6 G
  167.    * @param $data5 f% d7 ]6 C) J' Y
  168.    * @return bool
    / g6 t7 l; \) _6 e
  169.    */' [  Q3 Q! C; p
  170.   public function toUpdate($table, $where, $data) {
    3 U" g; C- A3 _! v( N  P7 \  c1 o( P
  171.     $re = $this->database->$table->update($where, array('$set' => $data));; _2 U0 @1 w: w0 ~
  172.     return $re;
    # e/ l# o: I5 X
  173.   }
      ~$ r# g% d/ ?) U* A
  174.   /**6 l' }! \9 L* `8 w! T
  175.    * 获取唯一数据
    , h4 Z. k" `# F
  176.    * @param $table
    0 V: V, X) x0 j7 _! H: w+ W* u  h
  177.    * @param $key
    8 h/ e3 R0 J/ g# ]0 I
  178.    * @return array
    6 |! o: |' {) a3 F) g
  179.    */
    , N3 x: T( K! b- y
  180.   public function distinctData($table, $key, $query = array()) {
    ; _& D+ n4 @4 Y# b8 E
  181.     if (!empty($query)) {
    * P" o9 s1 U" E' ]' _1 e
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    8 z, ~. o% n. ~2 t% t, G
  183.     } else {
    + ~. f( j* L/ T  z- Q! Y
  184.       $where = array('distinct' => $table, 'key' => $key);
    " s2 s2 Z& D4 S2 D. [: u5 S/ l1 P
  185.     }5 P4 J2 A  @2 ]2 r
  186.     $data = $this->database->command($where);& ]$ y" |: f, j, n: c. y: W
  187.     return $data['values'];& K2 l6 a/ Y4 D  U
  188.   }
    " d( Q  x# }& \. M2 S0 ?: L
  189. }
    ' w( y. I1 b  v# ~9 [# A% e0 A) q3 x
  190. ?>
复制代码

; W) T2 X, H; x( P4 N
/ B; ?# O9 D; p! r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 22:04 , Processed in 0.068756 second(s), 20 queries .

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