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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16043|回复: 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 ?" [. f: ^' \
模式自由。
7 v$ v3 ~. r) l支持动态查询。) w6 [5 J( g. x# d7 \
支持完全索引,包含内部对象。
7 X2 ^( J) {# H; A& ]1 O" {; c支持查询。
8 H; n( f" x+ V  Q3 f支持复制和故障恢复。
, ^; F4 q: @# p! [7 s& D" c使用高效的二进制数据存储,包括大型对象(如视频等)。8 B" n% `: S7 y- c! o5 b
自动处理碎片,以支持云计算层次的扩展性
4 X4 ?# D' @+ Z0 f2 P支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
: Z! O0 R# ^( D文件存储格式为BSON(一种JSON的扩展)
( q  k3 M# i7 \7 E' S$ Q可通过网络访问

所谓“面向集合”(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
    $ i  V$ s: n7 y. a6 W
  2. /**
    1 e+ O' m1 h3 u0 [$ [
  3. * PHP操作mongodb数据库操作类. d; m1 O% q, O  l3 ~) `" \. U
  4. */4 f  g. n3 s6 S9 W6 G0 H* M
  5. class Database {
    ' r/ b# o  l' d# j1 [
  6.   protected $database  = '';
    , g. b. ~# g. U& H5 f9 E
  7.   protected $mo;' d! h" p& k9 Z% D) m/ H0 q9 }
  8.   /**1 _8 }9 ^- w. f8 i
  9.    * 构造方法
    . i& C( p8 E/ s( e
  10.    */1 w! h+ r1 u2 ]3 p/ q: Y$ h
  11.   public function __construct() {- s' ^3 f% P9 ~2 B
  12.     $server = DBSERVER;
    / x- `5 ?; l$ F9 Z4 _, C* Z  l3 k
  13.     $user = DBUSER;
    - t; {0 v8 j& S) t# e# `' T
  14.     $password = DBPASS;
    5 J5 U5 E/ {$ w0 w
  15.     $port = DBPORT;
    * J% H8 q+ e# _- E: q2 m
  16.     $database = DBNAME;- {$ |9 p6 m! B* T
  17.     $mongo = $this->getInstance($server, $user, $password, $port);$ o! Y! U$ G5 Z% t
  18.     $this->database = $mongo->$database;
    $ T$ {6 m% P7 S) `
  19.   }
    8 v8 }# |( C6 r/ ^; d2 v- r: K
  20.   /**' V5 Q: G: o6 V* d, e
  21.    * 数据库单例方法
    . H; D, P% U+ C6 V; J( L0 |
  22.    * @param $server
    ! }( y2 P0 t) r: Z4 {  o% ]
  23.    * @param $user
    " ^$ F, C6 G! {9 _' C5 `  t
  24.    * @param $password
    : k! d& }- _$ l. k, K2 G5 y
  25.    * @param $port+ ]: v1 |3 F0 ?. i  ?( T
  26.    * @return Mongo& W# h0 R+ O3 [* \: E  P
  27.    */
    ; |* [/ k7 p0 M+ S7 H3 d# q$ H
  28.   public function getInstance($server, $user, $password, $port) {
    4 V. E6 X# A( @
  29.     if (isset($this->mo)) {# _- s# j$ r2 V) O( I, I
  30.       return $this->mo;
    0 S; e% O( M  d/ e' X! `% g1 S9 }
  31.     } else {) l4 b! h3 Y6 R% ^
  32.       if (!empty($server)) {
    1 g9 W4 q8 y# }
  33.         if (!empty($port)) {
    $ {- O* o5 U) Q$ ?% g2 C
  34.           if (!empty($user) && !empty($password)) {; s, y, N( t/ S0 r9 w! F  \
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    ' j8 p3 c3 v( C$ ~
  36.           } else {
    8 K+ u7 E) R3 Z* a5 U
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");$ S3 k* D6 |6 L- \- ?
  38.           }
    ' G/ n4 }. K8 ~% R( u7 b. B; p4 ~
  39.         } else {7 y& J4 F( ?1 H3 x+ z, y9 n
  40.           $this->mo = new Mongo("mongodb://{$server}");
    - B# C4 I- d8 V
  41.         }2 \  V6 A9 J# Y
  42.       } else {
    6 ?6 U& q7 K# P. M8 d4 T" a
  43.         $this->mo = new Mongo();
    * R' ?+ |0 c( \/ @& E' }6 P
  44.       }' O% B8 E- k4 y) u
  45.       return $this->mo;
    2 r7 ?. B. c* R- M; J% Z( U
  46.     }
    ) w7 d8 _7 P6 m% [3 F
  47.   }
    3 u/ T" y2 f% n( u) V- S0 E% |
  48.   /**
    . k' l5 c/ v, y- s4 I" m2 S5 v: k
  49.    * 查询表中所有数据
    7 t6 T  W6 d" L" }
  50.    * @param $table: u5 N* A1 S: V- l
  51.    * @param array $where8 ~" u+ d% n. x) P( P. S6 N
  52.    * @param array $sort8 z9 ~. H" R9 K. E- }+ ?0 s' n# b5 B: o
  53.    * @param string $limit2 C: f& M; A: w8 z6 l% ]: h
  54.    * @param string $skip% o+ Y& M0 ]5 }, K( e5 K% z
  55.    * @return array|int& l4 b* A& m* n
  56.    */
    + }0 {7 z. }9 x
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {9 d6 s  ^9 H9 |; X- I
  58.     if (!empty($where)) {4 E+ p* I2 N  E8 a' d9 M# n+ S
  59.       $data = $this->database->$table->find($where);
    3 z! x+ q$ h) t# D- r( A
  60.     } else {$ |2 K1 l& X0 o4 o; I
  61.       $data = $this->database->$table->find();* J2 k1 A; v' g% j
  62.     }
      P- s* p8 C7 |) @9 p% Z
  63.     if (!empty($sort)) {
    ' }0 Z- e6 Y& Q  j; U
  64.       $data = $data->sort($sort);
    9 G! s. t' o. `8 U! S3 ?
  65.     }. P/ v/ n6 n+ M( v4 w; _1 m
  66.     if (!empty($limit)) {
    0 c$ p- ]) a* S1 c6 C. h9 @9 H) C! J! O) {
  67.       $data = $data->limit($limit);! E8 G4 K" D1 V4 j+ \3 i
  68.     }
    3 i2 D1 o0 [4 q5 ?/ X' `) C
  69.     if (!empty($skip)) {
    ) E# R+ p* u  J  L; ~: i% ~
  70.       $data = $data->skip($skip);9 K; h" j& R9 X
  71.     }
    - R3 _, P2 \. I, t
  72.     $newData = array();' l% m8 X' Z6 `: m% I
  73.     while ($data->hasNext()) {4 s. P7 H0 `9 N. i. i; v
  74.       $newData[] = $data->getNext();
    ) p$ S7 k, X6 H4 @, u+ X
  75.     }; `3 s: t1 z7 O1 H5 m
  76.     if (count($newData) == 0) {
    ( }9 T: {7 [0 S0 p4 a* {
  77.       return 0;4 y9 `9 ^2 e7 r6 \
  78.     }
    2 ~3 p' Q$ t: N3 V1 V
  79.     return $newData;
    $ Z( R& j+ z+ z
  80.   }2 h$ Y( ^7 Y  t& V7 Y! n
  81.   /**2 x& c/ w/ {+ |5 W. D
  82.    * 查询指定一条数据# I& I$ e5 P* y! w
  83.    * @param $table3 |2 z3 [3 ~+ s$ z' F( K5 m
  84.    * @param array $where
    & |; t: }* c8 }" X$ x
  85.    * @return int5 x4 ?$ Y* ]' u) B/ X
  86.    */
    ; @; n% r- F4 y2 ]4 u5 i
  87.   public function getOne($table, $where = array()) {7 `) c) B* G% _0 J" S, U
  88.     if (!empty($where)) {7 u9 q& f, n' }) Y3 T
  89.       $data = $this->database->$table->findOne($where);
    3 L2 `! @/ I, E9 b# R7 U- Z2 y
  90.     } else {
    ) q* B3 o/ q! {# _7 F6 {
  91.       $data = $this->database->$table->findOne();% H- z, T! K9 s, y! K5 G4 U
  92.     }' e/ r3 \! L& ^. q. P6 k4 S
  93.     return $data;
    , U) o% G) }: V5 K8 D2 u
  94.   }  _: b+ T4 E8 D$ q- o6 e2 t6 T
  95.   /**9 _, x' ]$ S/ O9 a) Y4 F
  96.    * 统计个数
    " K. E* F% v9 c  E7 ~
  97.    * @param $table* ?+ V" o+ ~# W3 m' Y3 Z' r; I5 d
  98.    * @param array $where
    6 Q  K1 f3 L/ E; s; ]  C
  99.    * @return mixed
    # H- b! T1 d# e: @; O
  100.    */
    * ~' C; j# S' r9 Q" @
  101.   public function getCount($table, $where = array()) {# U" A4 C6 K( m! i9 ~4 c2 E1 ~
  102.     if (!empty($where)) {9 a2 {" j7 o* J. r% q" T" P! H
  103.       $data = $this->database->$table->find($where)->count();& w7 n+ V% O7 `+ ?: u
  104.     } else {
    ' q; q1 S0 o% [( p7 o" `
  105.       $data = $this->database->$table->find()->count();( h% n( e7 i5 ]
  106.     }
    0 O( V  I8 X  ?
  107.     return $data;  r) c/ X. Z/ _
  108.   }$ C) K2 L% @1 k2 V, e3 D- k
  109.   /**
    - @1 U8 W; {' \3 K1 x: c  I. p
  110.    * 直接执行mongo命令
    5 I" t; ]0 n8 P3 B) i5 T
  111.    * @param $sql, Z. H7 {' U2 x6 Z, u0 \8 X
  112.    * @return array8 |- }' C6 D+ A9 `0 H0 {' |
  113.    */
    - @  l/ }) p5 g( A8 q. o
  114.   public function toExcute($sql) {
    ; l2 r' V: f" a
  115.     $result = $this->database->execute($sql);2 U6 R% K6 }& b" A7 Q
  116.     return $result;
      k/ A* G2 G8 ~5 W3 E- E
  117.   }
      g* R; G! K& K
  118.   /**4 D" m9 |/ ?. p9 e7 c% y
  119.    * 分组统计个数1 h: E4 X# ^6 J, \8 J9 m
  120.    * @param $table
    6 u9 W* A% a* S( j+ P- K- J* ^& H
  121.    * @param $where5 m+ T% a6 K+ P! a
  122.    * @param $field1 @; W. q9 u0 E0 f4 F
  123.    */
    + D( ~# j/ ^, d4 q! \
  124.   public function groupCount($table, $where, $field) {& n: M2 q" Q/ f& u; X6 I% L
  125.     $cond = array(! i( l) ~$ _* S
  126.       array(
    ' [) n2 i7 f/ T$ v! Q: J/ ?
  127.         '$match' => $where,' d8 h/ ^& g  d1 h( N8 {! d& K
  128.       ),
    / q1 b$ n$ s3 f8 ?0 d+ T# @
  129.       array(1 W8 i; p9 F# O- v8 o5 T
  130.         '$group' => array(
    ! v% D9 u1 v- O' w' f
  131.           '_id' => '
    " N& L. {/ E( C

  132. 0 a2 P8 s" a; l6 U9 m2 N; z, j$ q
  133. . $field,  X  \' u1 c, P& Y
  134.           'count' => array('$sum' => 1),
    * i/ P& t$ y7 |0 a0 [6 Z
  135.         ),
    0 |: h' e: f8 L7 G0 m, v7 X2 A+ t
  136.       ),
    . q7 S6 K' a/ s6 }- h  L( f  D
  137.       array(
    $ G3 }* O- A4 j3 U7 `
  138.         '$sort' => array("count" => -1),) |% X8 Q4 r' B" I5 k. I
  139.       ),
    $ l$ i! E, Q% A# q  l1 c2 l8 O
  140.     );( n) @7 z( B0 c/ @- a
  141.     $this->database->$table->aggregate($cond);
    + l8 m) Q5 Z) R) y! |& z4 O
  142.   }
    . e$ f6 j  Z3 W1 n5 _6 y' Q! x
  143.   /**
    & ~7 j6 g/ H/ W5 p; ?9 p) R
  144.    * 删除数据
    4 z- X  s5 P" L8 [
  145.    * @param $table. C3 @; g& L4 ^2 V! z5 T
  146.    * @param $where
    4 L1 p+ L  k9 V
  147.    * @return array|bool' B, X/ @5 k' v
  148.    */
    8 ]9 L% v# I' Y7 r+ ]
  149.   public function toDelete($table, $where) {  _: |& {5 v- o2 t0 ~( q
  150.     $re = $this->database->$table->remove($where);
    + c. {5 ]" D, C' y
  151.     return $re;* t( R# E- f2 ]+ H% ?9 Y# ]
  152.   }
      F, q; M) N; m6 q- L5 X2 w
  153.   /**6 R) o; ^; d8 A
  154.    * 插入数据
    / e* D7 h8 W1 }' J
  155.    * @param $table5 _/ r9 w8 m2 o5 a  A
  156.    * @param $data( N; d% ^; K' A# {
  157.    * @return array|bool
    % O- F! P2 v8 G8 R! _
  158.    */
    : |2 q( F1 ]5 q( @1 a" I
  159.   public function toInsert($table, $data) {5 y( d' t1 ?* F. `) J
  160.     $re = $this->database->$table->insert($data);
    $ h1 O5 A& f. q& v) z
  161.     return $re;5 [: R0 @8 C2 J$ t2 i6 z
  162.   }3 P& G) |% f+ a
  163.   /**2 d- j& k: c( a
  164.    * 更新数据) A. u, T& a7 ~0 _( M* p! i1 n9 S
  165.    * @param $table& V/ ~4 A2 w: G3 `* w" J
  166.    * @param $where* G) F6 F, H' B) k
  167.    * @param $data( g1 E- _2 o. x
  168.    * @return bool$ M1 _( c  e( o5 o+ j
  169.    */0 `9 @0 {  \4 `1 ~7 K/ |
  170.   public function toUpdate($table, $where, $data) {  {/ j% A$ j; U1 F4 i: b! A( P
  171.     $re = $this->database->$table->update($where, array('$set' => $data));( l( v/ ~- R6 K8 D! s& `
  172.     return $re;
    , x% a8 ~+ t' V7 [! v- W2 J
  173.   }
    ( Y" l. K2 F' _+ C1 X4 w
  174.   /**
    9 z0 k' W! }' o1 H
  175.    * 获取唯一数据
    ; o% c) |. z# I  q
  176.    * @param $table! x% z8 N; }6 O
  177.    * @param $key
    & R- m* I$ A( J" j3 x
  178.    * @return array- `9 N2 P# G( D' J+ h& j
  179.    */* Y6 R. m' u* \; t
  180.   public function distinctData($table, $key, $query = array()) {
    $ T8 Z0 _! d4 _' S2 A
  181.     if (!empty($query)) {( V: O$ T) Z2 M) L2 V' L
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    7 `& {: D; ^& E; A' Q+ ~5 R
  183.     } else {
    4 i+ c  u( J7 J, Q+ Q1 H
  184.       $where = array('distinct' => $table, 'key' => $key);; Q( E$ q# W4 b3 W; o
  185.     }3 i' H, l0 J" Y$ K
  186.     $data = $this->database->command($where);
    + Q% @" A# X! Q9 Q0 _
  187.     return $data['values'];
    4 K2 A" e( R% ]: Z( H. d: b
  188.   }
    2 w6 B+ V4 L+ w" o1 s9 w4 m, G
  189. }
    . D1 J% h. L2 _- {1 S
  190. ?>
复制代码
8 s' _: [2 B1 E
9 y! n) S* g, v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:49 , Processed in 0.074232 second(s), 19 queries .

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