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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15746|回复: 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 c7 Y  B$ R
模式自由。# d8 G& C8 ^2 m# o- s' e
支持动态查询。
6 b8 I9 \' _- I. R8 K支持完全索引,包含内部对象。
/ T/ j6 B; m- h* W支持查询。5 F: w8 _+ \  K6 s7 f6 {/ q
支持复制和故障恢复。0 `/ x9 U  Z: i0 n9 d- I+ M0 g5 J
使用高效的二进制数据存储,包括大型对象(如视频等)。3 t. C3 T* _) J6 r4 I: B
自动处理碎片,以支持云计算层次的扩展性& C& }6 B# v/ p
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。% G$ x' O% O5 @- T7 O3 X
文件存储格式为BSON(一种JSON的扩展)
6 g/ t( E  b8 J5 p. D可通过网络访问

所谓“面向集合”(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" W/ k+ w% M- p
  2. /**
    2 |- V1 M# @! j: \$ D
  3. * PHP操作mongodb数据库操作类
    ' R# U, m7 F5 {2 I/ z
  4. */
    ( k- l' w. b, W
  5. class Database {. F- X& e: b! B: ]/ q1 L$ y, w
  6.   protected $database  = '';, l7 C; E& `2 f5 h$ k& u
  7.   protected $mo;
    $ |2 J9 c6 m5 r4 {, N# _' M0 w2 G( ~
  8.   /**9 |3 T$ h% b# B* m0 p$ n
  9.    * 构造方法+ C2 E6 ~! s6 X. j
  10.    */
    ( y! B) Z0 z( G# t" Z
  11.   public function __construct() {
    ; k8 D: l, d/ h
  12.     $server = DBSERVER;# u  {9 j6 b; \' l/ L1 F* G
  13.     $user = DBUSER;+ z! ]6 w0 c5 ]# j( A3 P
  14.     $password = DBPASS;
    + l2 w  v: _  b! _4 R7 d
  15.     $port = DBPORT;% j; O  w% ]; ~/ q4 U) E
  16.     $database = DBNAME;
    $ U: M: Y: M# m# G" m* Y; E* p' H
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    0 M5 T7 }# l' l! F' b
  18.     $this->database = $mongo->$database;
    1 w# H+ z2 B! Y) Q# T6 X
  19.   }
    & T2 O! L0 G7 _; K6 W9 O
  20.   /**
    & c) B( ^1 U: \" Q' X+ g
  21.    * 数据库单例方法& b4 L! S/ Z$ ]6 ~# |# R4 h
  22.    * @param $server
    , }7 R" ^# u% a* V
  23.    * @param $user
    8 `3 z: i7 s/ w& \  r3 d' o
  24.    * @param $password# d) o1 ]( s! b, h$ m5 {
  25.    * @param $port3 d: Y3 R8 p7 \+ x
  26.    * @return Mongo# A2 w2 i' p, ]! y+ B! E* W
  27.    */, `  m0 h; W: ~8 z: b4 B. l
  28.   public function getInstance($server, $user, $password, $port) {
    ! P& H/ j! p8 k/ @$ R& v8 `; X
  29.     if (isset($this->mo)) {6 ?4 i0 J- t4 Z7 Q, Q+ I- [4 U
  30.       return $this->mo;
      `6 H6 p) [0 R
  31.     } else {1 g+ ~8 @9 [" \6 T# _  {& F$ P4 O
  32.       if (!empty($server)) {. T8 v4 {0 N# m" m4 D: Z
  33.         if (!empty($port)) {4 V8 Q9 z$ J4 E/ o
  34.           if (!empty($user) && !empty($password)) {4 g  p9 v& M9 ]( Q
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");/ _% ?) F# j; N  d
  36.           } else {$ o5 H! s' x; W. i, l9 i
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");4 Q" d. K) q6 C1 c+ ?. E9 G+ W
  38.           }) E4 {; F% Z5 Y& u6 A
  39.         } else {$ S* g) I$ H2 w9 k2 g/ \
  40.           $this->mo = new Mongo("mongodb://{$server}");9 v# S! V7 |1 t) a3 ]  O% I& P/ m
  41.         }
    % c) J5 X. ^7 d+ h4 u5 {
  42.       } else {1 Z" @) @9 o8 f' a+ p' m/ _- L/ Z( K/ H
  43.         $this->mo = new Mongo();
    ' F" Y4 G9 E% }$ [2 \* @
  44.       }
    / Z, j# Y+ U1 K1 A9 B
  45.       return $this->mo;/ L9 a+ J; f- d1 Z
  46.     }
    6 a3 ?0 {4 T/ a6 a; Z+ `
  47.   }& y) Y2 x8 V) K3 t. i
  48.   /**
    * i2 _9 m2 B( v2 A
  49.    * 查询表中所有数据  v& k  F! |) Z1 a
  50.    * @param $table
    1 M8 U! r0 c7 h1 T* L% q
  51.    * @param array $where
    " J0 p( o! J3 ]6 `- F$ _
  52.    * @param array $sort. x. h% f* p8 A  H( i2 ~
  53.    * @param string $limit1 M7 w0 x  N0 k' A
  54.    * @param string $skip
    1 a- f3 w9 _2 ~8 k+ J* {# c
  55.    * @return array|int
    ; j+ j4 n5 B4 c& F/ i, c  f& }
  56.    */
    ) G$ q' C4 ~# d+ n$ {; u
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {) S# V! \4 N% I# {9 g
  58.     if (!empty($where)) {
    , R6 z( y& @, Y+ T! G
  59.       $data = $this->database->$table->find($where);6 A  D1 B1 r6 _0 t+ S
  60.     } else {0 X: u1 @, ?) `& x6 P
  61.       $data = $this->database->$table->find();: j: C) ^# E% \' [7 q
  62.     }
      Y& ?, E4 Z6 c: }/ p
  63.     if (!empty($sort)) {
    + D0 T* M" ?7 p( ~; _! b) h" b- o" ~
  64.       $data = $data->sort($sort);* M; S2 j" E3 O, k7 ?
  65.     }: q/ f+ d9 ]2 G7 n% A% q& P
  66.     if (!empty($limit)) {3 Y. d" ^+ p1 q- V) r0 Q) z& i) i+ A( t+ d
  67.       $data = $data->limit($limit);
    ; b/ s2 P* T# w2 R
  68.     }
    7 p( U9 ]0 N$ F9 {
  69.     if (!empty($skip)) {* u' }* k$ L7 U+ c& c
  70.       $data = $data->skip($skip);% H& @- R' M, b  f/ O8 {
  71.     }! u0 v) x9 u0 g+ m7 b
  72.     $newData = array();
    2 J2 b4 m) U# Y8 H# a
  73.     while ($data->hasNext()) {+ T! O) d* Y% s, w* k
  74.       $newData[] = $data->getNext();' e4 S# K$ t" w3 f/ J
  75.     }
    2 l7 J6 v0 h9 {: |- ~
  76.     if (count($newData) == 0) {3 J0 k7 ~; d# n" N: R' h: U: z
  77.       return 0;4 ?/ t. d0 C/ D. }4 Y8 d  X
  78.     }, z+ J+ R! \/ w' F" v$ y
  79.     return $newData;
      P% j" }$ o- g2 B
  80.   }% M, k5 z. b- i- E( i
  81.   /**; `7 Z9 \- D* @0 T" q
  82.    * 查询指定一条数据
    , X* i( I+ }* a9 w. ~( G2 N  Q% r4 E
  83.    * @param $table
    5 U* t$ }1 u7 r6 H# Z( g
  84.    * @param array $where
    8 G. S9 Z6 ^+ o2 r3 ~
  85.    * @return int
    9 @  A1 b3 q6 o% X
  86.    *// g/ X! u0 m6 _! I- F6 p0 K2 o$ G* A
  87.   public function getOne($table, $where = array()) {
    3 B; u/ B' F1 N
  88.     if (!empty($where)) {6 ?1 K# i3 @* @1 U. M# H) \$ ?$ [; N
  89.       $data = $this->database->$table->findOne($where);  Q4 A- v. Z# n/ I- q
  90.     } else {5 d0 ?( b" }% q# k) s9 X
  91.       $data = $this->database->$table->findOne();3 t+ w. K5 g7 y  x9 `
  92.     }2 T8 q) }/ b6 p6 |  m' N
  93.     return $data;
    ( @+ O: v. f! M# r; h6 C
  94.   }
    ; p9 p6 _; T" R! y
  95.   /**
    ! `' G4 D& n9 }" v& r$ w
  96.    * 统计个数
    ( @3 s1 d, O  x2 J9 X! ~  F+ @
  97.    * @param $table; P' F! e& B+ U7 ~7 ]  [
  98.    * @param array $where0 ~8 C; \9 s9 p
  99.    * @return mixed
    7 P! r9 d' H: N; k1 m4 w; H
  100.    */
    # w9 j* E7 m! E! u" i0 z
  101.   public function getCount($table, $where = array()) {
    ! h/ s8 ~9 `3 l7 c1 \
  102.     if (!empty($where)) {! K! t/ `2 ]6 D. |$ c4 K$ s8 `  `& \5 q
  103.       $data = $this->database->$table->find($where)->count();! o( v# E, O6 O$ w+ ~( S
  104.     } else {
    / ~, T1 s2 ^! Q' Z0 O2 D0 S$ W! a# D
  105.       $data = $this->database->$table->find()->count();
    4 [/ k$ }* a0 S) K3 N
  106.     }
    " R6 v% Q2 |* A6 a3 Z
  107.     return $data;
    ' T) F; i5 z, L( O+ Z' ~* j( \
  108.   }
    6 S" ?% h, a/ q
  109.   /**
    + n; Q* Y) `- `6 z$ v/ m
  110.    * 直接执行mongo命令
    - `+ S1 Q0 v3 x" N
  111.    * @param $sql* K+ d- l' \0 X4 J& {
  112.    * @return array9 B9 M# A& @/ }6 z2 r
  113.    */
    ( i8 |* c+ q9 n% b9 p9 X  t; n
  114.   public function toExcute($sql) {
    + V* t; `1 L2 ~1 B: m+ l) A
  115.     $result = $this->database->execute($sql);
    ' P$ v$ B4 T% A) I; X
  116.     return $result;6 }# G& ]3 z/ S# C) n" n
  117.   }
    % }. U; d& I) @9 E" w# {; `
  118.   /**
    / i3 ?) h. O/ k
  119.    * 分组统计个数4 Z$ h5 r" b5 Z, U" X. h2 C  _
  120.    * @param $table0 d. J6 l/ P) X7 Z4 `
  121.    * @param $where/ e* p, x8 o) |( |7 z
  122.    * @param $field
    4 C! ?- @8 `3 u
  123.    */
    $ y. |9 A- D) H+ R- X
  124.   public function groupCount($table, $where, $field) {$ h! N2 g& ?# e; E: W4 E. X5 J
  125.     $cond = array(4 H5 G% b# U4 |: K  [
  126.       array(
    " N; g1 e/ j/ \) n. h3 C8 S2 O
  127.         '$match' => $where,
    5 [8 P/ h* U2 R1 x# T! c
  128.       ),2 \& x9 ~" r: |) Y/ g! `+ b
  129.       array(
    * w- m9 M! d: K5 g3 c2 X! ^) C
  130.         '$group' => array(
    9 i/ \- k' I8 r
  131.           '_id' => '
    3 G: }; b' d* O) m0 z4 ~
  132. ! y; j: |5 L" M6 E; c( l5 S( z9 q' @
  133. . $field,
    1 j& \1 P$ N$ A0 Q+ ~
  134.           'count' => array('$sum' => 1),
    0 @+ |. g! Q8 U! O$ {. J
  135.         ),
    / T1 r+ q! ~8 s1 V3 P; r
  136.       ),$ ]+ P, s: V0 f
  137.       array(
    3 y$ Q  f. h& b  v1 Y
  138.         '$sort' => array("count" => -1),4 o7 ]$ ~  W1 B9 m
  139.       ),+ R) @% z2 U+ f" Q+ P+ ^, I
  140.     );) |  l3 i+ q/ u, v7 m- [: k
  141.     $this->database->$table->aggregate($cond);
    8 t- i/ ]0 C5 R4 }' F7 Q
  142.   }1 T9 O& M2 M( _: g( d
  143.   /**: L7 F% }+ ]! [) g- I
  144.    * 删除数据
    ! t/ P. U2 a9 `( d! j0 _
  145.    * @param $table
    $ u8 i4 x* b7 B$ L- M) h
  146.    * @param $where2 X( c) b1 b2 u! b) ]
  147.    * @return array|bool
    - J9 ^$ b  t) V; d; K
  148.    */
    4 @0 u3 c6 `# e1 l# V) x
  149.   public function toDelete($table, $where) {
    8 H$ e7 a# t( P% L% C9 b0 s* G
  150.     $re = $this->database->$table->remove($where);9 A  K& n; ?  _) Z1 D3 L0 W
  151.     return $re;
    ( x* _$ k$ _* Z# o
  152.   }
    ' h, c4 L" m; e6 ]1 p/ Z
  153.   /**
    ) N: o2 G' k9 M/ ^
  154.    * 插入数据
    - ?& m- P; D7 V, f6 O* Q2 E
  155.    * @param $table0 T5 n! ^0 r. X7 Y; \( p4 T! H7 h
  156.    * @param $data
    6 f5 v. \/ r1 X+ X7 q
  157.    * @return array|bool! J; x% a" U2 T/ i/ `6 t
  158.    */
    " P. W2 U- d- N, P6 D( k* I
  159.   public function toInsert($table, $data) {
    2 G- K7 m- U6 g$ l* i4 Q1 L
  160.     $re = $this->database->$table->insert($data);8 \1 E3 }) u  _# p7 n: h
  161.     return $re;
    7 W( M! n, O; Y/ b( L5 v3 a
  162.   }% Z2 m/ i1 |$ \' x* N" W
  163.   /**
    # j5 T/ O- }) b, ]5 Z- q$ u6 Z3 N. j
  164.    * 更新数据1 a9 Z& u* v6 O7 c
  165.    * @param $table
    * m. x" A) Y6 \$ C1 z% Z
  166.    * @param $where
    : G# Q7 k7 O% P
  167.    * @param $data$ G* E3 l. Z8 m0 C) A, f
  168.    * @return bool4 N. A" N) J. D/ d  x- ^3 a
  169.    */
    9 }8 X  ?% ?9 O. d
  170.   public function toUpdate($table, $where, $data) {
    . |- M1 f7 d8 h% d1 L
  171.     $re = $this->database->$table->update($where, array('$set' => $data));( L5 f2 z$ J* H" [3 F6 ~! ]; D7 f* v
  172.     return $re;
      h% @% L% h2 i( C
  173.   }2 \, i2 C; R; x$ |2 f9 k4 Q
  174.   /**
    9 E8 [# I* {4 L7 T( b* f4 J
  175.    * 获取唯一数据0 f' X4 P( F: g: E, d4 f9 Q. B/ m
  176.    * @param $table
    - @! b# D2 c% T0 z6 j
  177.    * @param $key* ?" F3 ?. P( e" B: \6 v
  178.    * @return array
    ' h1 H! m( R% Q# M
  179.    */7 p0 a7 |% F9 q. M
  180.   public function distinctData($table, $key, $query = array()) {$ q! }& w" W& h
  181.     if (!empty($query)) {7 @, r# `& y+ z- L9 o& k
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);$ g* O3 z- ~5 z3 B7 z/ }* d
  183.     } else {% [. g- b- {/ B& T: g6 U( k
  184.       $where = array('distinct' => $table, 'key' => $key);' }/ D. E: Y3 J
  185.     }; ?; M5 G( E; i2 }& c
  186.     $data = $this->database->command($where);
    . X! |' a4 o. B4 C. Z' J
  187.     return $data['values'];% [/ I7 \$ O& W0 ^
  188.   }; O( t) E6 C1 y3 r
  189. }
    2 m% D4 v$ _# d
  190. ?>
复制代码

7 w: @0 G" Q" d3 v" K
2 ~0 R( T% W( M2 P* [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:20 , Processed in 0.054636 second(s), 19 queries .

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