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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。' w" K7 I9 Y6 `- A3 n/ m! \& N. ~
模式自由。3 Q+ T  g: G  M8 H
支持动态查询。
( W, [& k1 z/ ~* c5 `% T' }3 h支持完全索引,包含内部对象。; q6 n  ]7 U. d1 W6 U/ i
支持查询。
9 ]3 V' j( u# L3 C9 N6 h支持复制和故障恢复。
4 Z( d( u# M: A+ p5 }使用高效的二进制数据存储,包括大型对象(如视频等)。
1 S/ d2 B+ ]7 t6 |自动处理碎片,以支持云计算层次的扩展性/ I- g% B# h/ G9 E% n: ?) l; P/ b
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。" B2 |- W! H; Z; L! y& k- Q: ~+ v
文件存储格式为BSON(一种JSON的扩展)- L2 z* u* @. q8 `+ }+ b) a+ K' t
可通过网络访问

所谓“面向集合”(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 F3 Y9 O9 U  Z5 l8 B4 a" ]
  2. /**9 Y6 H! U, l  q# f% _' e
  3. * PHP操作mongodb数据库操作类
    ' w) O; C. E3 b$ v- X: Q- B4 Y$ R
  4. */
    ! m6 P+ ]5 x- b. t
  5. class Database {  ?. H0 v+ U( p# N2 m7 U
  6.   protected $database  = '';: @/ g5 Q9 [4 |/ G7 V0 M# C
  7.   protected $mo;
    . S9 \" ]+ Q' p% }9 A9 ~% Y/ x
  8.   /**
    . M2 u& Z% V4 I6 q, |5 O
  9.    * 构造方法, |% `4 p+ ^* Y, u* k2 n
  10.    */
    # S6 ^$ c, d: v$ S. C5 w' H2 V7 p- j
  11.   public function __construct() {% F& |0 T& @% x9 }% j! ?
  12.     $server = DBSERVER;. {: E! S' V& ?7 Y. i
  13.     $user = DBUSER;+ s4 w, ]! v8 x% W$ D- L+ Y# a, \
  14.     $password = DBPASS;
    7 K2 O7 K, m! ?8 J
  15.     $port = DBPORT;
    : j! l; ]6 M% b# U
  16.     $database = DBNAME;' c% Q/ F5 N; K# W2 @- O
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    3 N# B3 Z3 x7 L
  18.     $this->database = $mongo->$database;
    , i$ H6 M' s: p6 y
  19.   }- Y  Y2 l# l0 z. @: e0 T1 m
  20.   /**
    + D$ m% m* u$ G& U* e- s
  21.    * 数据库单例方法
    7 f! P4 U7 b0 _% _3 l( n# y
  22.    * @param $server" M6 A8 Y; I7 T, s6 ^
  23.    * @param $user
    , b! M% V: k1 x, A! u
  24.    * @param $password
    " m+ p% f2 l" K/ Y8 I* w
  25.    * @param $port5 r* U8 R. n  |; I" f- R
  26.    * @return Mongo
    ) N3 A: U: g' }) |  {/ {
  27.    */1 @2 p1 b& o4 K. W6 H
  28.   public function getInstance($server, $user, $password, $port) {7 T8 f; t) t) t
  29.     if (isset($this->mo)) {7 ^% }6 T. [! O+ K
  30.       return $this->mo;
    / x* |- P0 L2 h3 l) S
  31.     } else {! B3 ?1 u" q6 J, f5 v; L, v
  32.       if (!empty($server)) {6 W2 U7 G& {1 M" ]
  33.         if (!empty($port)) {
    * |1 U$ [" R- ?4 t. }6 }
  34.           if (!empty($user) && !empty($password)) {
    $ F: {% \/ U  ?, K) \" T; C* b
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");% ]7 d, O8 |! a# Q/ ]! X* {
  36.           } else {* q+ ?' i* V2 h! L9 g) K& ^( X
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");1 q- \/ d% C/ b) K( F
  38.           }
    2 G. C1 ]( n4 F' _( f4 q" ~- d
  39.         } else {
      x2 |! }6 U8 X0 V* G" f
  40.           $this->mo = new Mongo("mongodb://{$server}");2 f. M" {4 c6 Q; u) a" b, @
  41.         }
    # S: L; R1 [- M1 a9 H. [" [
  42.       } else {
    . v; C# l, N, f7 S, p
  43.         $this->mo = new Mongo();7 p/ E7 N5 W5 W  f8 ~
  44.       }3 I/ G( u* H( u, G5 P& `# t' n
  45.       return $this->mo;( }6 T: k& C4 ~
  46.     }
    6 z, c! P2 T8 w( z3 i$ v2 ^! \- O
  47.   }
    + }# o4 t0 U, @& w
  48.   /**/ @. X& r* j3 L) ~
  49.    * 查询表中所有数据7 ~6 O% M& X4 j0 e
  50.    * @param $table9 U$ B7 i/ j) b% e; I: a
  51.    * @param array $where# P  X9 A4 ?+ J6 m
  52.    * @param array $sort
    % r8 {9 u" b' I  h8 j
  53.    * @param string $limit  ^4 y) p$ k1 A  u
  54.    * @param string $skip
    , g1 k5 J; ~5 L
  55.    * @return array|int- C* n  x3 ?7 j7 G1 {& b7 Z4 M( V
  56.    */$ Y3 I+ M1 K5 ^) T# v3 A9 @
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    : t$ K& Z6 g- V( k
  58.     if (!empty($where)) {5 t9 {5 |( G& V" G4 }
  59.       $data = $this->database->$table->find($where);: p! E6 S% E9 E4 ]0 A5 r
  60.     } else {
    5 y+ F1 F6 \2 y, H1 L, y
  61.       $data = $this->database->$table->find();; u8 d- g- e! k3 Q7 `& W  t
  62.     }8 e7 F0 c' \. r3 w
  63.     if (!empty($sort)) {9 f+ n3 F: ?: ?: q9 w! |& s
  64.       $data = $data->sort($sort);
    9 X7 s& F6 i& M+ v* q
  65.     }7 Q4 f5 j; v6 x# ^9 |! S
  66.     if (!empty($limit)) {% O& d' a, q9 C+ A+ f. V- g
  67.       $data = $data->limit($limit);
    & ^$ ]4 }# x9 A* r& S
  68.     }2 m( M8 Y( p2 }$ P4 D& e( o) L
  69.     if (!empty($skip)) {
    . x' C2 e5 L. S5 q9 n: v1 W
  70.       $data = $data->skip($skip);8 K4 n, B4 {* i0 J7 F) Y
  71.     }
    ( `' y4 k3 X  P; C! `( \
  72.     $newData = array();
      ~$ t/ p6 a& V# m& [& d% ^: a2 Q
  73.     while ($data->hasNext()) {  _4 N0 L" j9 t( P/ Q. f# `) x
  74.       $newData[] = $data->getNext();0 V) A2 b9 ]  l2 L% `
  75.     }9 h6 p+ X* T. [* w: g+ ~
  76.     if (count($newData) == 0) {
    7 y7 i+ I( ^1 H( s: k5 _
  77.       return 0;  U* |/ B. \+ R' c
  78.     }5 l1 A& ^1 B- q# v
  79.     return $newData;: j+ h, r% J! \  R& c
  80.   }
    * p& {/ o& ]) b2 Y- s
  81.   /**; t( W; z% F& X5 B6 @$ t$ g0 |5 k
  82.    * 查询指定一条数据" G: r0 c) M  I' m, g4 U
  83.    * @param $table
    6 [0 R3 e) i/ @4 F, I& p
  84.    * @param array $where
    7 T* _9 o6 k2 }, w/ P2 t/ V) t; |
  85.    * @return int' m8 S. Q: L1 L7 U$ K7 g2 K6 X
  86.    */
    ' K) s; }* G7 H1 B* ^
  87.   public function getOne($table, $where = array()) {( A! ?4 y, K0 ^& U, I* n
  88.     if (!empty($where)) {
    3 Z2 p0 G1 S9 }* o6 u/ |( e
  89.       $data = $this->database->$table->findOne($where);
    5 D( K' C- m5 G
  90.     } else {
    ! t; [  ]# U' z
  91.       $data = $this->database->$table->findOne();' ^; G4 D. @) Y- }) R
  92.     }
    7 X; F/ n, X) s/ w4 S1 b
  93.     return $data;, y! g: X( _" |4 t' g- E) L& |9 r6 _. A
  94.   }+ t$ B$ V1 I" r4 A
  95.   /**
    . s3 ~. H3 A4 U5 }0 U' {* P
  96.    * 统计个数
    / C4 t0 x2 G/ @" e
  97.    * @param $table
    4 ]" U( F8 [  w# [1 C7 i5 A  k
  98.    * @param array $where
    6 y: N# O( y. l% H" c
  99.    * @return mixed: i2 r  A& q* v- N0 ]
  100.    */1 F+ D9 l/ l9 M+ p6 `: c* _8 x
  101.   public function getCount($table, $where = array()) {
    + o$ Q# ?/ ?5 k3 y
  102.     if (!empty($where)) {
    6 R4 B& g5 `1 I# _+ x( j
  103.       $data = $this->database->$table->find($where)->count();; f& {. @  X) K8 k
  104.     } else {
    5 {) {9 K' U; z  W$ n2 c
  105.       $data = $this->database->$table->find()->count();
    # Z7 f3 D& J9 t% t. P
  106.     }
    ( ^! q- m! r$ n  C; g
  107.     return $data;
    ! a! Y! T  Q" q% [
  108.   }- F0 U3 V2 S& z$ Y/ o" d4 e
  109.   /**
    $ d5 C8 t7 d- l: T* q5 t2 ?
  110.    * 直接执行mongo命令0 f  j+ a1 W  R7 m: T1 i  Z
  111.    * @param $sql& s& w4 K0 t6 p+ }( J; u4 S" c
  112.    * @return array
    $ F' k6 {$ ]- U8 H4 A. P
  113.    */! B6 b% F0 ?8 w0 f& @
  114.   public function toExcute($sql) {5 `& T" d; ?2 [: M
  115.     $result = $this->database->execute($sql);
    9 S! N; t1 t4 O3 G9 V9 F
  116.     return $result;( @, r6 z" g5 [# E. b
  117.   }( p9 W3 r+ F5 u1 x, d& e7 C/ m
  118.   /**
    " v& k8 T2 r, Z4 k1 E0 s) F) R* Y
  119.    * 分组统计个数
    # ^+ o' ~7 B9 R! K
  120.    * @param $table7 T" L' N% i+ Q
  121.    * @param $where. Q" m0 K) K0 \. M; X# b4 }
  122.    * @param $field
    & w+ R5 o/ G8 W( |% @
  123.    */
    / i* M/ J/ n0 s6 ?7 T5 V
  124.   public function groupCount($table, $where, $field) {
    . ^% K8 f" ?, S* _2 \
  125.     $cond = array(" J1 ?/ C( A# o8 E, o0 H0 o' R
  126.       array(
    % i0 Z7 q  \! _( a* ?) Q7 `* j- j
  127.         '$match' => $where,
    . U9 Q! c1 g  o
  128.       ),0 K( B% J" B4 z  G
  129.       array() J  F6 X: i5 l4 @
  130.         '$group' => array(
    - J# }: y2 m: m! d6 n: j0 C
  131.           '_id' => '
    ; c2 d6 M* A4 e0 @' Y- r# }2 N
  132. $ z; x% A. a3 u2 s+ ^
  133. . $field,% ~: b) e5 H2 |* T; u2 E5 _
  134.           'count' => array('$sum' => 1),2 D9 A5 t" L9 u: J8 F5 _
  135.         ),
    # Z" y6 l# C% b- E( g
  136.       ),# O7 ~# l! g. }- A% s
  137.       array(0 k% a! J3 t1 D; D
  138.         '$sort' => array("count" => -1),
    ' k% |5 B  q. f
  139.       ),: L, V( q! g. d. Y/ u3 O% h
  140.     );5 |0 @( t, o$ s8 P
  141.     $this->database->$table->aggregate($cond);% z8 G; \1 ]" \% R) P
  142.   }
    ( W2 H$ u0 ~2 S" o/ S0 p0 n
  143.   /**
    9 \* O1 t% c+ }- l# q
  144.    * 删除数据
    2 e) Q7 a, _# [5 ~6 B* ?
  145.    * @param $table8 v& a1 P) C+ S( o" F9 y* a
  146.    * @param $where0 ]2 T0 Q* v. E  y
  147.    * @return array|bool
    * t3 N" K' y" F. |$ l
  148.    */
    : W8 q, j; o( Y: z/ U- l) Z& b! Q
  149.   public function toDelete($table, $where) {2 O: g; z* o4 z3 b# k% K  V+ M, k3 _
  150.     $re = $this->database->$table->remove($where);2 H4 T; V# Z+ W, O9 n
  151.     return $re;
    8 L, e6 p4 O2 T# _# u& ?5 n6 b
  152.   }
    / f# S/ x" n+ y4 [4 q! j0 h
  153.   /**
    ' G% R, t4 }: {1 h1 G
  154.    * 插入数据4 A4 D3 b: ~) U$ Q7 _
  155.    * @param $table
    / Q8 b# }3 z% t
  156.    * @param $data
    # k5 D0 Y& P8 c
  157.    * @return array|bool
    2 Y* d: F+ x; D3 Q8 E9 ]# y
  158.    */
    ) z0 l5 U$ M) H+ B2 u
  159.   public function toInsert($table, $data) {
    . f7 T% s* w- K+ d# r5 w0 o: ^% z
  160.     $re = $this->database->$table->insert($data);
    : R* n7 R! O: c8 I, q6 C6 [6 A
  161.     return $re;
    , x" y  x& x: Q# |5 B. X9 o
  162.   }
    2 G! s( o- }2 }4 F/ A( O0 \/ J
  163.   /**
    6 B( I" \  t2 p$ g
  164.    * 更新数据$ \- K# O) K" C2 v7 x3 _+ F
  165.    * @param $table+ a- C/ X+ ~- i0 V1 C6 v
  166.    * @param $where4 m3 k4 Q1 t7 o$ Y& o
  167.    * @param $data/ B: B/ {8 A$ b0 h  u
  168.    * @return bool
    - |3 S5 u- V$ }5 Z6 X0 B7 Q  y
  169.    */- B; S  i- Z4 V( _5 G' r  |
  170.   public function toUpdate($table, $where, $data) {8 s3 r# S) D7 ~6 p& x; T$ f( C0 c
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    1 b  B# G0 e, Y
  172.     return $re;
    8 G" X  H& e  m
  173.   }0 v. F0 m3 B# U
  174.   /**
    + D5 i0 {6 m  T' N
  175.    * 获取唯一数据: |8 j/ x9 O  }) Z; `' p/ G4 D
  176.    * @param $table
    $ |  C; i" _9 R; K4 x8 s" j- U& Z% s
  177.    * @param $key
    ' o/ b. ?1 f% [$ |
  178.    * @return array* ~1 N# k- t6 Z
  179.    */  F4 e3 v6 S5 Y
  180.   public function distinctData($table, $key, $query = array()) {$ H2 Q; f9 ~3 b' q5 y# r: {
  181.     if (!empty($query)) {
    + `* z0 j; V7 P
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    9 J' P0 t* h$ c% Q5 i
  183.     } else {: G9 J4 Z4 `4 ?9 q; y& R
  184.       $where = array('distinct' => $table, 'key' => $key);" R3 X, L8 l  f+ C, O
  185.     }" G& S  |! X& B' q8 ?9 P
  186.     $data = $this->database->command($where);4 G8 L  z9 o6 ~: a/ t
  187.     return $data['values'];
    " {. C# ~' E+ k. _6 ?. c* A& \
  188.   }3 f: J+ R% H% i) g/ i
  189. }
    ' t4 `5 i7 _5 m, U( @9 }. v
  190. ?>
复制代码

/ A! ?9 ]$ q8 h) V5 J" t3 z7 G& H0 b0 a
; m# o3 h5 m9 `9 Y3 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 00:00 , Processed in 0.057152 second(s), 20 queries .

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