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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。# B6 l8 B: U( k! C6 l
模式自由。# X; Z/ X2 o' }
支持动态查询。
/ j- z) k9 e8 T& f4 ?( o! h支持完全索引,包含内部对象。& X$ Y0 {' v6 D! m
支持查询。
( F8 K# C( x3 x, g. I支持复制和故障恢复。. G& S9 }: ]# _& g
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 w( }2 W* b+ {) m4 v/ S自动处理碎片,以支持云计算层次的扩展性
  `1 Y3 z* P3 U2 H支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
, V: N3 M7 e! ?  X, z文件存储格式为BSON(一种JSON的扩展)3 f8 _/ i) j3 W; s+ m7 z" P
可通过网络访问

所谓“面向集合”(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. <?php2 E6 Y6 J$ P( l; |
  2. /**
    9 d! i) m: k2 Y" x3 f
  3. * PHP操作mongodb数据库操作类
    5 T4 I8 }6 V: F
  4. */
    ! I9 K3 A- I) [# }8 g  _
  5. class Database {
    ; t- _% W2 e# V/ P* g6 ^' m
  6.   protected $database  = '';
    6 a1 I) F8 `0 ]  R3 r) x6 w, b
  7.   protected $mo;
    6 v4 W" }" b: B% b& t7 X
  8.   /**5 p# R3 u1 k: ]; A4 F1 @
  9.    * 构造方法: w( H+ c0 w6 |4 y" ^0 r
  10.    */% `' v- `) q2 f) W
  11.   public function __construct() {. ?  ?- Z* Q$ Y+ }7 _, z0 }5 v: B
  12.     $server = DBSERVER;
    + ]1 J5 I) G3 r0 X
  13.     $user = DBUSER;
    6 k7 b' f0 s3 _+ K  H" v6 h% X
  14.     $password = DBPASS;" L. c/ |( v1 p3 O- ]
  15.     $port = DBPORT;8 r( r5 Q. Q7 L4 L
  16.     $database = DBNAME;
    6 Q3 i! ]+ H/ w8 G% q9 f
  17.     $mongo = $this->getInstance($server, $user, $password, $port);3 n! e. Q  s& `1 H: `; Q
  18.     $this->database = $mongo->$database;
    8 [! f( m2 u3 F5 H* H
  19.   }
    : N! w2 x0 M) j2 R9 B
  20.   /**% D$ H. \% g2 ]( v
  21.    * 数据库单例方法
    , {+ ]- d7 R. c, V+ v2 _3 ~
  22.    * @param $server- Z4 w6 {6 P' _, @+ D; c5 {: d
  23.    * @param $user
    ' t. |3 {3 s3 q* V/ `
  24.    * @param $password- Q8 p2 s' [- T) ^& }  C; C
  25.    * @param $port8 F" b! @$ E+ r. y& R1 N
  26.    * @return Mongo# v% |9 h+ P) {+ W# c3 ^0 S
  27.    */6 V. e: ^& y1 T; o
  28.   public function getInstance($server, $user, $password, $port) {
    ' j: f+ J8 B. H/ K- v
  29.     if (isset($this->mo)) {/ a% _) j& ]. c' X% z& @
  30.       return $this->mo;
    . ]+ y: E' }  A
  31.     } else {
    1 X  a, K, P( p( R
  32.       if (!empty($server)) {( Y. i7 q1 w: w
  33.         if (!empty($port)) {  `% b: J( A, O8 [: m- p
  34.           if (!empty($user) && !empty($password)) {
    5 w  h' v& J  ]2 R. v; a7 o, O: M0 [$ J
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    + y: \: T. \' E* D
  36.           } else {
    ! s9 @1 G( p' W+ i2 c
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    7 q: N3 z8 i9 v4 d4 @  |
  38.           }
    % i" q+ P7 O' S# t
  39.         } else {
      u# Z* K4 Z& Y$ c
  40.           $this->mo = new Mongo("mongodb://{$server}");) o5 e" P, j- q! d: ]  X: S; i- n0 i
  41.         }
    5 U( |6 U% F* ^- s# c3 W, S/ F/ \
  42.       } else {
    * J. ~  W  R8 }6 s# ?
  43.         $this->mo = new Mongo();6 \! a' g! l" y& A
  44.       }$ Q  P! S0 S: ^8 G
  45.       return $this->mo;- R5 b/ e1 K2 U. y' @
  46.     }
    ! D  j6 T* Q. G  Z
  47.   }
    $ B: M  ]3 V. d/ c9 ], B% }* K) m# w1 ]# h
  48.   /*** U, M) e9 R1 l8 {6 w4 l! S
  49.    * 查询表中所有数据; N# T$ Y# }6 V6 V7 {& K
  50.    * @param $table
    % G1 d( h6 D2 J9 N5 m" E0 v
  51.    * @param array $where
    8 O3 R: t0 O, E4 `! j# o
  52.    * @param array $sort0 _* p1 v* M$ [7 J1 {9 u
  53.    * @param string $limit
    6 `* D) C" m) \+ b
  54.    * @param string $skip
    * i8 z+ B8 \, w1 }  o; x
  55.    * @return array|int
    6 Z4 T+ W- v3 g+ i& M
  56.    */& y1 c+ t" H: k$ R# r) @- Z' b) f
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    , M! u/ Y0 ?9 T% g  g( q6 O
  58.     if (!empty($where)) {+ F! X) v0 @  c- ?. q" ~* ?
  59.       $data = $this->database->$table->find($where);7 N" R- o: j- m
  60.     } else {% ]3 C" P" ?0 F
  61.       $data = $this->database->$table->find();
    6 t8 S2 [% F- ?% a" {
  62.     }) L& f1 B- \! S0 Z
  63.     if (!empty($sort)) {
    3 l3 z3 J3 T/ D% h# E! ^' @
  64.       $data = $data->sort($sort);
    ( @9 u* v2 I( x7 @: G9 a
  65.     }$ i+ E, x7 j% ~# T' k
  66.     if (!empty($limit)) {
    ) ?- h3 e3 J$ t: o5 }2 t
  67.       $data = $data->limit($limit);
    ( q9 Y  ^5 P! h! p4 H
  68.     }
    / b: b4 d1 L2 O4 G+ G! F
  69.     if (!empty($skip)) {- t' j' o, V+ C; `; S8 X) f( h
  70.       $data = $data->skip($skip);
    1 k& |; K$ i+ \( S3 F- x8 S2 E
  71.     }2 n; \: m6 _3 }
  72.     $newData = array();
    ' N- U: q2 V2 }. |# n3 @
  73.     while ($data->hasNext()) {
    ! y; q7 J, {7 V+ S' k9 M' p1 b/ c' J
  74.       $newData[] = $data->getNext();. N8 q  d5 {4 ^( l
  75.     }' Z) H2 p- ~- ~7 _( o3 q8 H
  76.     if (count($newData) == 0) {
    * l+ I6 ~2 n& ?; L* J% d
  77.       return 0;
    ; K9 Q. V+ L+ j- V( p7 S8 j
  78.     }$ ^  w  ?0 J; s# I1 B, P' [
  79.     return $newData;' \& A: ]" }% }
  80.   }
    - }* m8 O9 H$ f7 ^
  81.   /**
    7 I8 ]- D3 L: o0 G/ K% {
  82.    * 查询指定一条数据4 S+ O9 f; Y5 t9 M! i) `
  83.    * @param $table
    9 `) @& a* l4 R
  84.    * @param array $where
    , O% _- ^7 D, z" }- @! |/ P, A. {
  85.    * @return int
    * ~2 q, b! D5 V6 }
  86.    */
    2 ~, `% k0 ], Q% }5 [: c; k# ~
  87.   public function getOne($table, $where = array()) {5 A. N/ q  m5 _' G) ^0 z5 x0 v
  88.     if (!empty($where)) {$ }% \+ r5 R0 y# v
  89.       $data = $this->database->$table->findOne($where);
    ; C) m% w8 h3 ^$ S. P- f- \, J  I0 Z
  90.     } else {- e/ q4 Y5 q+ G+ X
  91.       $data = $this->database->$table->findOne();
    * _* ]. H* w/ j, ^2 [
  92.     }
    + t/ @2 t3 Y- p6 Z( L
  93.     return $data;
    6 w# x/ P  D& g
  94.   }/ Z! u" ?6 v( [8 T+ P! |) |7 Q
  95.   /**
    " ]9 I$ c: h6 A' n4 b+ U# s
  96.    * 统计个数4 x) F6 v0 g  Q5 J# V3 H
  97.    * @param $table
    ; W" d3 k5 Z& y5 ]
  98.    * @param array $where7 U' F, O  c, U( ]
  99.    * @return mixed
    2 S) u: z& y- u3 h$ i
  100.    */
    : ]& j; W' t& s# m/ z0 }4 F) D
  101.   public function getCount($table, $where = array()) {
    ( |. b# T0 P" |* }- }1 ~
  102.     if (!empty($where)) {# y- ]$ @- q: r9 i
  103.       $data = $this->database->$table->find($where)->count();- }9 w/ q, E2 a& Q; u* o
  104.     } else {! V1 }) A: u6 L
  105.       $data = $this->database->$table->find()->count();: s' l5 j. c* @: m( g  `0 W  l
  106.     }
    , M% ?' W9 F2 j$ A4 V2 W3 y
  107.     return $data;4 ~1 Q; U; l/ P7 w" e- y1 K
  108.   }
    9 s$ O: k' ?3 y, a& z. Z
  109.   /**% C! b* ?. a3 T0 V0 s% Q5 y
  110.    * 直接执行mongo命令
    * o0 v0 F# N0 ~  F
  111.    * @param $sql7 O, g6 B; v0 A# `  _
  112.    * @return array
    % B2 c* p  f  F1 ~( `. t5 o
  113.    */) |4 f8 m2 ~1 B- {7 N) i. w
  114.   public function toExcute($sql) {* U  ~0 O& K) A9 Q
  115.     $result = $this->database->execute($sql);/ w% q* A( ^6 y5 J  B, V3 j
  116.     return $result;7 Z+ n: B, B9 ^4 r
  117.   }/ q  l, g1 i1 D! s+ ~8 A
  118.   /**
    % [% J6 ]  N# Q% W+ ]
  119.    * 分组统计个数
      X" X) a; ^" h9 m4 s
  120.    * @param $table+ I& b2 a0 F& j2 _# X7 {# F
  121.    * @param $where
    # b# W8 n! i; f5 d. d
  122.    * @param $field
    2 `2 X! D) l3 N  K/ ?4 }4 z& d
  123.    */0 p0 }' `* T" M% ~9 Z3 [& `0 _
  124.   public function groupCount($table, $where, $field) {6 G& L3 ?# G* L! n+ C& H6 [2 r8 i
  125.     $cond = array(
    8 d3 t3 S- D3 V# B) u( _% a$ W* v
  126.       array(
    4 g" y" d+ S. [  Q
  127.         '$match' => $where," V: I7 L$ W- V, q
  128.       ),$ i# S3 l% {9 d: P& D. F4 t) \
  129.       array(& C% h8 w) N* ?$ F: }
  130.         '$group' => array(% ~/ I, E0 e; Q1 U! I- O
  131.           '_id' => ', d9 m: _+ K$ L9 @( Y. \1 n% z9 H& H
  132. 3 _( o' S" E- g4 F5 {+ @
  133. . $field,% U5 ]& [1 ^" c0 K0 W4 m6 x- V
  134.           'count' => array('$sum' => 1),
    * I* r3 p" U2 h/ i6 @
  135.         ),3 i- ?/ S" Q* S3 y. R& }9 v8 _
  136.       ),. [' b9 D3 e6 q, `
  137.       array(
    & n4 E6 Z7 D* T2 x4 ~
  138.         '$sort' => array("count" => -1),
    1 [7 `  U& v3 _
  139.       ),
    9 C$ H& A6 `1 N% I% S: v2 @8 X  A( }
  140.     );
    2 v* z  F4 K3 h9 x2 m! L2 H
  141.     $this->database->$table->aggregate($cond);) N7 @0 j, B' K
  142.   }
    2 n& ^4 n; _9 t& ~# o- n
  143.   /**- y: b# y$ }% d( x4 r
  144.    * 删除数据2 v% Y3 C) ~" D4 E3 s5 c. j
  145.    * @param $table
    6 O& f% R. O0 v+ p4 z: a* O
  146.    * @param $where" k& h: @4 F" s: u) ~7 t4 s
  147.    * @return array|bool
    % l. p6 I  F4 C( h$ O0 ~0 B* [
  148.    */
    8 j, N! ^' _. A" @1 W7 g
  149.   public function toDelete($table, $where) {
    : d4 l' N! P& i
  150.     $re = $this->database->$table->remove($where);2 q6 d0 v3 U7 k! [4 E
  151.     return $re;0 \+ M" |& S: y) Z5 D9 J
  152.   }3 @/ p9 ~$ P1 ]$ @
  153.   /**) b7 m. c" g. o
  154.    * 插入数据
    + C3 }2 |3 ]! m: h* S
  155.    * @param $table
    ) D  A* v" r& z$ N
  156.    * @param $data1 i! |# o) I, q( y6 q7 W( Z" u
  157.    * @return array|bool
    ! @) P8 R$ B% M3 B' |" J2 s
  158.    */
    , x- @. W/ t8 u+ i8 B) i
  159.   public function toInsert($table, $data) {
    9 M) L& J+ @, T" C  n
  160.     $re = $this->database->$table->insert($data);/ h0 H  Q$ R' j$ U
  161.     return $re;
    4 q3 F2 S! u. c) G) i" {9 O: B
  162.   }( H5 w' Q) L, e% V
  163.   /**! U6 T, F2 T; }5 w) w# D; b( B
  164.    * 更新数据/ a0 [4 a1 O' h; D
  165.    * @param $table
    * z7 W- w3 O3 Z+ q( q
  166.    * @param $where
    & @/ d& ~( ~3 P& j2 H; A: h
  167.    * @param $data& p+ u7 N" {2 e2 f. q5 r
  168.    * @return bool9 d( M+ j7 S. l' h- g! ?6 R
  169.    */
    4 Y9 B  F% D6 p4 M! R, D+ a7 o
  170.   public function toUpdate($table, $where, $data) {
    4 W% B0 ~  t- E$ ?7 d8 C
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    + G- D/ x, L: e
  172.     return $re;# i( A1 f' A! }  D5 h
  173.   }
    1 K3 O% y- S" v4 _8 V  u4 B  Q$ o$ D6 l
  174.   /**
    " t+ C4 O$ {+ l. k5 `
  175.    * 获取唯一数据
    8 j: d  J- z' @" V2 X7 t% g
  176.    * @param $table# Z, T( d$ y' D9 X
  177.    * @param $key0 D; }% Q' ~  A) ]' q0 v
  178.    * @return array
    0 |; e4 M' X' i
  179.    */
    & T5 S2 k- K/ {, i: U! ~7 \
  180.   public function distinctData($table, $key, $query = array()) {$ E( u9 p/ o* ~5 n0 f( n) W5 ^3 d
  181.     if (!empty($query)) {
    2 D  t, \. m& S, t2 W  y
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 H- ^$ E. P9 n5 H
  183.     } else {
    8 Y6 B; S" h8 c8 j
  184.       $where = array('distinct' => $table, 'key' => $key);
    & }# U1 G" n' K  |! _( y8 |
  185.     }2 k3 K" G* W% ]+ T* Q. j! Q- \
  186.     $data = $this->database->command($where);
      n4 a, d; n- U
  187.     return $data['values'];
    & g0 A4 o( l% Y' O4 b4 }
  188.   }! P$ e0 N- }2 {6 g5 ]
  189. }
    6 U' Z  d3 m( y  ~4 ~
  190. ?>
复制代码
  @; p: O: M, d5 \6 H
- K9 j, g9 `* y" Q3 V" h7 Y4 q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 03:41 , Processed in 0.162462 second(s), 19 queries .

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