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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
( m7 g" B' R6 z0 l" X. n  j模式自由。
/ T5 z; f- k% D3 N支持动态查询。0 r; O6 e/ x  J( @# @  `
支持完全索引,包含内部对象。
) o) H2 c" C! w3 R支持查询。5 ~, L( G5 ^$ M+ o7 z0 C0 N' ^
支持复制和故障恢复。, }4 z& L( O6 T0 }6 U' U$ N+ Z
使用高效的二进制数据存储,包括大型对象(如视频等)。
9 D8 `1 A! @2 L6 M" {: X自动处理碎片,以支持云计算层次的扩展性
3 ^& f4 L& k! Y' \" ]( d支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
* Y! `! P! ?- m: m: Q' b/ \文件存储格式为BSON(一种JSON的扩展)
. b% p# i7 q: R4 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
    1 T3 x% q1 V  V, f& u' I% g
  2. /**) J7 c/ U# H+ V' _! W+ V
  3. * PHP操作mongodb数据库操作类# P5 o' j9 U' u4 U" b, u2 R, b
  4. */
    9 X9 @+ A+ {7 [9 }8 M: ]
  5. class Database {
    3 j8 w) g" A( N8 S1 e
  6.   protected $database  = '';
    3 b2 x% _: B3 Y: e! D
  7.   protected $mo;
    2 b: [! ?$ |: C+ W% x% R8 W
  8.   /**
    / f0 t  h9 G* D  F$ q
  9.    * 构造方法
    9 M4 q9 i6 I7 A# w, H
  10.    */, i, q: E0 A7 x2 d, M
  11.   public function __construct() {# X8 F5 x2 w: g, ]5 k" |1 J
  12.     $server = DBSERVER;- i/ `/ d% U$ e- Y. |8 p6 T
  13.     $user = DBUSER;
    ! I# A! ~; U* u* L7 y; w
  14.     $password = DBPASS;
    4 }5 y, }7 |, h* L+ I3 e/ Y! h+ K
  15.     $port = DBPORT;
    * L6 N* D4 y7 L7 |
  16.     $database = DBNAME;; d# i) d8 _4 R$ A% r+ q9 }
  17.     $mongo = $this->getInstance($server, $user, $password, $port);" R  `8 p3 U' P# f
  18.     $this->database = $mongo->$database;
    % A/ l, O6 A4 D# L
  19.   }
    1 [+ @% n% {4 s4 a) [
  20.   /**) p. m! k# Z' o
  21.    * 数据库单例方法. I# _! H2 e" S4 a( w4 V/ I6 Z% J# U
  22.    * @param $server
    4 N0 i) n- T) e& z1 D  }$ M  ]
  23.    * @param $user
    ( J0 @/ N0 R% D; x3 o- \9 w+ w  k
  24.    * @param $password
    7 c0 j! x, V" `5 C
  25.    * @param $port, y3 I2 d/ P. U) b3 U
  26.    * @return Mongo; r+ f* T. O! @; ]( b
  27.    */2 B* I5 V, L5 X' y
  28.   public function getInstance($server, $user, $password, $port) {8 o2 U, N+ y3 w8 ?" r" i& v
  29.     if (isset($this->mo)) {: e0 @$ M6 M0 k, P( G6 h7 d) C# Y
  30.       return $this->mo;
    4 n) X% J5 }( K( e; ~+ A
  31.     } else {
    ! K# V; w& o, l5 c
  32.       if (!empty($server)) {! t2 I2 a3 T8 J3 o8 i* N
  33.         if (!empty($port)) {
    . U- G; E6 F: {) y. H
  34.           if (!empty($user) && !empty($password)) {
    6 P1 C1 _% [, w1 u
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    * ?# P! R8 d1 t
  36.           } else {
    1 q9 _2 h$ A  C4 M! l
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");* t9 _  n$ o4 t: I$ @+ m* Q( u( z. z
  38.           }
    ! o6 E6 C/ l1 [9 @. X* y
  39.         } else {
    & q/ t% q! \3 z3 K6 B" L( S
  40.           $this->mo = new Mongo("mongodb://{$server}");0 O2 L3 L# H6 e9 ?8 H* a  m- @0 p; \" E
  41.         }
    - Y5 y; v/ q5 e9 T/ z- r5 U
  42.       } else {/ q6 t1 l5 H" f4 F
  43.         $this->mo = new Mongo();
    3 ?9 B4 B6 N' H% S8 k2 j% E  R1 p8 U* N
  44.       }: }+ M' a0 Z$ `3 V+ ]" _, o& n
  45.       return $this->mo;
    . A& p/ v) Q5 L) S9 m
  46.     }
    - j( z3 g4 M- l& |! W7 ?
  47.   }
      W+ r: h9 j' w0 J% L, I
  48.   /**9 F4 y5 |' M* d3 P7 p+ ?& b
  49.    * 查询表中所有数据: B0 Q2 G8 f7 H* I% ^( q
  50.    * @param $table& d5 c$ U+ a+ n, \, o: k1 m1 V* U
  51.    * @param array $where3 ?* E5 P/ d, h& L& D0 O" @0 ~! _" t
  52.    * @param array $sort8 w, E. v; z) ~9 A
  53.    * @param string $limit5 Y0 r- E- I5 V# P$ D$ D
  54.    * @param string $skip5 a8 W, {, a" c
  55.    * @return array|int6 X! z5 h$ l. r! ~
  56.    */. E$ J' r5 ^# X3 d* ?, ]
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    9 T  p  {# O/ e1 W- R
  58.     if (!empty($where)) {
    $ R* M( O. \, V8 s4 d# Z2 }
  59.       $data = $this->database->$table->find($where);$ ]. m8 U5 _' H
  60.     } else {/ H' K- }0 ]8 [. V- Z/ p* k
  61.       $data = $this->database->$table->find();
    ; O6 C$ T, ]: X" V7 V
  62.     }5 m% h0 M+ C6 L% O8 l: l  B
  63.     if (!empty($sort)) {
    - H3 \5 U7 `# t2 f! J2 o8 c
  64.       $data = $data->sort($sort);& N9 z1 L2 m8 x: W$ i( ~1 p6 Q
  65.     }1 O. z# J4 Z$ E- I
  66.     if (!empty($limit)) {, i8 @6 V8 L( H7 ?
  67.       $data = $data->limit($limit);
    , S: X2 G+ @. e
  68.     }# B- Z( a+ F) S, J2 t
  69.     if (!empty($skip)) {
    6 _3 Q8 a$ _* `! G/ x! {  O5 C$ c
  70.       $data = $data->skip($skip);
    + S5 f. Y5 x1 c3 N# h
  71.     }1 u$ R4 s3 i+ j7 R
  72.     $newData = array();' y9 }& }3 l/ h0 N/ K, I' v
  73.     while ($data->hasNext()) {) r/ {3 s$ m- k
  74.       $newData[] = $data->getNext();( o% a$ h% u  w) a  ]
  75.     }+ T6 T' v" J* I  y
  76.     if (count($newData) == 0) {
    . F8 p2 O5 c9 u1 n4 b0 B
  77.       return 0;
    / J8 d  J: T1 b/ R4 c9 K& v9 v
  78.     }
    # [1 u+ B( K$ q) V2 {, W5 h
  79.     return $newData;
    0 Z/ E1 j1 c6 f: [5 _
  80.   }
    / s9 g+ N! g8 r( H" l: m& t) {) K% j* [
  81.   /**2 W+ x2 u* p1 ^# J
  82.    * 查询指定一条数据  h$ Y* o' D/ d8 r1 h9 u
  83.    * @param $table( C! ]. [$ Q+ B- J0 b, _
  84.    * @param array $where
    ! K9 ]* o7 d% k" ?
  85.    * @return int
    - x. \3 ~4 W) R0 U5 D
  86.    */
    1 Q- ^6 a- i! }4 Z. C1 G  {
  87.   public function getOne($table, $where = array()) {
    ) G9 U) g7 H  y6 i# |4 O5 `/ n
  88.     if (!empty($where)) {# e9 n( r+ E7 [+ _
  89.       $data = $this->database->$table->findOne($where);
    & Q( L3 J6 O* H3 ~
  90.     } else {
    6 W7 {9 S# t/ i' @$ U& g0 ~2 M
  91.       $data = $this->database->$table->findOne();
    1 d! l5 }  m4 Z, I4 M& N) x2 m# j: t
  92.     }! S, g6 w/ ?- H& N( I' K% H
  93.     return $data;# h) w) r! s# }8 ~
  94.   }! q/ A! z+ W1 V# T. h. ~7 u1 X
  95.   /**
    & G- u6 Q, v+ P2 f
  96.    * 统计个数; h0 \  O9 j' z8 [5 v0 g
  97.    * @param $table
    ( g  \& K2 Q/ ]9 n1 G# D- j
  98.    * @param array $where
    9 }2 C& x, y3 [
  99.    * @return mixed8 G5 W& w0 p5 [& F0 _6 O# \
  100.    */
    " Z' m% W$ {9 o6 F* E6 A
  101.   public function getCount($table, $where = array()) {
    * H- H4 D& C0 j7 P8 m
  102.     if (!empty($where)) {
    3 p! [3 H; Z0 C2 N" I1 g1 P
  103.       $data = $this->database->$table->find($where)->count();& u' c) W; N( @$ S& A  i
  104.     } else {
    % i/ Y2 ?6 g& R6 m6 S2 z$ O
  105.       $data = $this->database->$table->find()->count();
    $ V& Y$ H& P* [
  106.     }
    7 ^7 B6 y: t& g) O9 Y
  107.     return $data;
    2 Z& o* U& u' o
  108.   }1 O1 _$ R/ D3 ~5 |
  109.   /**# n' a4 C. C: c+ m3 {+ I
  110.    * 直接执行mongo命令
      k! p' O. M+ M
  111.    * @param $sql
    : h" l- ]' |) H* `5 H# ~
  112.    * @return array
    + W; R# Y3 J' J; X& j) m" N
  113.    */* _% k/ a9 `  x, [
  114.   public function toExcute($sql) {
    1 A, I2 X7 {  v6 Y% i4 j  _
  115.     $result = $this->database->execute($sql);8 P$ U  W! m2 j9 Q% f, H0 A& X4 Z( d
  116.     return $result;
    7 J( n, C9 [' H) v! f/ e) p
  117.   }- c; m3 u- \6 X0 \3 {+ Z4 p/ E
  118.   /**
    , w1 n& r! x( T  c2 \. o
  119.    * 分组统计个数
    * k- Y) z' Z9 c6 U' x# t
  120.    * @param $table
    8 r8 K% _5 A9 }
  121.    * @param $where
    ; Q: D- Z5 `5 q4 {
  122.    * @param $field
    ' g- S0 I* T$ t/ ?9 Y
  123.    */% o& s5 w4 L2 S: Z2 Z! _' e
  124.   public function groupCount($table, $where, $field) {
    # D( T5 z  ]" T% N% K
  125.     $cond = array(
    8 s8 x4 f; u; |4 W+ L8 x
  126.       array(; S% M. v: G! S: N; p, @
  127.         '$match' => $where,2 l1 H  O: a' J. t: X# ]: x; {
  128.       ),# W" r, g; n: u" W" M- Z9 f1 H" E2 J
  129.       array(8 f4 r  G4 D9 l# z% {% L
  130.         '$group' => array(8 Y/ K2 z8 a% Y7 l  ~2 @
  131.           '_id' => '
    . \# ?9 R) O. }" C+ f. w  ~
  132. % r# j* ^# X- r' z! [
  133. . $field,& p7 y$ K) n/ G; }( d  O
  134.           'count' => array('$sum' => 1),
    & q! ]- G" k4 {/ v# H  [
  135.         ),
    4 J# g- \% |$ m. M2 g& [
  136.       ),
    # ^9 d6 ~* C" l" s6 c, _
  137.       array(
    7 ^: H! D2 N5 L) [& m! g
  138.         '$sort' => array("count" => -1),
    : A3 |% N9 y' \( a% `0 l6 W
  139.       ),9 I7 Z" Q8 m3 _& \
  140.     );
    ' u. @1 F6 b8 L3 c( c. C& [4 ?, z* a, x
  141.     $this->database->$table->aggregate($cond);* a2 c% `' _  w: q
  142.   }  f+ B# x1 l" V2 K- t- R$ R* S
  143.   /**' H" h$ [' [; G% Z, I4 \
  144.    * 删除数据3 m7 n8 Y6 C1 |) g7 m
  145.    * @param $table$ y; d. o' n% L" k" A) N3 P& H
  146.    * @param $where& P9 u& t3 C( e5 j6 ^: h
  147.    * @return array|bool
    & C' A: M- H7 X2 ?+ u
  148.    */
    * U) G1 T2 z( u7 s( X' O$ f
  149.   public function toDelete($table, $where) {$ |* V" }7 o+ @. m% B
  150.     $re = $this->database->$table->remove($where);4 _* d0 N0 G& f* |+ }
  151.     return $re;: g9 P+ X4 V: Q1 g4 f6 p
  152.   }7 j% y+ V5 o3 V) c+ O7 F
  153.   /**
    2 N1 b  }7 e, E, I( u) O4 G, N# E
  154.    * 插入数据  N9 d) J1 K# w$ {) O6 t5 k6 ?
  155.    * @param $table
    * S1 o4 `8 c& u4 d4 y
  156.    * @param $data
    " K8 A- g6 _' e, l* w7 @
  157.    * @return array|bool
    . `' C( k: p; F) ~( [
  158.    */, I5 D9 B2 _2 F6 f6 H( Y4 p
  159.   public function toInsert($table, $data) {) E* e& U8 e( O! [6 c0 z
  160.     $re = $this->database->$table->insert($data);5 \5 I; t2 J$ i) W! u% U
  161.     return $re;6 C  I- v( z+ ~( Z3 s
  162.   }" }3 w$ |- I/ x2 F$ d% w6 a
  163.   /**
    # f6 Q- g# o! Z0 z6 Y
  164.    * 更新数据7 f; F. I8 M! a% h- V
  165.    * @param $table/ h) K# a6 W! u! S- F1 Z
  166.    * @param $where9 S9 u- j4 g' P' R& F! g
  167.    * @param $data$ X0 o1 O) l6 B, [$ f
  168.    * @return bool# F* X, {: E% o
  169.    */( X' u0 l# P# f  u) D
  170.   public function toUpdate($table, $where, $data) {
    . I2 Q9 X, }2 x4 y% c8 o% g" c
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ! I5 |- q% V5 w
  172.     return $re;- H1 w& ]* H. }! ~$ t* P; Y+ m- y
  173.   }3 M6 a6 `" G' b+ i1 y' b0 |- e" ]
  174.   /**
    & r. H0 I! |: T4 T$ N2 h
  175.    * 获取唯一数据
    8 W" ]5 o0 J# }/ [) i2 M
  176.    * @param $table
    : }) ~% F! @$ {
  177.    * @param $key
    , S( K/ H3 N0 I# F9 b! b2 o
  178.    * @return array! i6 k! J4 i* w( G& v- u
  179.    */
    + M+ l" b* m5 ]5 f, G8 O
  180.   public function distinctData($table, $key, $query = array()) {
    1 p( H/ w" S2 g- G
  181.     if (!empty($query)) {
    / \7 n1 h( j5 D7 ]/ z5 H3 M
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);' q$ j, d9 c. h# B; A
  183.     } else {
    : |2 L2 ]; f: ^/ K# R
  184.       $where = array('distinct' => $table, 'key' => $key);/ ?. j* ^5 t) T/ \
  185.     }
    / S1 u4 Q8 D  C* i1 v# w
  186.     $data = $this->database->command($where);
    ! G1 t& [: _; `" }
  187.     return $data['values'];8 L5 D: r8 z5 G, O. _9 v' u! u
  188.   }1 V: Q; `% n9 V! `# I: Z
  189. }
    4 V6 o& }1 K: S. K  T" J
  190. ?>
复制代码
. \: o: o. i# r* _4 l3 k
8 f- b9 p8 O8 q+ [( m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 00:06 , Processed in 0.134930 second(s), 19 queries .

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