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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。& o5 j# C) w: P- X- R
模式自由。
; j! Z4 R! M2 \# l+ e支持动态查询。. x; e9 \( P6 u- X' {1 m5 s
支持完全索引,包含内部对象。( R" F6 m8 @7 }3 }5 L* ^" e! j6 M
支持查询。& _6 q6 p3 v2 c2 u
支持复制和故障恢复。
4 [' [7 R: l+ |% z使用高效的二进制数据存储,包括大型对象(如视频等)。( w# |4 \/ Q8 A2 }. n3 d
自动处理碎片,以支持云计算层次的扩展性& D1 c$ W! q& u9 d: L$ V4 G/ U
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
8 d; U4 |9 I: R" o  k7 M' U文件存储格式为BSON(一种JSON的扩展)
% e6 V2 W1 v, e8 k7 R; ^" C可通过网络访问

所谓“面向集合”(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
    : P% Z5 [0 o9 A: x6 ^! e5 K
  2. /**
    8 {8 ]- P1 L# Y: X6 H0 D
  3. * PHP操作mongodb数据库操作类& P4 ]; E& a5 D+ c) Y
  4. */% `$ A3 v; b: U7 h" T
  5. class Database {' l9 i& _: t/ |( ~! L2 u0 d
  6.   protected $database  = '';3 _& M: N2 K; s- \
  7.   protected $mo;! z  ]6 A5 h) F( g4 P
  8.   /**
    ; z( b6 Y7 H9 \3 {5 Y& V
  9.    * 构造方法
      U9 c8 e$ k6 Z. \
  10.    */9 k) ?( g9 A9 j/ ^; C
  11.   public function __construct() {4 C$ `1 V6 @0 g2 h9 L' z
  12.     $server = DBSERVER;
    / b' x, J6 E% r7 d2 w! Z
  13.     $user = DBUSER;
    9 S: E/ T& U; P3 D4 B
  14.     $password = DBPASS;9 u0 u1 j1 I& z5 b0 ~# S: @
  15.     $port = DBPORT;( N& \5 G! n+ u" y0 b+ `
  16.     $database = DBNAME;
    $ a- F; ^) o- g/ j' ]1 E, X
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    + ^; L& C7 M3 ~' G
  18.     $this->database = $mongo->$database;
    * Q# Q6 Q# ^0 {: @$ V  L
  19.   }, g5 M& u) H5 {% \. y0 y
  20.   /**6 V- H* k8 x# ]8 q2 P
  21.    * 数据库单例方法
    $ F2 a2 ~, u, z
  22.    * @param $server
    ; l" \2 y) V& @2 D4 h
  23.    * @param $user, w5 u4 {8 Q4 e
  24.    * @param $password  B/ |& I" i$ N8 b. @2 w$ J/ V
  25.    * @param $port2 W2 m1 t8 N2 V$ v+ U, D3 I) l: r; B( ^
  26.    * @return Mongo7 n/ D4 P0 K8 S. R; ?) s/ M- l! L
  27.    */3 S0 K9 F( B0 @2 }
  28.   public function getInstance($server, $user, $password, $port) {
    % q- F" U8 F9 ?/ f8 F. P1 w1 a
  29.     if (isset($this->mo)) {) x8 F% [) m  h5 p  U
  30.       return $this->mo;# }' P, b: m& [. z& g
  31.     } else {
    / `& z  r) G% Z$ U& U  _, n; H( G$ d
  32.       if (!empty($server)) {7 D; {6 Y6 E- c8 I) A9 I  o( p  t
  33.         if (!empty($port)) {% k$ }% A# |5 W
  34.           if (!empty($user) && !empty($password)) {
    , R( r* o" T! J! I7 _% u4 T6 y
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");+ A6 F$ O* A/ I- X) o7 \% V
  36.           } else {
    8 c( |1 x8 v7 M, l" P
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");# g: N1 H( ^* _
  38.           }
    # H; M+ x  H; c# h6 C, \: u( v
  39.         } else {
    * ]% g$ x4 w7 S! r/ x5 `& o# m, s! G
  40.           $this->mo = new Mongo("mongodb://{$server}");! L5 c5 B, H& @) I: n5 ^0 l6 H
  41.         }: j* E/ A+ S+ s- @( c: Y7 E1 q
  42.       } else {
      u9 y" ^' ?3 C
  43.         $this->mo = new Mongo();* R/ j, v# u) p
  44.       }
    4 p0 U- ?* t( N: p1 }
  45.       return $this->mo;
    : I% m7 K0 d, C( o0 w
  46.     }' J$ ]& |/ q+ A7 U& h+ ^
  47.   }
    5 i0 [2 U4 v0 ]6 r* q. @* C5 Y1 F
  48.   /**1 x0 Y: O5 w' f
  49.    * 查询表中所有数据
    ( X8 S  e1 X' e" s
  50.    * @param $table7 ^7 k9 @: J0 B7 C% w* \5 M3 r
  51.    * @param array $where$ [5 G4 ]% y( Z- V: M# L3 l1 L- H
  52.    * @param array $sort
    ) o- ?6 c" G5 A
  53.    * @param string $limit  i) M3 W5 Q1 }; l8 h6 u. o* r# s
  54.    * @param string $skip+ `4 l( [9 P, _0 U# W8 D8 A
  55.    * @return array|int
    ' m6 \3 J5 H9 r' g
  56.    */
    ' \! X" F% t. H* T4 x
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    . \; g& \/ u$ o, u8 c
  58.     if (!empty($where)) {
    2 s$ u; C2 q+ @  Q
  59.       $data = $this->database->$table->find($where);! L4 S! W# I3 p! O$ }) O
  60.     } else {
    ( \. @, C/ O8 ]* I- _0 l# d
  61.       $data = $this->database->$table->find();$ @. \" l8 A" |; X9 C+ ]
  62.     }
    * y$ u8 S3 b* R! F, }
  63.     if (!empty($sort)) {
    6 X# H, \+ M. [
  64.       $data = $data->sort($sort);1 y) Y/ G4 r, g& K
  65.     }
    " Y$ G5 ?& v# e9 @- v  n! o* A
  66.     if (!empty($limit)) {5 G$ q' X; [2 S/ X; J2 G
  67.       $data = $data->limit($limit);1 Z& V+ C. j& W: g
  68.     }* K2 `- g& X) M
  69.     if (!empty($skip)) {5 U& ~' N4 w% M$ _% w
  70.       $data = $data->skip($skip);1 Q* O) \2 `7 G9 u
  71.     }
    " Q' v7 f  Z" j/ s: G
  72.     $newData = array();- Z$ A4 [  J4 H# w4 T9 `6 n$ w
  73.     while ($data->hasNext()) {
    " O# p; K8 Z. B8 W
  74.       $newData[] = $data->getNext();
    7 b4 T. |5 e4 [/ I  [% F: H4 v9 r
  75.     }; A+ u+ g! v# X3 M$ W
  76.     if (count($newData) == 0) {
    - s( W2 [9 M: I, m0 s
  77.       return 0;
    6 N8 D2 A  X* i, n6 v5 h
  78.     }% c/ v" Z+ L7 _5 I# q5 f
  79.     return $newData;  x6 l: H2 H0 v0 G
  80.   }$ S& N6 N& M0 j) U* q9 W! s- X
  81.   /**
    % o/ s( A* h8 D6 f+ p7 `, `
  82.    * 查询指定一条数据+ }8 J3 y' Q- }5 h& M
  83.    * @param $table0 G; A8 ?. H, y9 q$ f5 S
  84.    * @param array $where# S6 ^; ]5 e3 L# ?6 Q, r* x8 }
  85.    * @return int
    & i0 P  D3 b( d2 ~% [! Y0 z1 n2 j
  86.    */0 F% ~6 ]2 B. l7 x. N  y- H
  87.   public function getOne($table, $where = array()) {
    . O* Z& J$ d+ d! H: V9 c: U
  88.     if (!empty($where)) {
    ) a, Q' C. `0 n9 @- r) J7 J
  89.       $data = $this->database->$table->findOne($where);- q3 p( `9 I5 S8 U( k% u! c
  90.     } else {
    * E( q% X, P4 R
  91.       $data = $this->database->$table->findOne();
    7 [; k- \  r" f# K7 {  F2 G
  92.     }
    & h# ?( M" u: C- ^3 z
  93.     return $data;' m  U1 E5 _' l7 ^8 B. c8 ]; E" p
  94.   }
    ( ?7 u7 Y% z0 n/ O! K5 e
  95.   /**1 U6 F4 e! R1 y
  96.    * 统计个数7 Q, A4 y, A6 a1 O9 @
  97.    * @param $table7 y, Q; }4 l  J& c/ V# q( m
  98.    * @param array $where
    ! u4 f4 t& F4 \
  99.    * @return mixed
    * `" [! H5 ?1 L% q. ]0 n
  100.    */
      l/ H9 W0 \- i; j. |  t
  101.   public function getCount($table, $where = array()) {; L! G) g; r1 A7 u0 _
  102.     if (!empty($where)) {, v' L5 i$ `7 S
  103.       $data = $this->database->$table->find($where)->count();# V1 o$ S- e7 [. z( {
  104.     } else {
    " ~, q; e2 ]% l2 N8 |* _/ i; I
  105.       $data = $this->database->$table->find()->count();
    . y' r9 g/ a4 L4 s$ g9 C0 r, g
  106.     }0 H! j0 ^* x) ?8 H+ {/ N
  107.     return $data;
    ! i8 S& u' V  I8 w
  108.   }
    . ?. X! `9 ?# k
  109.   /**  v. D, {3 |* y/ f
  110.    * 直接执行mongo命令
    2 r; P$ j4 x' ?. l3 X, `8 P
  111.    * @param $sql
    * e3 x% J. B2 _( g0 x/ e2 G; Q; V: T
  112.    * @return array+ {0 R: y, J6 ?+ J( q$ l5 m
  113.    */
    ; v0 x8 v7 O- ?9 A8 G8 _
  114.   public function toExcute($sql) {! h; c6 }2 X6 v
  115.     $result = $this->database->execute($sql);- K- T! B! E- [  f' O
  116.     return $result;
    - H$ n; S3 L6 ^4 N! q7 e! d5 a" t& ^) ?
  117.   }
    1 |. H% R/ L. U! w
  118.   /**
    * K0 e1 h7 }! E9 q& v- {7 I/ [
  119.    * 分组统计个数* i% K; H$ B3 y8 l5 y/ {
  120.    * @param $table' X* f2 E: \% Q
  121.    * @param $where# U/ ]; ]. g0 Y/ H) q
  122.    * @param $field
    1 a$ f  c# E9 F4 T
  123.    */
    3 U% _4 H/ a  o; z* G
  124.   public function groupCount($table, $where, $field) {
    & N' ?% [7 U' {  O
  125.     $cond = array(
    : y' V- b2 s- a& `4 k: c& ]" l: h
  126.       array(2 u& m) n0 M/ {& Z/ ~
  127.         '$match' => $where,6 P, D1 F, n% ?
  128.       ),2 h2 k- {  P3 }4 A$ N
  129.       array(
    $ j: z8 \  U* @
  130.         '$group' => array(
    + R  A2 _! j) M$ a5 m8 [
  131.           '_id' => '
    ; r& t( \% e5 B; A2 s& e1 E# n$ Z

  132. : Y6 C3 ~5 C* u7 d# ]
  133. . $field,
    : A% O8 R* c  s6 j/ N- P; ^# D
  134.           'count' => array('$sum' => 1),
    4 G; @7 |6 Y& K4 z/ T
  135.         ),- q, V( j& E1 C# \! E6 E4 x
  136.       ),8 N: T" R6 I. |4 u
  137.       array() J( P7 u' |4 [1 l$ e; t
  138.         '$sort' => array("count" => -1),
    " O5 H' r5 K! _. _# {& N6 w
  139.       ),% t6 q# A3 K/ v* D  }- ^
  140.     );
    : m7 L8 S+ U7 O/ y* P3 k
  141.     $this->database->$table->aggregate($cond);6 U, Q) k+ I! d3 \
  142.   }
    * b4 [7 ~' i- m& h) c! m. m
  143.   /**. c2 f7 v3 G8 I8 Q0 I" s
  144.    * 删除数据& c7 ]1 a  F. x4 }, n8 X
  145.    * @param $table) `* W9 a, w, j/ A* B" N8 \- `, K
  146.    * @param $where
    * }$ W! r) K' W! Z) Y. h
  147.    * @return array|bool# e& Q1 G3 g. _/ }
  148.    */
    + }+ w3 {" r! _3 h- S' @
  149.   public function toDelete($table, $where) {& y# ?) s  s* O% A; p" Y
  150.     $re = $this->database->$table->remove($where);
    2 [! \% p' h  U2 [  }
  151.     return $re;* K" |% V% _* j1 G2 o0 P
  152.   }9 ?) X0 k6 M- T8 @$ u* y0 J) U
  153.   /**
    * t' _/ g0 j' J  {" R9 K4 r, M
  154.    * 插入数据# f! K2 _% d* s9 o
  155.    * @param $table4 B7 k( X  ?7 O  ~; B
  156.    * @param $data
    % @5 |  ?; ]8 L8 a& ]  _
  157.    * @return array|bool
    , e- Z: X$ j5 f# L1 F& y0 P9 ?
  158.    */7 t( Y' ^2 M- a
  159.   public function toInsert($table, $data) {' \3 V9 ]+ L3 o8 Q, u5 f
  160.     $re = $this->database->$table->insert($data);
    ) P7 O# S2 Y: W. l& K# A
  161.     return $re;( O4 N% Y' K8 W" ~' B
  162.   }' e; L9 y9 t5 }
  163.   /**! F: m4 Y9 z" B1 B! ?9 V
  164.    * 更新数据, B$ F" [, c/ H3 _  X
  165.    * @param $table* M) o& ?  [2 @( K
  166.    * @param $where
    , _4 x* }; I0 {; j! F0 u* {
  167.    * @param $data
    8 J. Z6 O! h% k8 C; I% w& l
  168.    * @return bool/ _9 A6 ~4 a2 F
  169.    */
    ' I; P1 ^& x3 C8 G7 G" r" ?% O: r
  170.   public function toUpdate($table, $where, $data) {
    : C2 O) n& H/ i9 H  o& \% Y3 J/ n
  171.     $re = $this->database->$table->update($where, array('$set' => $data));7 x. k3 h- Q( H5 C6 E+ z
  172.     return $re;* Y. C' i/ ~6 j; o5 O+ u
  173.   }# }% O/ }# J4 u+ s
  174.   /**% F% z1 ?' h" y, c1 Y; ]
  175.    * 获取唯一数据# x. {1 A' m2 z3 i" p) Q; W. y
  176.    * @param $table
    4 J! ?1 B8 t" @1 O2 O
  177.    * @param $key
    , J6 ?$ {/ t+ j) O! L6 @7 B
  178.    * @return array; U9 N0 i( T5 z  U0 J- H8 {& Q
  179.    */
    , u- F& y7 N5 Q& }/ V
  180.   public function distinctData($table, $key, $query = array()) {+ e3 D6 U  ~2 Z. F* z1 E
  181.     if (!empty($query)) {: n7 {8 s5 a3 L8 _- u' j: @/ }
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);3 x, Z; b* X0 O
  183.     } else {
    + _7 j9 u& f/ d5 P
  184.       $where = array('distinct' => $table, 'key' => $key);- x& h& o' W# u9 k
  185.     }4 K2 P1 c6 |+ n
  186.     $data = $this->database->command($where);
    7 i) u. E, P+ `  f) y+ A
  187.     return $data['values'];
    4 }- ?7 {6 ^3 {  \
  188.   }9 o0 p8 h% X2 S& T' T
  189. }
      ?7 z- O# U$ W/ [
  190. ?>
复制代码

6 g1 ^) Z1 N6 J; o/ f* J( Z! N# ^7 ~, M, c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:44 , Processed in 0.057054 second(s), 20 queries .

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