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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。6 `- i5 f7 c3 `0 l/ y* E3 M# J6 |
模式自由。
4 r3 f" R# y( r7 R" w& a& B! @支持动态查询。
- S" |; q) ^( c, t支持完全索引,包含内部对象。; a( h9 n% w' J  t. r) B4 y
支持查询。
1 h* l' P) {6 W' V4 S+ @% j支持复制和故障恢复。
0 M4 v8 b/ m$ k+ I8 t+ j使用高效的二进制数据存储,包括大型对象(如视频等)。/ a5 \9 Q4 c% \& y3 v; {7 y
自动处理碎片,以支持云计算层次的扩展性
, ^( m& L. p/ b5 P) a支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
& y" U8 k" _0 n" N1 b' l  ]文件存储格式为BSON(一种JSON的扩展)% t/ k* h' e% }* e
可通过网络访问

所谓“面向集合”(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
    + N) p3 _3 k' w0 ?* n1 d# {
  2. /**0 Q& e, A0 x5 L  l0 W: m: W! G
  3. * PHP操作mongodb数据库操作类0 F& d; W0 u9 j9 B) E, h5 ]# U
  4. */
    5 I- X! f6 h$ {$ n
  5. class Database {
    9 S# ?  U0 {0 _* e
  6.   protected $database  = '';
    2 ?2 R' D3 P. ~! G& _9 W: j
  7.   protected $mo;
    6 Z% c6 O9 V2 }/ v
  8.   /**% k4 m9 N& B' y2 G
  9.    * 构造方法; E- B9 I( Z9 y# _. S
  10.    */* \. `* y3 J: c  F
  11.   public function __construct() {
    + [$ J* U) F7 k8 B( Q6 C
  12.     $server = DBSERVER;
    1 L9 V# n: X& Q
  13.     $user = DBUSER;
    ! _2 c& [" Q. p7 J2 m
  14.     $password = DBPASS;
    - {( g0 Y# z1 \$ |5 B& c: Y
  15.     $port = DBPORT;9 q# _8 V& p( f, }' ?
  16.     $database = DBNAME;8 [7 s# @+ m- A6 b
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    3 z+ c$ Y& y1 W9 ~3 u. A7 A' s# ~
  18.     $this->database = $mongo->$database;
    " m: |3 n6 ]5 W2 z' a
  19.   }* g" i8 v) L6 W! ]; C
  20.   /**
    / z8 A* ^9 P% g& e, W% l
  21.    * 数据库单例方法& t* z, u# p. X& P9 C4 D& f
  22.    * @param $server
    : ~3 L& C& ~/ \! `( c5 |8 p
  23.    * @param $user
    0 b! }0 m3 W$ Y+ c5 v9 p
  24.    * @param $password8 e* T. \' ^# M" w
  25.    * @param $port. N9 l# g1 m. E. {8 r
  26.    * @return Mongo
    8 n/ {* i" O7 |# b; L6 N
  27.    */
    % @$ E* L9 J* V" b3 d! {3 ]
  28.   public function getInstance($server, $user, $password, $port) {
    , a" J" r$ m# x, N2 d" A
  29.     if (isset($this->mo)) {
    ' j" j3 H( Y/ m1 ^0 v  E
  30.       return $this->mo;
    * F+ Q$ [' D" L, F
  31.     } else {: {; y, N( P4 x- \
  32.       if (!empty($server)) {
    ; D6 `; s1 c2 c! N' m. j
  33.         if (!empty($port)) {/ _# ^+ k/ @; X+ j
  34.           if (!empty($user) && !empty($password)) {5 A, P4 C- w3 ^  E$ Z6 \+ h
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ) F2 Z$ ?3 u$ Y! M
  36.           } else {
    / ?4 u; }0 k/ N+ v% c/ T& Q
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    * q/ e1 Z/ o8 r& H" b+ W% S4 h
  38.           }
    9 [( @$ A& i3 e$ Y
  39.         } else {6 V; C; ^: u0 c+ K
  40.           $this->mo = new Mongo("mongodb://{$server}");2 }+ X! ^+ f5 h+ k
  41.         }
    - S% u- Z: m" V
  42.       } else {. I6 T, q% f- C% c! D' P
  43.         $this->mo = new Mongo();" \0 t- Y6 z) u0 [0 K0 }9 D
  44.       }
    " \# ?3 ~' u+ B1 |0 Y
  45.       return $this->mo;3 v" m" X4 N7 s+ t8 `
  46.     }( J1 \6 J3 _: B  s! L3 q& g
  47.   }
    5 H. z7 f, X0 r) {  l0 V; ]
  48.   /**) Q: @& \% Y7 T" D) l  I) l3 j
  49.    * 查询表中所有数据
    + Z( A0 ^- F1 M4 F3 z
  50.    * @param $table$ E+ _8 P- I) F" ?  l
  51.    * @param array $where
    1 @3 }) ~  f" d
  52.    * @param array $sort
    0 K  j" {5 Z1 y: W/ m! f  F
  53.    * @param string $limit
    % k, K9 a# ]# V" _
  54.    * @param string $skip% }. x; ^' i( j0 }! ]
  55.    * @return array|int
    . [6 |5 {) R- y" _0 D) U- B
  56.    */3 b) D, O2 Z" R' m0 z# r) {
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    3 j3 l1 S) _7 W
  58.     if (!empty($where)) {
    ! T* G6 H7 @' S0 i5 J5 i4 G
  59.       $data = $this->database->$table->find($where);
    ( m2 e8 T4 M) }( l+ q" l  N
  60.     } else {% O) V' U  l1 R9 m: K; O
  61.       $data = $this->database->$table->find();% s2 s$ V1 L$ j- j1 m4 N- _
  62.     }$ ?: b6 ?) f2 k6 F$ K' w  Q9 T+ p) |
  63.     if (!empty($sort)) {
    7 t- l3 S  R- i+ |/ G' \
  64.       $data = $data->sort($sort);
    - v$ o! A$ W# v
  65.     }5 e2 j% S3 d* ]0 x$ A8 [
  66.     if (!empty($limit)) {
    : ~1 y" u' l: \7 M3 Q. `
  67.       $data = $data->limit($limit);9 M( a% l$ Z2 K+ L. R0 O2 U
  68.     }/ S1 V9 i  o2 b+ J! L; q$ A/ F
  69.     if (!empty($skip)) {
    # I4 J( |: V, _! D
  70.       $data = $data->skip($skip);8 l7 @5 L" f$ U5 s
  71.     }& T% h+ J3 h- M1 Y) t
  72.     $newData = array();" y3 `" A; |/ Y
  73.     while ($data->hasNext()) {, }( U" T2 Y, w7 Q+ m! s* e5 C9 J
  74.       $newData[] = $data->getNext();5 B3 v$ r7 ?  T7 ~  G% Q
  75.     }
    8 E( l1 B& ]& x. O) w5 ]$ p1 }8 @) n
  76.     if (count($newData) == 0) {3 \6 R5 ~+ z6 J0 [
  77.       return 0;9 e0 S' Y3 R1 s& A0 J
  78.     }4 c! r$ P4 }/ ~6 |! V
  79.     return $newData;
    ! n5 f4 t3 G! X0 E; ]* [4 m
  80.   }% {; e+ I( d. M  W2 r& E1 ~
  81.   /**; o$ T: ~2 o0 a
  82.    * 查询指定一条数据; l0 u3 q- d7 M# j2 }8 u) _2 x; |
  83.    * @param $table! c& a: s' _+ P2 j* V: @
  84.    * @param array $where) s1 D0 N. w! y1 E& I! U' J5 N2 W
  85.    * @return int9 l/ u) I0 H4 l, x" y, X. O, l
  86.    */! t8 P! U2 C: L9 z
  87.   public function getOne($table, $where = array()) {
    ' `4 Q. E9 ^% n" s- ]! M4 `5 [: V
  88.     if (!empty($where)) {6 Y* O0 d" |0 G
  89.       $data = $this->database->$table->findOne($where);
    9 k1 Q& F" S. L/ _
  90.     } else {
    2 D9 G( T  x8 T
  91.       $data = $this->database->$table->findOne();: @- T5 ~# q- z. S
  92.     }/ f8 K, P  m4 p- g
  93.     return $data;& q$ S. W/ R7 M' O+ E) {3 A5 |
  94.   }
    # P$ p& u! \. U
  95.   /**, S, U  G& }& C# [5 E9 a
  96.    * 统计个数
    ) M9 I! ]: o8 x9 d9 I8 f
  97.    * @param $table
    2 }6 i; Z, G/ W8 D8 \, x
  98.    * @param array $where1 }; `( w; o( N
  99.    * @return mixed: ~7 ^6 X. ^; V5 D' X2 x- [; E" Y
  100.    */
    ! v4 x  C. i. K& ]
  101.   public function getCount($table, $where = array()) {5 }; @' |: y! M- {2 K
  102.     if (!empty($where)) {* e! Z7 i/ t2 d  g( p; _5 ?3 Y, p
  103.       $data = $this->database->$table->find($where)->count();
    * x' T! G7 m/ i1 }" K
  104.     } else {7 F5 J5 F- v. ?, ^
  105.       $data = $this->database->$table->find()->count();+ L/ h0 Z2 R% z$ m6 V3 Y
  106.     }
    # _0 g& M& f' z4 o' R# t$ W
  107.     return $data;5 u" [+ d$ m6 `# m. P# u: A
  108.   }4 f- r& y$ ~. @5 h6 u
  109.   /**' |. c; k; I5 u: t0 Y3 e- {+ w2 E
  110.    * 直接执行mongo命令
    7 l$ z9 o$ D; S8 a
  111.    * @param $sql0 `" @+ Z+ N$ @& L
  112.    * @return array8 k3 ~4 a0 u; S2 V6 R' x! w
  113.    */
    ' _$ J4 C' w7 w! t3 r
  114.   public function toExcute($sql) {
    % V* Y2 n, G7 u$ l
  115.     $result = $this->database->execute($sql);1 `: A9 \7 ~3 v. u
  116.     return $result;& I6 F" O9 S1 ^) c: G9 j
  117.   }6 V! R1 i; D' w5 T  d
  118.   /**
    ' P, t) f1 _7 }
  119.    * 分组统计个数! ]' V+ V0 y& T% s
  120.    * @param $table- X& f% Y0 m, `- W
  121.    * @param $where, F% T: k* d" M$ ?/ N: F: ?
  122.    * @param $field
    ! F$ u( k# t5 e  f0 ~5 m; S( A
  123.    */. i4 Q  l* o+ a( @) u
  124.   public function groupCount($table, $where, $field) {
    , a+ z9 g& B  {
  125.     $cond = array(
    7 x' n% ]9 Q3 M) f( Q4 G5 b
  126.       array(
    4 a$ K1 S5 ]- ^) k/ u
  127.         '$match' => $where,
    $ L7 J/ S, F" j) I0 b; j
  128.       ),
    + v5 s& i- Z% u  V3 c& l2 j  y
  129.       array(  J5 |% n2 Q& Z2 t! e3 [& `
  130.         '$group' => array(
    $ M. p8 [$ X% [1 o$ `
  131.           '_id' => '
    4 F4 J0 M1 Z* u$ n4 I: V9 c
  132. 2 I. O4 a% x4 j* s7 p$ g
  133. . $field,
    : d. m/ r. s9 L$ b& q8 w0 h
  134.           'count' => array('$sum' => 1),( M! ^& w$ T1 w# S
  135.         ),6 f: U2 I0 [; S0 p* m8 A7 N
  136.       ),+ V1 Z; }; d: Y
  137.       array(- y5 J5 R: p& x/ N  A
  138.         '$sort' => array("count" => -1),
    / `7 c  V# ?& d5 x. d( T' x
  139.       ),. F% x+ O7 U4 @6 Z
  140.     );* k5 L! o' `  q5 t6 w0 n# n
  141.     $this->database->$table->aggregate($cond);
    1 u' [2 H& |: ~; |& z
  142.   }
    : @, a% Y& n/ o3 {
  143.   /**7 Q/ @! t, }" U6 U
  144.    * 删除数据
    " y( S3 F5 |4 r% J
  145.    * @param $table
    # W8 P; y- e: u. [  @- c& E5 O( ?
  146.    * @param $where
    7 l. r# f, X2 W1 I6 l& T
  147.    * @return array|bool, X# n6 p& {# o9 @/ h8 M& B
  148.    */# M7 u* u1 |, _/ {
  149.   public function toDelete($table, $where) {
    7 z1 ~& f$ Y7 `: C% \& v1 F. H
  150.     $re = $this->database->$table->remove($where);
    * l! C% D/ J7 m5 K- Z* \2 C
  151.     return $re;/ U- O8 k! D* w
  152.   }1 B/ ], X( Z9 l( K& F0 m6 J
  153.   /**
    5 A6 |- W% E! n) c
  154.    * 插入数据2 ?+ q- b. t# p$ j
  155.    * @param $table
    " x- R7 s% M# H0 S( D
  156.    * @param $data: ^  N4 b1 T/ ~! i$ ~
  157.    * @return array|bool
    ; f( m- A) S- Q3 Y) L  c& u9 p
  158.    */
    # B4 x0 f+ \, K4 E; u9 p6 [# Q- H: c
  159.   public function toInsert($table, $data) {
    8 C* o7 ]+ c8 B1 X8 y( k. `5 D
  160.     $re = $this->database->$table->insert($data);4 Z% D! h+ T; c( ^- e% D+ B7 ~
  161.     return $re;1 Y5 T* u0 F% H$ l' M& r
  162.   }& O& A* b; D) G# [9 M
  163.   /**; O. c) k4 _5 _  R
  164.    * 更新数据  u% @" i: C/ g/ I
  165.    * @param $table" D- g' S, s% q9 C
  166.    * @param $where; ]' I* N# l- d- V2 w
  167.    * @param $data7 G$ b2 O8 Q# V5 ?9 s! e6 W
  168.    * @return bool
    9 D' h5 }1 l# F6 Z1 p3 h
  169.    */: z- q: W. N/ k0 \* X1 k$ G
  170.   public function toUpdate($table, $where, $data) {
    ! C' X1 l0 q4 y" h
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    ' v- Y9 M& B0 N, j
  172.     return $re;6 c: S' S+ |6 b; [% U/ T
  173.   }
    4 ^% q% K9 Y& z
  174.   /**
    * l8 k) r) T; Z- B, {" F
  175.    * 获取唯一数据
    * j5 m1 l  _8 S4 ]2 b
  176.    * @param $table$ }% _5 A  S5 d
  177.    * @param $key2 I/ z9 |4 Z2 F( S2 a
  178.    * @return array) g/ l$ K* u6 j1 z
  179.    */
    ! h; e" z5 a- Y7 R7 ?
  180.   public function distinctData($table, $key, $query = array()) {$ T0 i- d# X5 u! R. ~1 Q0 M7 f& a
  181.     if (!empty($query)) {3 H. [/ B8 A) f
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);& d& `4 Q$ o4 r$ n
  183.     } else {0 [& e% ^) C; g5 y6 D) o& a5 F- }& V
  184.       $where = array('distinct' => $table, 'key' => $key);
    " b( L. x% c: g$ v+ G7 z0 r+ D7 X
  185.     }
    6 a4 }5 V' n& X7 }8 E, j8 z! r
  186.     $data = $this->database->command($where);
    : A% n' v; e% a3 H! s
  187.     return $data['values'];
    5 p3 ?7 s& U. r3 ^3 O
  188.   }
    ) F: U8 V6 U: @9 F! J
  189. }; d, G2 a. ^" R( I2 v
  190. ?>
复制代码

; V  J( q3 N  {7 w) G4 E) ^- S9 f) m+ W3 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 07:08 , Processed in 0.050531 second(s), 20 queries .

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