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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
. U; w. H- j- W& u6 ~* q5 \' p模式自由。! _; }' c% b  [4 F7 q2 Q. Q: V
支持动态查询。2 s  c  x3 u$ F; T0 D2 J3 N/ p
支持完全索引,包含内部对象。% b+ O& H" Q+ s+ j
支持查询。4 Z' z6 k. F' d1 J
支持复制和故障恢复。3 ^0 C' d3 c, q% l
使用高效的二进制数据存储,包括大型对象(如视频等)。9 Q9 r  C, m2 |4 T- i
自动处理碎片,以支持云计算层次的扩展性
* O$ G1 D& t3 u& a支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。- [  O8 ^- C/ W" k- q
文件存储格式为BSON(一种JSON的扩展). B" F( U& a5 G- V
可通过网络访问

所谓“面向集合”(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 W7 ]* j4 T; r: q2 V
  2. /**. {9 K1 O, b) j% U
  3. * PHP操作mongodb数据库操作类" ?% k' \! b% K. b! S
  4. */
    ; P0 L' `7 }) b0 V$ v
  5. class Database {+ Z/ S( U+ s! h  M; d8 u$ r6 G
  6.   protected $database  = '';2 {; p$ x% c, t2 D& q# n; o/ H3 ]
  7.   protected $mo;% f" M9 q& e9 @' t
  8.   /**
    ) c! c  y  E0 n, w- r* k0 X7 R, F3 A
  9.    * 构造方法
    % k' i# F% u7 w$ W& d4 w' k3 c" x
  10.    */
    ) R* u5 J* ]5 a' }; z; K" ^
  11.   public function __construct() {
    % X" F4 ]  P8 J
  12.     $server = DBSERVER;$ R7 }+ W. r/ ?$ a# B
  13.     $user = DBUSER;
    # O1 U1 P5 n; ~7 X! z
  14.     $password = DBPASS;
    ! a# k1 X) B6 g2 l% x2 l# Y
  15.     $port = DBPORT;! p! V- Q" W  V
  16.     $database = DBNAME;
    8 ?& E  g* f7 m" E( }
  17.     $mongo = $this->getInstance($server, $user, $password, $port);9 }5 I& l3 v# [. ]) y  `
  18.     $this->database = $mongo->$database;# i  \/ k9 A# ?9 R3 @  i
  19.   }
    ! y5 s8 _# g6 t0 }: V
  20.   /**/ @7 r1 q6 p3 c, \
  21.    * 数据库单例方法
    " h& M. W& d6 J4 Y
  22.    * @param $server
    : V7 ]& e  E& t9 Q& e% k
  23.    * @param $user; r! l9 x6 W) N
  24.    * @param $password
    4 p. I: w4 [/ c" \! V* T0 A
  25.    * @param $port
    / O; r6 r. O& H* b* S% U5 E: _9 Q& ~
  26.    * @return Mongo' K' m* K- U& j. \: u5 P
  27.    */: r  n7 V- U) N. c- M
  28.   public function getInstance($server, $user, $password, $port) {
    ' u$ _' w6 V! L  H, ?
  29.     if (isset($this->mo)) {
    : v7 {- U" @1 x# Z+ e4 ~+ O
  30.       return $this->mo;
    9 \3 X, l# c4 I. i, M
  31.     } else {
    3 Q4 X! g$ S' E- ]# @6 Y
  32.       if (!empty($server)) {
    + ?$ ?. _1 n$ r/ y
  33.         if (!empty($port)) {3 r  J$ B' b3 ~/ L3 R0 x
  34.           if (!empty($user) && !empty($password)) {
    , K' x( E4 [' y% h. N1 N
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");/ f; O& U+ h/ M' i. t. G
  36.           } else {' h6 \! M4 G. u! v5 C. }3 r7 ]+ F9 h
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");' \2 W* Z3 B) G0 X1 E
  38.           }
    * L' l# {0 \% I* [0 l! f4 w
  39.         } else {
    ; x: d& B8 x9 n% Q( w  N
  40.           $this->mo = new Mongo("mongodb://{$server}");  I) `2 q* C2 E
  41.         }
    - G. m7 B" w9 i" G& J6 y. P! m
  42.       } else {
    * T" r$ `% L: W, L- l
  43.         $this->mo = new Mongo();
    0 W* L" X; d$ ^% }/ C  O8 }$ F
  44.       }
    & O: [) [' x$ b; O4 b' S& w
  45.       return $this->mo;* O  @7 W* d' G! L( c% h9 Y: @
  46.     }
    ! D! K( g7 q; K( i
  47.   }* z2 {$ h- s; g9 q7 ~/ D
  48.   /**# y, I8 ~/ K; N) |
  49.    * 查询表中所有数据) M0 l$ B7 `  K( b2 O
  50.    * @param $table/ t8 o. w1 N& ^  p9 M' e7 X( m
  51.    * @param array $where0 {( Q7 w+ w! v% a( s: {& {
  52.    * @param array $sort' s& m/ @) I4 ^4 ?! }! ]
  53.    * @param string $limit
    + R; h& ~0 I, [( o
  54.    * @param string $skip  N# R( X0 g$ y0 G9 y) \
  55.    * @return array|int
    + F. ~1 q/ {1 k: V
  56.    */
    7 _: v. t) g" G4 @2 F7 ], w3 @0 a
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ! X7 _- T( t3 H* N7 R  y5 {2 A
  58.     if (!empty($where)) {: y: g* k( ?6 q! f1 z" Q
  59.       $data = $this->database->$table->find($where);
    & z0 C& Z  _3 @3 }& d0 H; N  Z
  60.     } else {
    $ e! S4 d' O- N) S
  61.       $data = $this->database->$table->find();
    ( g. o1 B; ^' @4 }' z6 ^& ~
  62.     }$ }0 ~' r! ~7 k& b( m$ `
  63.     if (!empty($sort)) {
    9 }2 u3 P# W' Y# g4 C1 V
  64.       $data = $data->sort($sort);
    ) \. c8 r/ J; c) o% o' ?9 l" Q
  65.     }+ j0 y( y( F7 O
  66.     if (!empty($limit)) {' j2 y/ v8 L( c' |" L/ \
  67.       $data = $data->limit($limit);
    4 v" C+ Y; D9 Q% U
  68.     }
    1 ~. _5 H- K2 o( T0 f
  69.     if (!empty($skip)) {
    4 z- `; b' B5 q, \. z. ?% X4 W: z
  70.       $data = $data->skip($skip);3 L$ E, ]0 u5 j1 t. V" y9 q
  71.     }
    " `8 o. x4 l0 }4 S3 ?6 H0 R
  72.     $newData = array();
    7 `, C5 H  d7 X% Z) }. Z
  73.     while ($data->hasNext()) {
    ; z# Q/ {( A/ i
  74.       $newData[] = $data->getNext();
    + [* b1 t' Y( I: Z( ^9 C2 A
  75.     }/ b4 N6 [- a+ n2 Y1 \% [3 ]
  76.     if (count($newData) == 0) {
    " g5 d8 E) g0 L, Q+ b3 V" q9 z6 O' m
  77.       return 0;
    / B0 k9 ~. S2 `0 z# V# M
  78.     }- E$ p. c7 p4 B$ ~
  79.     return $newData;4 ~& C3 t& y3 L( A; R
  80.   }
    , c; C9 ^3 q: c  c
  81.   /**
    3 U! O+ b: @- Q9 k
  82.    * 查询指定一条数据
    7 e9 L, T, B) V, @; A+ d
  83.    * @param $table/ Z( c+ L; b, n
  84.    * @param array $where
    / g7 B4 ?' J, A+ z$ c+ ]" P
  85.    * @return int; B) d  K) j* E# X% `
  86.    */
    ( l2 b* r6 S! R# Q8 d
  87.   public function getOne($table, $where = array()) {
    / K  W# C1 u- f' L/ J- G
  88.     if (!empty($where)) {
    6 f+ a( }7 h$ j
  89.       $data = $this->database->$table->findOne($where);  \. l6 o  C8 @- H9 q# A8 G
  90.     } else {) {& J4 Q( k8 K: a/ j+ s
  91.       $data = $this->database->$table->findOne();
    - K0 l4 q; z2 \& n; U7 i
  92.     }  _! {7 T% s  i
  93.     return $data;5 ^- d" q% X2 S7 B/ I
  94.   }
    8 H9 [9 u2 c/ m* ~: \2 W$ ^, G( _4 F
  95.   /**9 o* r) [3 \9 P6 c/ H4 \- ~
  96.    * 统计个数0 D: e4 {# x" v/ ]
  97.    * @param $table0 s' d; y7 a6 ^7 r- G
  98.    * @param array $where
    $ c# m: i# x" M
  99.    * @return mixed
    ! l2 H# z( g5 v$ O8 ]
  100.    */$ p: U  D4 _& s
  101.   public function getCount($table, $where = array()) {
    0 y. ~1 O/ |( u
  102.     if (!empty($where)) {
    6 @2 V9 {+ r* ?5 u
  103.       $data = $this->database->$table->find($where)->count();
    * ^' o: }1 }- i$ b; }: |
  104.     } else {8 V, l$ N2 ^  h7 ?. {5 L  ^& i
  105.       $data = $this->database->$table->find()->count();( R3 J/ a; w% I% Z! J3 h% Q
  106.     }
    ! |- V6 B/ w4 p4 ~; ^& F) s
  107.     return $data;
    ! |- @! [1 q- _- r
  108.   }7 \& Z: ?6 R8 u4 x  K
  109.   /**  z) p  C+ d% ^% H
  110.    * 直接执行mongo命令0 G+ X4 d- N& ]5 ?( W
  111.    * @param $sql6 ^& f; f) b0 A: i0 Y$ E. h
  112.    * @return array
    $ z- T! ]9 S3 U4 v( m$ R# e
  113.    */6 }# g2 [( t: l3 v! N7 J
  114.   public function toExcute($sql) {" }: O- m7 @# C
  115.     $result = $this->database->execute($sql);! D$ c" y  j7 ~. f/ w
  116.     return $result;4 z4 {1 z0 S$ Y* \$ k, t  J
  117.   }# c5 G- U: P  |1 Y
  118.   /**
    3 ^1 w! U% ^* u4 P. V$ H) S6 `
  119.    * 分组统计个数
    + W* o) m/ t0 S+ \6 v
  120.    * @param $table
    ' `! \" r# }1 A7 |2 x) o( g
  121.    * @param $where
    & Y/ `$ J) }$ b8 r# v! w/ d
  122.    * @param $field
    1 c1 k* A* c+ O( }. I0 t) Q
  123.    */
    $ o; j, _: k, n' [; Q& l
  124.   public function groupCount($table, $where, $field) {
    6 g+ S& @2 C% {3 p
  125.     $cond = array(
    - E  ~, w' I$ m9 }, ~- S  O, I
  126.       array(
    8 ~* q! @& c% c
  127.         '$match' => $where,7 C+ {; G. c# c$ i; a+ o
  128.       ),- ^1 T6 z# ]1 Z, w% H7 X$ O
  129.       array(
    0 e. U/ b3 l  c/ u
  130.         '$group' => array(! W' S; {6 x' ]2 i
  131.           '_id' => '1 F( W3 M( x6 l  H

  132. 4 M/ ~) [+ _/ U- ?% i4 O2 C
  133. . $field,
    1 R2 J2 v! e8 U+ w! R  R. r1 a
  134.           'count' => array('$sum' => 1),
    9 L" y: _0 y6 N% N
  135.         ),
    4 [1 h+ D8 b" P8 P. m
  136.       ),) k, z' \; m5 H- {1 M3 I, z
  137.       array(9 r% {9 y9 @5 ^$ I3 ?2 K; y
  138.         '$sort' => array("count" => -1),
    - L" E. ?1 }3 E% {/ l; G/ \
  139.       ),
    / H. g$ b$ T! l$ [; P1 A
  140.     );( |& k. z% L- b
  141.     $this->database->$table->aggregate($cond);
    ! d4 r$ M9 K5 C5 J
  142.   }( E1 I3 `  W% e1 |( O, t5 J/ N  a
  143.   /**- Z9 x3 r1 d# Y7 Y
  144.    * 删除数据6 g- |# F* n9 }/ B  l$ H4 A+ ?& c
  145.    * @param $table' M5 S+ V: ^/ }/ E" ?3 w* v
  146.    * @param $where/ g+ N6 Y; D, `% B2 J7 E% ^1 r
  147.    * @return array|bool) O+ N9 O* \7 a, e3 X8 G- \0 K/ N+ ^
  148.    */6 u/ t% v* K$ @
  149.   public function toDelete($table, $where) {1 @6 L9 @: u3 ]7 [, n' }, u
  150.     $re = $this->database->$table->remove($where);" h) u& U8 M! [/ b  v8 V6 v2 [
  151.     return $re;
    4 X9 d3 I; K* e! i1 j; q$ e: v
  152.   }
    1 C! U: ?/ A8 ?) e/ V/ D7 B3 r
  153.   /**
    0 k. t0 W* ]2 y- t" `
  154.    * 插入数据6 `' u) Z( G. V4 t) p! M, H
  155.    * @param $table& o$ V' g" L: _( v5 ^/ f4 Y
  156.    * @param $data' d0 v# g5 r' ~# L* Z
  157.    * @return array|bool
    $ Y) r: V" r4 O  M0 q$ G$ L3 u
  158.    */+ F4 _" i9 E; T" p# j
  159.   public function toInsert($table, $data) {4 }% X; O( h9 K. ?
  160.     $re = $this->database->$table->insert($data);
    , `1 k& G  |0 O! ]3 \( S) N+ o
  161.     return $re;! C2 p( ^3 O: ^; g/ M
  162.   }' H) _6 a* N' p4 L& Y! G9 V; \
  163.   /**  e& y! W8 s7 A% u% L! S' Q9 d
  164.    * 更新数据1 v) p, V  i+ R; ^( P
  165.    * @param $table2 ?( }/ U% l9 Y/ @( P8 W) T! y
  166.    * @param $where
    2 t& }9 R. ]% k' b+ C+ i& ?" k
  167.    * @param $data8 V) a/ M4 F4 i) y- a" t
  168.    * @return bool% o) G9 V9 l! u, c; E* O* @7 _. N8 ^2 \
  169.    */, `& l8 m# Y) y- I
  170.   public function toUpdate($table, $where, $data) {
    " H7 e, I4 A# P
  171.     $re = $this->database->$table->update($where, array('$set' => $data));& _% [7 n7 {* Z  \2 f- X: r% X+ ^: q0 ^6 B
  172.     return $re;4 b5 q: f7 O/ |- t: i
  173.   }7 s( }# t4 H$ M% C
  174.   /**
    7 t! A' j+ H( r4 S* |: s
  175.    * 获取唯一数据
    - h" \0 l) P5 u. ]
  176.    * @param $table
    5 h0 ?6 X- q9 J! @, _- P& q9 a
  177.    * @param $key
    % x0 z- E, H% |- a# h. Y% N
  178.    * @return array
    + l2 b0 v; F1 O8 I8 G9 F9 ]
  179.    */& m& L8 O8 h- H8 d9 b; C+ N& S
  180.   public function distinctData($table, $key, $query = array()) {8 a3 {* w; x. _/ y
  181.     if (!empty($query)) {4 d1 a0 L) [& O2 K2 [6 v4 {
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    & ^6 B% V5 Y( `
  183.     } else {
    ! r0 x6 A- ^+ n3 f- @4 r
  184.       $where = array('distinct' => $table, 'key' => $key);
    3 P1 I: F& r! A. B
  185.     }% T0 b  U% h9 B9 t; U& y
  186.     $data = $this->database->command($where);
    * p( i5 B1 |7 {1 F5 j8 w
  187.     return $data['values'];
    % V7 P- }' b$ Y
  188.   }6 F7 b) X+ W' y8 @0 d( {
  189. }' a5 f" E' m$ @4 C, y7 ]
  190. ?>
复制代码
' W  a0 r3 |# m! a% }3 C+ Q. {
  |' p7 u  M9 W8 f! R, f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:47 , Processed in 0.071288 second(s), 20 queries .

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