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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
. D( J: Q; o4 o) m8 E3 ~3 v; C模式自由。
" H+ S8 Q$ Q) q6 d# J+ f! N支持动态查询。7 V: ?( z; t* j# V
支持完全索引,包含内部对象。/ @* X6 m& ?- E" Y' I
支持查询。
/ c. i4 a; F0 T7 z& R支持复制和故障恢复。; T7 f3 l7 L% V  R& F, I+ r
使用高效的二进制数据存储,包括大型对象(如视频等)。" ]! Q! e% h) F5 ^
自动处理碎片,以支持云计算层次的扩展性! a$ \$ ^% Q9 B% h
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。. I6 p4 \: {2 }; N* c: V5 a2 c' G( l
文件存储格式为BSON(一种JSON的扩展)5 d# M. s) u8 b; \& N
可通过网络访问

所谓“面向集合”(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. <?php3 p  l2 X, V) p& {/ Y
  2. /**% S2 B4 r  ?7 ^4 j
  3. * PHP操作mongodb数据库操作类7 O, p! |% R5 M
  4. */  J% W2 y" }6 g; }, \6 V  W/ Q
  5. class Database {. O0 \4 w$ q+ U& \
  6.   protected $database  = '';
    , z& k1 q. ]2 H6 l6 X2 `0 b
  7.   protected $mo;
    8 ^" y3 `5 b$ m" W* p. L% z2 x$ j$ A
  8.   /**
    ( x- W" I5 A! F; \
  9.    * 构造方法4 g3 c- L8 X/ s) C
  10.    */; O, P6 B9 l7 T. e0 R6 E/ H
  11.   public function __construct() {( t0 L( Y! Q& s/ E
  12.     $server = DBSERVER;5 c$ D( d# {) p  L2 n! P9 `
  13.     $user = DBUSER;  \2 S5 @& {+ c( c' y
  14.     $password = DBPASS;9 ~" j4 y" R/ R3 \" ]& C) |
  15.     $port = DBPORT;
    0 h" q7 D' k# t! O! U" _
  16.     $database = DBNAME;' j' @! F  Q: }/ I9 h. A
  17.     $mongo = $this->getInstance($server, $user, $password, $port);; d4 h$ z5 l% J; \( I+ O
  18.     $this->database = $mongo->$database;
    ' r+ B: v! u+ y' l3 M! t
  19.   }
    + S, E. e1 H7 l. m3 c
  20.   /**7 S( x7 @2 f) @2 v. |+ B; e
  21.    * 数据库单例方法* A, f+ [! o7 [, a
  22.    * @param $server7 R8 S. P# ^$ d" e
  23.    * @param $user; H7 d: n" J" E3 t! J, K# A' y
  24.    * @param $password2 b* u9 s) R# E4 c2 [& x5 m
  25.    * @param $port4 n' @# O. j8 {: x5 q7 G  w- e; X
  26.    * @return Mongo( {  b- {* c3 u% n' P
  27.    */0 k+ |4 K* n! _6 i+ t. ?. i
  28.   public function getInstance($server, $user, $password, $port) {6 `: N  p1 i" R3 l- Z8 W- @# P4 K9 U
  29.     if (isset($this->mo)) {
    ' s& b7 `3 F1 b& @8 h; ]. e+ g
  30.       return $this->mo;  ]! }$ ]0 l7 j& e
  31.     } else {
    , r  i% p8 Y/ w' W, P$ H
  32.       if (!empty($server)) {8 m# u/ ^4 _7 S* s& O% |8 I* }
  33.         if (!empty($port)) {/ t3 F* ^- o' t# J4 u$ X
  34.           if (!empty($user) && !empty($password)) {! [* ~% ^; U6 Z1 Y8 d9 v# ^- O
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");  |! L* k) \8 X! B
  36.           } else {
    & ]# S: M8 L) v" P
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");. q2 s  P! k* P! [, O6 j, P. V
  38.           }
    : T4 e* r* T. v: i& w
  39.         } else {8 n' ^4 G6 K- e0 U( D8 \/ ^
  40.           $this->mo = new Mongo("mongodb://{$server}");
    " N% D9 R" a# M' c
  41.         }. j. O9 ^- s7 j! _- r- V1 E8 O
  42.       } else {
    8 |1 W: y) V5 x" \  {8 k& V
  43.         $this->mo = new Mongo();) q& i5 _7 ~+ ~$ m0 @6 G
  44.       }2 m' s+ I1 d9 I- G" d
  45.       return $this->mo;% Q4 O6 h* H( a9 ^
  46.     }1 b3 r; m0 j5 z' p2 |
  47.   }# n2 i  F5 E, T; _/ L
  48.   /**
      c# D4 i" k- R$ N$ P
  49.    * 查询表中所有数据  ]$ ~3 P* p1 E; `+ S& F
  50.    * @param $table( Y9 S( O. A, E" R
  51.    * @param array $where7 D9 ^5 P, f0 Z$ s# z
  52.    * @param array $sort
    + Y* f+ ^$ ?, [2 ^
  53.    * @param string $limit
    7 i# Y1 @$ G6 p  W! K( X- _& F
  54.    * @param string $skip1 Z3 R% p' b  M  b6 w
  55.    * @return array|int
    # W2 q) @+ w/ c
  56.    */4 v  y4 p( F9 k, n3 F& F
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {6 m: I& @! b' y$ t
  58.     if (!empty($where)) {  K! J4 @- X* A. F8 q
  59.       $data = $this->database->$table->find($where);4 |9 Q6 E' t' e: T+ G  v
  60.     } else {4 m! ]: ^. g+ v" b
  61.       $data = $this->database->$table->find();' e7 W3 J  n+ n2 ]0 c; k
  62.     }9 D4 P7 l' o" l# E( O1 ~* M
  63.     if (!empty($sort)) {* _( J: a$ V) `  P* }
  64.       $data = $data->sort($sort);
    / O) m; y- k, v% A6 F
  65.     }$ R0 a. @; t8 C! q5 G8 _6 v
  66.     if (!empty($limit)) {5 M: S0 o  E9 [; F. F% E2 P, _' T6 Y
  67.       $data = $data->limit($limit);
    ' ]3 C2 W, h, s4 C: v8 @  J) w
  68.     }
    & ?! H9 r7 k; e* {$ g, n: x
  69.     if (!empty($skip)) {
    - _3 b. M; `9 b8 u9 t$ s6 p2 d
  70.       $data = $data->skip($skip);2 x5 O9 `& j0 a  h/ I
  71.     }
    $ A. _9 k4 l& o2 M6 W
  72.     $newData = array();
    ; Y) G6 a" F7 ]9 S: E, n
  73.     while ($data->hasNext()) {3 S0 O% M3 a/ a9 Z1 r
  74.       $newData[] = $data->getNext();
    ' z0 R& q/ D) O$ }8 ^* N
  75.     }: C- x' Z$ L& M  e6 d# t
  76.     if (count($newData) == 0) {5 E; z3 g  N, C
  77.       return 0;
    0 f" A0 Q( Y& L3 |$ i
  78.     }& o/ c4 U" G$ G5 A2 y  t7 ?
  79.     return $newData;
    2 Q8 k) f; s5 I0 K2 n4 |
  80.   }4 n# O+ e: p& d" k7 Y1 B5 v/ _: n& b
  81.   /**
    3 q$ J6 F! I% i4 a+ ^# ~
  82.    * 查询指定一条数据
    / c6 z4 s. r2 `8 n( ?3 {
  83.    * @param $table
    , j& Q9 w; B/ l% a
  84.    * @param array $where
    4 A- m- t4 T9 X- u
  85.    * @return int
    5 v/ V* E: q  L0 g+ D
  86.    */
    : n. z2 Y5 t$ t% i& W
  87.   public function getOne($table, $where = array()) {
    6 a; f  ]  Z" _
  88.     if (!empty($where)) {; x5 y; X7 W* ?$ \) E0 G; a& g
  89.       $data = $this->database->$table->findOne($where);
    - F  p- T6 V+ S$ D3 u
  90.     } else {4 A% R  _8 W2 u6 J
  91.       $data = $this->database->$table->findOne();
    " v7 j- `, e, n# j$ d3 ^& X
  92.     }
    , C( ^( x1 _0 H/ w, `3 \2 U) t
  93.     return $data;
    3 P( Q0 q" Q5 j$ A& x+ O$ [
  94.   }
    . s6 j" M7 _( J+ @( m7 |, N
  95.   /**- Y, C" [& v( w2 n/ I
  96.    * 统计个数1 J% X& o7 u. e" ^# o4 D+ I, `( _
  97.    * @param $table3 ]6 k4 a- }* z8 v
  98.    * @param array $where+ {# w. A3 e9 m' ]
  99.    * @return mixed& L" s  {% n% o( p
  100.    */) D4 E9 ?( ~9 K
  101.   public function getCount($table, $where = array()) {' U. q" q0 y& V: z
  102.     if (!empty($where)) {
    + ^) n  Q  q  k3 ?
  103.       $data = $this->database->$table->find($where)->count();4 ]. O, Y6 m$ I0 Z9 F9 p4 n
  104.     } else {0 l; ~5 ^; K" V* ]
  105.       $data = $this->database->$table->find()->count();1 Y7 E. u* L/ }* G
  106.     }! |# d2 ~1 o/ ~# n6 h( ~& P: X
  107.     return $data;
    " x; Q1 ?. o+ I
  108.   }
    * C7 S4 {7 h& C
  109.   /**
    2 ?0 [$ W' [/ G, \( ~- c4 J2 g! K
  110.    * 直接执行mongo命令
    1 @8 E" j; ?& V7 w+ x
  111.    * @param $sql
    + {6 Y" J3 ]4 K3 F" ^
  112.    * @return array
    2 k1 A$ o4 H: H1 n' c+ d0 M$ r
  113.    */
    , B  z. f5 W0 ~: n/ B
  114.   public function toExcute($sql) {- V$ H- a( k: M, K4 M
  115.     $result = $this->database->execute($sql);
    4 S' T* O  I9 |* H. R* j0 A
  116.     return $result;9 H* i, c/ N& N7 N' O' X, A
  117.   }! b. {, g7 l; }2 z; x( P% b* W
  118.   /**
    ( t9 p% b! _/ j1 _5 Q. E4 t: P
  119.    * 分组统计个数0 c+ h  v) t; _1 D, X
  120.    * @param $table
    2 a/ t4 v; j* e& g: t5 h9 y; i% a
  121.    * @param $where  {4 @/ Y/ c; Y2 ^, Q# W* A' S0 V
  122.    * @param $field+ C# ?. _$ {/ @5 P. ^$ H3 {5 k! g
  123.    */
      h0 J# S, W1 [2 ~3 R+ W
  124.   public function groupCount($table, $where, $field) {( l1 s3 j9 A' f
  125.     $cond = array(
    2 S2 Z) |% t' r  z
  126.       array(
    8 o+ q  P; Z2 A4 z3 G- ]
  127.         '$match' => $where,
    2 ~. D; n) x" D( O" ^
  128.       ),* b2 W- E3 G( Y0 q8 F! _6 ?9 L
  129.       array() Q3 k+ _+ H5 V) c$ a7 \
  130.         '$group' => array(
    5 x  l* i$ f0 R/ P
  131.           '_id' => '; I2 Z/ E, O3 P) W( X3 I0 f4 ]

  132. 7 U: V4 m  P( d
  133. . $field,
    9 J* l( O+ @! W5 b( {
  134.           'count' => array('$sum' => 1),. c, E# l6 y3 B+ E( V, Y7 d6 P  H
  135.         ),
    , J4 V* z3 W( }4 z
  136.       ),% H6 S& @5 c2 f2 O" b, T, w
  137.       array(3 u- W9 F/ F5 r7 o* O7 H/ h: E
  138.         '$sort' => array("count" => -1),
    , q( ~; v9 ]6 X7 f: V/ {* @
  139.       ),
      P3 _* E' ^1 T4 ]& b3 Q+ P) G
  140.     );
    6 q- a' K3 {) G9 d' _0 T7 g% r
  141.     $this->database->$table->aggregate($cond);! N* p1 D0 A" l0 ?2 ]& P" y
  142.   }
    ' r$ o% g* ^- y) v8 _7 Q
  143.   /*** z* w& d' A3 y1 X: s) M/ s
  144.    * 删除数据
    7 E0 r  @1 T4 |; ?9 V+ F
  145.    * @param $table: R2 N3 Y7 a2 c) ]
  146.    * @param $where" p$ l( w; N2 g% X( S9 _3 \5 ^
  147.    * @return array|bool
    3 o, s4 v+ t# `  t
  148.    */
    + l: ]* v1 I) ^+ r; m4 Z9 `
  149.   public function toDelete($table, $where) {: y/ M- v, U- }1 m) o
  150.     $re = $this->database->$table->remove($where);; ^3 S; `# k) O* q. s2 w1 y3 R
  151.     return $re;
    3 x2 d2 ?& ?: R
  152.   }" I  G0 ~7 C0 B+ [0 j3 \6 ?" l
  153.   /**9 i: _2 w' R; g  i
  154.    * 插入数据& k" s  w! F, G3 I4 d. T
  155.    * @param $table
    . o! ?1 {1 l  f1 p4 T4 _
  156.    * @param $data- O, d; g, I7 n: E4 z
  157.    * @return array|bool, F, Q: b+ k& u
  158.    */
    ; e' }! q& ~8 A# o; K) T- j
  159.   public function toInsert($table, $data) {
    8 x3 a2 N0 F7 [1 I6 B  d  _% \
  160.     $re = $this->database->$table->insert($data);( }. Z9 s, W" c" g+ y
  161.     return $re;
    ' S- g* a  ?& x. L$ t
  162.   }+ j. g8 A; W  X" A" q$ J# q
  163.   /**
    , ?! w; r# f: ?
  164.    * 更新数据
    1 S8 R& h; L6 S8 I: a! L. Q
  165.    * @param $table) {& S+ [4 g  |+ _
  166.    * @param $where- F8 Y6 M9 L+ C' F2 J
  167.    * @param $data# Z6 K- p1 Z( `1 _3 @! C
  168.    * @return bool) Z3 p0 R. a# I( s' K
  169.    */; a4 n4 Y; q' P! q+ O5 _3 w" Z2 S
  170.   public function toUpdate($table, $where, $data) {) S  V7 l4 H/ [; o5 j- E
  171.     $re = $this->database->$table->update($where, array('$set' => $data));5 D) [1 d2 f* a% M3 W6 I7 Z4 A/ t
  172.     return $re;
    " o$ E( D( l5 |" o
  173.   }& C2 F) s1 b2 @8 K3 F9 ?' o
  174.   /**
    * Y  ^4 s. m/ O) p1 v- g
  175.    * 获取唯一数据
    ( y; S& G: `4 S( N" ^% i. Z
  176.    * @param $table
    8 B1 U' p5 i8 C  ?9 `5 [
  177.    * @param $key  n" g' U3 m8 f* [$ }! n
  178.    * @return array
    & m9 r, k+ y9 ?' b$ K
  179.    */
    ! o) p! U- Y9 |* q* o* p
  180.   public function distinctData($table, $key, $query = array()) {; F4 m2 y# S9 {  S) ]
  181.     if (!empty($query)) {
    ) f0 _( ?7 Z2 b# ~7 g, L
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);' }) K- h: O' x& G5 v
  183.     } else {
    ! ]' {; d% r" J5 S
  184.       $where = array('distinct' => $table, 'key' => $key);
    1 y% T' Q& F1 ?
  185.     }
    2 J/ {% A8 S$ o, V5 v( E
  186.     $data = $this->database->command($where);
    6 A: P9 R; Q/ a, \' G
  187.     return $data['values'];
    7 Y+ k+ _; h* z% O; x
  188.   }- q  D# E' U  ^+ S
  189. }- _/ e6 E3 f: z1 D7 L  l
  190. ?>
复制代码

2 x' t3 z" v* \: C& \4 R9 K
6 K( y& ~6 v8 B6 D3 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-10 04:24 , Processed in 0.120807 second(s), 22 queries .

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