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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。0 V5 x. V! v: |& Y( j9 @: Q
模式自由。
) X( M" j! C, Y  J+ {7 `支持动态查询。2 w" R* T/ F- C: u4 h) }4 p
支持完全索引,包含内部对象。0 Y; \. N9 O, b& O
支持查询。
  z& o/ ~6 |4 A; V支持复制和故障恢复。
# _- }( ?6 j+ w1 z使用高效的二进制数据存储,包括大型对象(如视频等)。
* ~& t2 m% V/ R8 Z5 F自动处理碎片,以支持云计算层次的扩展性
/ p. Z$ O( U& P$ F1 k/ O# Y支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。/ i) }3 k* ~- f0 C4 Z
文件存储格式为BSON(一种JSON的扩展)
' P' _+ ~/ G3 E8 _可通过网络访问

所谓“面向集合”(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. m. s1 i: |* B& Y
  2. /**' v# i% P; i7 `1 f
  3. * PHP操作mongodb数据库操作类
    ' E6 C- j# Y, I$ [7 X. [. N
  4. */
    % j+ w$ B2 U! D$ C; l; k+ c2 n  ?
  5. class Database {
    - O7 O2 G, d( J, ]  i
  6.   protected $database  = '';2 H% ?9 K2 b- Z* V, ^2 K) J
  7.   protected $mo;- ]/ h4 X0 f  D0 e
  8.   /**" y: R* b' Y* |: O+ i9 q
  9.    * 构造方法& \" ^' \5 ]& L0 U3 I7 \4 s% J9 r
  10.    */
    . U6 U: |! f/ R6 i2 J
  11.   public function __construct() {
    ) o! ], C6 {' X- V" W$ M
  12.     $server = DBSERVER;
    ; d  e) N; V4 d7 |/ z# S% [% H
  13.     $user = DBUSER;$ W$ Q9 g6 l/ \6 b
  14.     $password = DBPASS;
    ; @7 l- Y. X0 Z7 _' Z( T' A( i4 w5 g
  15.     $port = DBPORT;$ X" @0 |* D& d
  16.     $database = DBNAME;) \- [% R2 O  q) g1 l# W
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    + B" X2 k' b( W: ^. u) a: a5 m. P- U
  18.     $this->database = $mongo->$database;6 F" v' |1 w) s3 D4 M. p! K/ ~
  19.   }
    " n8 Q8 R: v8 U6 |( g
  20.   /**
    . N! q+ M( G8 i3 R
  21.    * 数据库单例方法% n  ?% l) ^& x9 b# A$ j& S
  22.    * @param $server
    $ c  H* q  A9 ~6 M6 Q$ K
  23.    * @param $user
    3 X" L+ _1 S9 ^
  24.    * @param $password% d- x. N. P2 h/ v. O6 I3 I
  25.    * @param $port
    # l; V3 X! }1 r) d6 X8 ]7 i' T6 v
  26.    * @return Mongo
    ' @. \5 f1 K% \8 i+ R& F
  27.    */
    , _7 l6 _1 K. S+ R9 D
  28.   public function getInstance($server, $user, $password, $port) {# |; O- M6 j' G: q; O
  29.     if (isset($this->mo)) {
    4 [9 Y7 x- e/ L) a6 [7 O, _
  30.       return $this->mo;; d8 N# r: Q( S$ P  v
  31.     } else {
    ; Q4 I$ Q1 q, {$ y0 z
  32.       if (!empty($server)) {
    6 D) O; c) J) z; }& R
  33.         if (!empty($port)) {  b; J' M* G# v9 q
  34.           if (!empty($user) && !empty($password)) {+ k4 j, A- Z9 f3 J4 W9 p, i
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");1 A  s3 k" f, e6 h: q3 U# \" Z
  36.           } else {
    6 F9 u1 Y& S' |
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");' }- p( Y* Q( F$ a$ y
  38.           }+ V& _; Y/ x% P/ t2 Q% Z* j6 Q
  39.         } else {/ k* @5 R* p: g0 A+ h7 x
  40.           $this->mo = new Mongo("mongodb://{$server}");
    2 U, U9 a6 J& l! }0 e! v& P# b
  41.         }! F% C* U3 L: {1 M- z: t4 b4 k
  42.       } else {
    " w' }8 I4 @' c. f- h1 J
  43.         $this->mo = new Mongo();% B' p) X, I0 Z# a* o
  44.       }, V! V. D- x* e& f% b2 U% f
  45.       return $this->mo;* q9 {7 i4 `' `. G; D( p2 p
  46.     }
    ) w' L. j$ b5 D+ Q; D( ~- @
  47.   }
    ( m! ^) F" Y# `( X
  48.   /**
    7 n5 x: r. G/ [
  49.    * 查询表中所有数据
    ( j& o* B; d- q* y* e
  50.    * @param $table
    5 W  s* Q3 S- B4 |/ [- ]" \* Q
  51.    * @param array $where
      V" ~% }! T/ N! [4 J" B
  52.    * @param array $sort  V1 D9 P# ^2 i/ ~! w
  53.    * @param string $limit
    1 |2 J! _+ {+ i' d9 Z
  54.    * @param string $skip
    , p+ F- J8 N2 d5 N/ w
  55.    * @return array|int
    * `* T3 h& I* O, \! B3 ^" d
  56.    */
    ( j, g' g( \, c- Y7 Z. f
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    ; @' B7 E* p; z8 y- r
  58.     if (!empty($where)) {
    ! E) z7 E- j% `/ a0 z/ i
  59.       $data = $this->database->$table->find($where);% l0 X8 E  K1 |7 l7 m2 u0 b  I
  60.     } else {5 s( N% N5 ^7 \" F, A
  61.       $data = $this->database->$table->find();
    6 x# C: @) A2 R1 w
  62.     }
    , m1 r; i# J9 Q& M4 b6 o: c
  63.     if (!empty($sort)) {$ ^; m" N4 w$ V  c0 R% h
  64.       $data = $data->sort($sort);
    8 q' k! z+ F' M- t
  65.     }* f& c8 W# G4 i2 D
  66.     if (!empty($limit)) {
    + S* Q6 u1 O  }6 @8 A# v
  67.       $data = $data->limit($limit);# g7 M4 e; Q0 j0 F4 |
  68.     }2 @; T" U. r# m0 J9 H' i
  69.     if (!empty($skip)) {+ {( ?+ L3 S: I
  70.       $data = $data->skip($skip);5 P- W8 O3 B9 D; w4 o& `0 _
  71.     }+ t* B" C3 f9 w$ G1 i/ |
  72.     $newData = array();$ u( B6 I5 ]* p* j! ?% b5 S
  73.     while ($data->hasNext()) {  v& j) y4 f  W4 P' [
  74.       $newData[] = $data->getNext();
    5 }& B3 a) J6 n
  75.     }  i/ W1 b/ c$ \% m- r
  76.     if (count($newData) == 0) {4 P/ g( a; L5 X; p1 x& h1 D
  77.       return 0;
    6 t9 k9 B- V2 d5 G0 W4 N0 L
  78.     }6 z" Q9 _2 P: K% C
  79.     return $newData;
    ( V' d$ e9 H5 R& x" W) n& @
  80.   }
    - h( @. U, d1 ]  v2 s
  81.   /**- q/ E0 f* @, m$ `
  82.    * 查询指定一条数据
    9 r% P8 g( h9 ]4 y7 |2 t
  83.    * @param $table
    5 d& x( |6 Y" a6 G7 d
  84.    * @param array $where
    6 d+ M, k- W" f6 C  Y
  85.    * @return int$ r+ Q  b: {9 @: s5 m1 M# N
  86.    */; _4 \2 |+ C/ c; Y
  87.   public function getOne($table, $where = array()) {
    $ c( J/ y4 j/ F) f4 J( `
  88.     if (!empty($where)) {0 p# s$ \) M/ l# w; v; D  C  z
  89.       $data = $this->database->$table->findOne($where);# v7 s0 N% V1 m+ L1 h" z
  90.     } else {
    ; J; T; M5 t' B& c) [9 n
  91.       $data = $this->database->$table->findOne();
    # j0 {0 m% X( T; f- Y7 Z4 }
  92.     }2 \+ I4 v4 D* M: x0 ?4 c* M5 Q
  93.     return $data;3 ~3 J6 i+ B. d" v) i
  94.   }1 v/ y- e$ B' Z& {2 P+ z  C8 I
  95.   /**
    " J3 b6 l( Z3 m4 ?" ?0 n7 R/ m
  96.    * 统计个数  A1 k& j9 }' w
  97.    * @param $table
    : b& @. O. s; M) n# n6 s! L
  98.    * @param array $where
    ' l* ?7 @0 E1 F5 w
  99.    * @return mixed5 H5 V' D; J4 T# ?# I
  100.    */3 C3 R  w* @8 p% J) x
  101.   public function getCount($table, $where = array()) {- c7 U# p% P- r% |
  102.     if (!empty($where)) {
    & Q3 u- ?' \. n8 Z
  103.       $data = $this->database->$table->find($where)->count();4 F# }2 p0 N: z' B7 L
  104.     } else {
    ( [9 V2 {3 t' ^* H6 `
  105.       $data = $this->database->$table->find()->count();
    7 h/ l) j" w2 ?: Y' n4 L
  106.     }
    8 s5 A7 K7 h8 r2 T$ M/ [
  107.     return $data;, D( k. ?5 B% u& z+ x0 j" F
  108.   }
    1 f1 F) t- m  O8 \5 {
  109.   /**4 w% p2 j" \) ]: x' w/ n7 L
  110.    * 直接执行mongo命令( [1 a0 x6 l6 u8 t1 I
  111.    * @param $sql
    1 v% y  ^3 h, a# R. [
  112.    * @return array
    + N# b+ }% {- p4 \) }6 A: F+ k' n
  113.    */5 X9 a# ]# V& w& ]8 k0 ]% X5 O
  114.   public function toExcute($sql) {
    . e/ Y7 ^3 Z  N1 h3 C3 y
  115.     $result = $this->database->execute($sql);0 m8 @, E2 M, J3 H) a8 ]# j3 |
  116.     return $result;, {+ O! m7 C) \6 y4 q$ \: ?8 v
  117.   }* F' }9 f& `3 `: ]
  118.   /**
    # q4 `# p0 l2 K9 g" i0 P$ B
  119.    * 分组统计个数
    & c8 Q: ~& k9 g) g" K
  120.    * @param $table
    3 C; @4 W  _; V+ y+ L
  121.    * @param $where
    ; a  t3 J5 ~8 c4 o! X+ R  C
  122.    * @param $field
    0 P5 I( r' w! h3 t. Z4 n3 M0 H
  123.    */
    ! [/ F5 s( Y1 ?3 D: ?
  124.   public function groupCount($table, $where, $field) {
    2 f: {, J( ^) b( T# I
  125.     $cond = array(/ ^6 H& t$ d) l+ E3 j
  126.       array(9 \2 l. m1 I( u2 |9 d, z5 G
  127.         '$match' => $where,
    7 C2 C, I0 {5 g
  128.       ),& S" q' w1 G2 C
  129.       array(
    3 e4 B+ M/ `7 F: N; Z
  130.         '$group' => array(' @2 O7 A7 P  M7 K! c$ D# t
  131.           '_id' => '
    ; [4 `% ?2 ?0 U7 Y7 J
  132. / I) X( Y1 T1 ]6 J9 _  E
  133. . $field,
    + ~& N: z# s  m# b0 ~) A9 W6 ?+ S
  134.           'count' => array('$sum' => 1),% r: i4 {9 u( B3 p  J
  135.         ),
    5 m* {* N) \, h
  136.       ),
    ; y  v( w3 K" I; |; \$ M
  137.       array(0 G! ^# Q4 C/ _1 \! q9 `4 S3 ]
  138.         '$sort' => array("count" => -1),
    + @. f7 t: h: H0 B4 r# K
  139.       ),1 k+ e0 p8 g9 t
  140.     );+ i9 g# p) A) ?1 f) E
  141.     $this->database->$table->aggregate($cond);: @( N  w* l5 X# ?7 Q4 {
  142.   }
    % y9 k: }" x, j. l$ ]/ _( l2 B
  143.   /**
    8 H- E2 S0 q  ^- i) X
  144.    * 删除数据/ u! {' X, |# X8 ^, ]. n- I& o, I) Q
  145.    * @param $table
    4 L: H9 h# a, p6 q3 }4 x
  146.    * @param $where! h9 @: r: Y9 ~3 a) F7 Z. j
  147.    * @return array|bool. V7 e8 E4 s/ E! f2 c
  148.    */1 |3 h, x- M0 m2 P* i" X
  149.   public function toDelete($table, $where) {
    * {4 ]: d2 x# o1 Y4 K0 a/ o* @; X
  150.     $re = $this->database->$table->remove($where);$ L. `0 H+ n% p& m3 A& M
  151.     return $re;! C3 Z4 a' K8 v5 {8 W
  152.   }
    ! w/ O1 H6 _6 q% ^8 }# D+ a
  153.   /**& H3 K( I3 [+ r; g6 h3 _
  154.    * 插入数据
    0 T# ~" I5 ^8 r. K; Q, C
  155.    * @param $table
    $ d. g6 c  r6 ^5 i
  156.    * @param $data  H+ q# S1 G* @) n) v( c
  157.    * @return array|bool( M; I9 q. x; c# m! v
  158.    */4 W4 T! k# ?3 r& ?
  159.   public function toInsert($table, $data) {
    + g( c8 D  b3 s: B
  160.     $re = $this->database->$table->insert($data);
    6 e6 }& j0 D1 ]
  161.     return $re;; a- F1 r+ P" y: d5 h" `
  162.   }
    0 `8 S# h/ A  d8 X6 V( Y
  163.   /**
    % z% q& s7 \' K4 k, w
  164.    * 更新数据/ c- j' u. a# o& C- s
  165.    * @param $table+ M7 Q! W7 i% e/ n1 i' h
  166.    * @param $where5 K- h( ~: n& ?2 j! X* J- K
  167.    * @param $data
    0 D6 P3 n6 p" ?. a: D6 J) l9 W
  168.    * @return bool& s4 T8 y( t* d& ^
  169.    */
    0 v; d( p3 P5 P* I$ A, n3 d
  170.   public function toUpdate($table, $where, $data) {1 H: T' [- f3 t& v3 g2 @2 q) b
  171.     $re = $this->database->$table->update($where, array('$set' => $data));% Z0 K6 V8 R% m+ Y
  172.     return $re;
    / B0 T6 Q2 T9 L% n+ \
  173.   }
    $ l1 V  B& B2 d. ~4 M
  174.   /**, p5 y: h  E1 {# c; v
  175.    * 获取唯一数据4 c# o* u7 ]+ }( f- ?
  176.    * @param $table
    $ I6 ^) K5 V+ x3 e
  177.    * @param $key7 y; i; C* Q, X; s+ A& H7 ]
  178.    * @return array
    7 A* @* u% b& s5 w: F1 R* e5 B* }
  179.    */
    / u1 l1 c7 r- ^# `# U4 \" o' B# o$ R
  180.   public function distinctData($table, $key, $query = array()) {
    ) f# _5 s2 ^, W/ U5 d. W) N7 _7 a
  181.     if (!empty($query)) {
    # F- y" w( R2 i4 F
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);: A, a6 n  K, t& {% b8 d! Q5 X
  183.     } else {) b7 A2 B! g' ~6 D' [0 S
  184.       $where = array('distinct' => $table, 'key' => $key);0 R) n( M. n& u3 ~
  185.     }
    3 u+ e8 [& r+ Q0 H
  186.     $data = $this->database->command($where);- x" ~; z  n! W0 R+ u
  187.     return $data['values'];8 J4 A2 A2 c5 I8 n7 y; k
  188.   }6 x6 u& H$ H0 @
  189. }
    8 ~' N& k6 t  f$ [& L. G2 q! |
  190. ?>
复制代码

4 J, c8 ^0 q! |$ R# n- e8 R# H8 V8 m4 O9 q; s0 y6 J( p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.071179 second(s), 20 queries .

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