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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。1 N" s* Y0 z7 `% f3 ]/ U5 p
模式自由。8 s7 T4 i' |- X( x) d. `
支持动态查询。
# x( j( p; l* H5 p2 Z6 y支持完全索引,包含内部对象。
, w5 ^/ b0 U! |. C. g2 L. P3 Y支持查询。
0 S+ O. b- w' ^9 M/ {( _' ]支持复制和故障恢复。6 c; n( @9 k/ S
使用高效的二进制数据存储,包括大型对象(如视频等)。
- Z! A! G  n" I8 @, U" D8 f自动处理碎片,以支持云计算层次的扩展性7 V- J- q& ^. S- {! L1 O) Q8 V  X, J
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
7 z) E# F8 T+ q9 Y0 F文件存储格式为BSON(一种JSON的扩展)
9 c- e0 s+ `$ n3 T/ K: ~可通过网络访问

所谓“面向集合”(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 t( G. q' U: G( p3 J
  2. /**0 C% U9 R# S$ y+ Y
  3. * PHP操作mongodb数据库操作类
    # u* f" L, \! z: L: i4 P
  4. */
    $ o% U% z" f, o0 I7 ^7 h3 `
  5. class Database {& W3 @4 h8 I4 j% u
  6.   protected $database  = '';
    7 e0 j+ u+ x% X' ?& B& I' b
  7.   protected $mo;  J2 K! k% m6 F7 b" x! N
  8.   /**
    9 D" G0 E% L4 }
  9.    * 构造方法
    2 \/ [, x" d  a8 T1 Q, n
  10.    */
    1 L( z6 C$ p. q+ s  N
  11.   public function __construct() {. _+ `( M" `( h- n; A& u
  12.     $server = DBSERVER;
    * Q3 Z: V& I8 V0 K4 @6 M, d3 {6 ?
  13.     $user = DBUSER;) _% J% l3 c  D# H) `
  14.     $password = DBPASS;
    # g* @0 n: ?; u" V
  15.     $port = DBPORT;/ H6 Z9 D% x/ w# U
  16.     $database = DBNAME;9 \/ e: B4 S/ q4 J6 }6 M
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    % ^# y; s9 k2 x# D' E) Y
  18.     $this->database = $mongo->$database;9 f5 r7 A3 G5 V" m
  19.   }
    , C3 T9 h: L/ N; B
  20.   /**. w, w" ^0 P/ A& u9 o+ d
  21.    * 数据库单例方法/ o' @) F( d3 _
  22.    * @param $server
    6 _8 G9 e* |# W$ m) Q) z
  23.    * @param $user
    ( r) n; m; v( A# L
  24.    * @param $password* e5 A8 d  k+ c+ a' v+ U
  25.    * @param $port% E& N0 D0 N3 H# Q
  26.    * @return Mongo. L) W* s* m9 e6 j0 r" B
  27.    */( G- q+ m' d3 n  n" T& @& {
  28.   public function getInstance($server, $user, $password, $port) {
    ! v2 m! x# D* ^; _; M0 o
  29.     if (isset($this->mo)) {
    1 g* k* P; n- m6 h9 _  ?8 T
  30.       return $this->mo;! h8 B6 h5 `" v
  31.     } else {
    ) I% h( t& u, R6 i) \
  32.       if (!empty($server)) {7 E1 M$ D& f  u( g
  33.         if (!empty($port)) {
    ; T; X2 D8 d9 Y( _+ G
  34.           if (!empty($user) && !empty($password)) {
    1 I3 ?- x1 S, n
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");' P  U* b. W  L9 y: t4 E5 ~$ V
  36.           } else {
    . Q! w' K- l* l
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");! H& m: B0 z: b6 L
  38.           }
    " E  |6 s: X- e0 Q, Z3 m
  39.         } else {
    5 A8 v  _$ L) B/ Q
  40.           $this->mo = new Mongo("mongodb://{$server}");# y' x# `) C" }  ?$ C
  41.         }. E, z3 ?9 h0 {3 |. f2 ]4 e$ y# W
  42.       } else {' }" O7 d9 f" S+ t5 L
  43.         $this->mo = new Mongo();
    # @/ O. c, j* I, ]* Z4 F! B
  44.       }4 v+ U9 u4 K* O( F3 _
  45.       return $this->mo;7 Z! C5 q+ |4 d+ Y, s3 {, \4 ?( k0 z7 C
  46.     }; ~( p0 |  ?$ }. T/ u
  47.   }, ^6 {; N- ^( H; f! n' F  r
  48.   /**9 R1 I# |7 g( I; d7 G
  49.    * 查询表中所有数据
      }) g% ^( t' a2 f
  50.    * @param $table. {; g2 Q: n4 O. p6 X# n2 }
  51.    * @param array $where
    / s: t  B* a1 s; X/ z. v
  52.    * @param array $sort
    ) a0 \" z7 o) W5 n) }0 Y2 Q0 \
  53.    * @param string $limit
    1 I" I9 P( r! F! Q1 b6 L7 l( f
  54.    * @param string $skip
    ! ?, f3 F2 {$ }5 y
  55.    * @return array|int
    * \7 }0 Z8 j) P$ m' _7 r, S& U
  56.    */9 F7 n5 o9 B9 v
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    . P6 @" X, q$ U2 A; z& M7 E
  58.     if (!empty($where)) {
    ) d, V  _" L9 ]9 X
  59.       $data = $this->database->$table->find($where);  m- s+ X8 J, \, b# V
  60.     } else {
    % `/ o! [. v, x$ @
  61.       $data = $this->database->$table->find();
    6 |6 ~+ Z3 e9 A& n- [8 w  k
  62.     }
    8 A. L" ^- ?% ]6 G; ~! V/ e
  63.     if (!empty($sort)) {
    2 x( [& Y. }; [' G: ?3 l
  64.       $data = $data->sort($sort);% |& h) _  j" {' I( r
  65.     }! m" y# L: M( F/ _
  66.     if (!empty($limit)) {; ], ]" f7 ]' m8 ]7 Q% I
  67.       $data = $data->limit($limit);6 m5 ^# ], G. L0 G" U- A+ ?. F+ P
  68.     }; }5 x+ O; X# ~$ A( `* l. c
  69.     if (!empty($skip)) {
    2 N- n7 i# X$ {: p5 q
  70.       $data = $data->skip($skip);
    - H" `# Q7 u5 I- v4 c$ e2 ^* f# Y
  71.     }  n: Z9 H! S" V
  72.     $newData = array();- S8 u4 J3 T3 y& p6 z
  73.     while ($data->hasNext()) {
    & I- M* y# w, M
  74.       $newData[] = $data->getNext();
    $ R0 s! z5 P0 g0 }$ j
  75.     }! w$ E# w4 }9 r* h% l' q
  76.     if (count($newData) == 0) {
      x9 X+ g) ]6 S+ V$ M1 @' I
  77.       return 0;
    & `5 {  P+ J6 g: E$ s; M
  78.     }
    - @. X5 ]* S7 ~2 ?2 Z
  79.     return $newData;' f6 N! x; R2 `* |
  80.   }
    * D& A+ M: q+ N% |0 |
  81.   /**5 h- a+ ?- _/ x5 S& k& B
  82.    * 查询指定一条数据% l& Z8 p" O* {& |
  83.    * @param $table7 T# R( v3 c5 n5 E5 c
  84.    * @param array $where& w; ~# b% \. ]! G2 k$ ~
  85.    * @return int
    7 c9 C* S' S. F- @9 c
  86.    */
    4 i8 Z+ h# @1 j4 u2 H
  87.   public function getOne($table, $where = array()) {6 A* }2 K  o% Z/ G: O7 ]! U* Q0 t, o
  88.     if (!empty($where)) {
    6 R# k% z/ J" N, D4 U$ y+ P% o
  89.       $data = $this->database->$table->findOne($where);& l4 r0 b% V! @
  90.     } else {2 p0 d$ `0 }' s. W0 [6 f4 b
  91.       $data = $this->database->$table->findOne();4 T% R* L. B3 {6 l
  92.     }
    3 o% {& w: a# N7 u0 y
  93.     return $data;
    3 {* e4 S& n- C( U% h- w
  94.   }
    ( U( ?( r5 @. M! m
  95.   /**
    . z$ G! [3 ]( i, D
  96.    * 统计个数
    * g* M" W% [) r% }" l2 L$ S9 A
  97.    * @param $table! n$ s. z* J! U" _- J& @
  98.    * @param array $where
    + `  ?# N+ \* D8 i* u
  99.    * @return mixed) B' m* ?2 l" A& r3 W
  100.    */
    9 `8 r3 |  Q3 n5 z% {+ o
  101.   public function getCount($table, $where = array()) {
    # D% u) [; C! p0 D( p, c/ t, \
  102.     if (!empty($where)) {
    " T* t. y% K- O  H3 v3 F% Z
  103.       $data = $this->database->$table->find($where)->count();6 e+ @+ L2 B- a: T
  104.     } else {
    ( A8 R' a6 a4 e( y6 P+ L
  105.       $data = $this->database->$table->find()->count();+ `# R8 J$ S6 I' p, l5 L
  106.     }
    4 K+ s' Z0 B# }8 ~9 E  b( z' ?
  107.     return $data;
    2 O9 y+ A* g/ @' T
  108.   }
    , A7 |0 m# |; B3 |( i! _2 s! Q7 L' X
  109.   /**4 Y& ]. o- P: K7 L9 D3 L/ p
  110.    * 直接执行mongo命令
    0 k& i+ q  B" ]
  111.    * @param $sql
    5 F+ J1 j9 x1 m$ [! c+ G( W" b" x
  112.    * @return array* b" K, n* h* y& C" a! {
  113.    */
    9 I' N  {1 I4 e8 o- W; O" N' J* t
  114.   public function toExcute($sql) {
      j7 r: m; i9 u/ G. W  g" {7 R
  115.     $result = $this->database->execute($sql);! n0 s3 H: v% _* j
  116.     return $result;
    * U; [% M5 C$ Y6 K* j5 v$ T
  117.   }) ~2 D0 d0 E: g% n" i
  118.   /**
    . o0 a# f* C' Q4 o
  119.    * 分组统计个数" B# j, n: d5 [
  120.    * @param $table
    1 c! O1 H' `( o5 G! U) I+ r" v
  121.    * @param $where. }, j- W7 s, l; k; v  v- @3 T
  122.    * @param $field
    , {& \8 i/ w( F5 e7 @3 E
  123.    */7 @9 Y; H$ U. K/ E# _
  124.   public function groupCount($table, $where, $field) {
    % P( \4 G/ E  W' z
  125.     $cond = array(3 V0 h7 q' g& f% Q7 _( a
  126.       array(' w. k  _+ i3 h5 l4 V1 |8 C
  127.         '$match' => $where,, u) n1 O* m' e* c: t' u
  128.       ),; R* J' Y# Q8 a9 S
  129.       array(- f- W: m$ Y: }, U6 c; ~
  130.         '$group' => array(" A9 Q* t. g) U' V* n
  131.           '_id' => '2 X5 g# _- C* ~+ J
  132.   t0 i, ^3 D' J$ t5 b2 g/ _# f( I
  133. . $field,# l* q. L1 x" e4 D2 Z6 c1 V
  134.           'count' => array('$sum' => 1),: U6 q( s  k9 h" p3 c; K
  135.         ),
    ; G# ?( t, \2 K2 k. J3 F
  136.       ),; A0 N8 Y) d. |" N9 h- U
  137.       array(4 ~4 L. `6 i- M. M% V9 W" U' Y# j3 `
  138.         '$sort' => array("count" => -1),
    9 @) R* P3 r( B9 C4 h  M4 W5 X
  139.       ),# a7 `. v3 X8 u, a& L4 A# y
  140.     );
    1 y; v3 S8 _5 T2 I' W9 D$ l
  141.     $this->database->$table->aggregate($cond);/ M7 {3 c. F7 i  ^2 U- n
  142.   }
    5 |  Z0 K1 t  P( T2 K# [' Y) d
  143.   /**; M+ U. g1 R& B
  144.    * 删除数据& G! P: H  u+ N0 l% g0 n
  145.    * @param $table! ]& C! u9 S0 `. I
  146.    * @param $where2 v/ X8 E6 T7 }1 Y) ~# ], X
  147.    * @return array|bool
    % X% x& C$ g' Q$ R# j8 S, f9 x
  148.    */. l/ d  L$ ]7 t- o) r& m1 {
  149.   public function toDelete($table, $where) {$ r6 Y# ]# ]1 ?
  150.     $re = $this->database->$table->remove($where);
    6 X/ R3 {  R& ?  c: p
  151.     return $re;/ ~9 ^6 T$ ^1 n, q2 }
  152.   }
    2 E1 c8 F( t2 k% Z! o# M1 j
  153.   /**5 u- K2 b% W4 @1 v/ ]
  154.    * 插入数据& n+ y3 L$ t# Z' ?) e3 \) j' i
  155.    * @param $table
    ; O3 |) ~. Y1 S8 b
  156.    * @param $data
    2 O6 M! c9 ^/ g; c
  157.    * @return array|bool
    0 ~& i( ^- U+ F- f1 u# I( @& f
  158.    */: \' v& N" l+ U5 k# A
  159.   public function toInsert($table, $data) {
    7 ~" V3 O$ N- S) g. v. P  L! ?0 |
  160.     $re = $this->database->$table->insert($data);
    ) {' A5 ~5 B  h( u  W
  161.     return $re;
    0 G7 |- K1 {1 G2 r: v7 ?
  162.   }
    4 Z. V5 I" R; d8 A" z. j4 Y9 L+ N
  163.   /**, x8 t7 M" v9 z4 Q' ]
  164.    * 更新数据
    , P: ^9 d. [  M/ {
  165.    * @param $table+ f8 {2 F7 T1 j$ R1 b4 ^8 u" s
  166.    * @param $where* Z9 C$ H; q1 O/ R- I
  167.    * @param $data
    & p2 I8 o' o8 {3 C4 L: d& R
  168.    * @return bool! `& T, B' S0 O3 B
  169.    *// R/ k  g6 F3 W' D7 L
  170.   public function toUpdate($table, $where, $data) {/ N& Z( @/ A: L- n6 C, z9 F
  171.     $re = $this->database->$table->update($where, array('$set' => $data));) ^0 U, a6 w) s& g/ j, O
  172.     return $re;
    * e5 \: {% G5 ~5 E( p; u
  173.   }1 u' g: i2 @4 v% f* X0 Z8 {* z
  174.   /**
    ) \% F6 p7 O+ F- n9 R; i
  175.    * 获取唯一数据
    5 S- v& P$ W, z! x% k% ?/ r7 D
  176.    * @param $table
      w' X/ e) V; v6 d
  177.    * @param $key2 c9 N5 G& \* ~5 G$ r+ }& B) L1 ]
  178.    * @return array, @: u( u. C) \4 G4 N
  179.    */
    8 A  b, h6 \3 J' w
  180.   public function distinctData($table, $key, $query = array()) {7 \: m9 t2 V1 \( r% E0 Z
  181.     if (!empty($query)) {# z0 G! |; i6 K4 s. H
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);8 q1 F7 a( U, ]# Q* @
  183.     } else {; D$ Z' k/ _  m1 ?" ^
  184.       $where = array('distinct' => $table, 'key' => $key);( ?5 |0 b' O; B; ?
  185.     }
    3 c' l* T) K8 S9 v& F5 l
  186.     $data = $this->database->command($where);1 i' g8 E& l  {3 C" d
  187.     return $data['values'];) J5 g* `- h5 z. [* [3 O
  188.   }- O4 O$ o9 c; x3 `
  189. }+ A6 ^- c9 j  n+ p0 M+ T, W4 q% T  _
  190. ?>
复制代码

( F; t5 [# Z& k, h1 \  d& T6 D/ z  Q6 Y; L3 |1 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:55 , Processed in 0.060336 second(s), 20 queries .

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