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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。1 [- _4 U  n0 c5 J9 H& ~' c  _  x9 b
模式自由。! m0 f3 a# Y/ g. X4 q" k' `
支持动态查询。7 x: l% b3 G6 i: |
支持完全索引,包含内部对象。
- q. q' y' @) t- K7 @! E支持查询。% X+ u# H* ]. w9 X3 \* j
支持复制和故障恢复。5 F) P5 U" w7 E: b7 N7 b
使用高效的二进制数据存储,包括大型对象(如视频等)。1 U1 M/ V$ Z& C& g; p+ f
自动处理碎片,以支持云计算层次的扩展性0 |$ k* c# l8 E5 u
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。. }% v0 r$ j) c; E
文件存储格式为BSON(一种JSON的扩展)) h  l* H8 \* Y% G
可通过网络访问

所谓“面向集合”(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. <?php5 `8 a- H! V3 ~. ^9 }. t2 q
  2. /**( D5 ]* m9 o) }% e6 x' Z
  3. * PHP操作mongodb数据库操作类4 ?0 W) S9 G' A* h) ^5 `
  4. */- C- F' A. Q- |) `, l
  5. class Database {4 d9 F' G3 [$ j0 k$ Y7 l" y  N
  6.   protected $database  = '';
    + g$ g  W0 |7 K! C* q
  7.   protected $mo;
    $ \1 Q% B' \$ g) f+ E# P
  8.   /**
    ( {8 R6 G, `5 z
  9.    * 构造方法1 \; r. X& l6 G$ H7 T" n" `/ O
  10.    */! @- j! \/ }1 `
  11.   public function __construct() {* C! ^9 t/ Q' w3 p) i+ v
  12.     $server = DBSERVER;& x" t. b/ Y5 `' o0 l
  13.     $user = DBUSER;
    2 ^3 J/ M( _5 M' k- |# I6 {
  14.     $password = DBPASS;* j; l  V: a! x" l- E6 y
  15.     $port = DBPORT;; o4 b. Y! b9 L  }7 Y7 t
  16.     $database = DBNAME;) D; e' ]  V9 W/ F
  17.     $mongo = $this->getInstance($server, $user, $password, $port);( o, k4 I8 L1 K; k4 j$ e
  18.     $this->database = $mongo->$database;
    4 q7 F& T; ^$ h9 x4 I
  19.   }
    7 [7 R% E( T0 Y1 j& \3 r3 G$ d
  20.   /**
    , H9 l" X/ w2 A# o+ ]1 x! P
  21.    * 数据库单例方法
    8 f" ]' O+ U8 Y1 d0 ]
  22.    * @param $server
    $ Q* n; S, N) ~: v7 O- b
  23.    * @param $user
    + J9 j  s, r, m# \
  24.    * @param $password: f4 S  k+ [+ }5 b! W0 a( R# X
  25.    * @param $port
    * M4 b) ?3 V4 X; z/ F
  26.    * @return Mongo
    / D/ i  ]6 M; o9 F0 y
  27.    *// c5 k3 W" D+ M  V+ u
  28.   public function getInstance($server, $user, $password, $port) {
    & q2 h- E- }$ W" l8 c3 O" S
  29.     if (isset($this->mo)) {
    9 R! g  ~, M0 H9 s) D( l* c
  30.       return $this->mo;. H. U; X' l3 G* n% N
  31.     } else {2 q, M1 d, v; I! \
  32.       if (!empty($server)) {
    * H6 [" E. t. W% s- x1 x
  33.         if (!empty($port)) {/ m' f, t- L& b/ g: X1 _
  34.           if (!empty($user) && !empty($password)) {5 g& F+ u" v3 \8 A3 p+ v# B" v
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");$ R& ~/ m, g) m2 e) C
  36.           } else {! ~% k" P8 s  Z- A8 d
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");2 @: }  _* H! L$ H" d
  38.           }
    , }: J0 c" X% a# [% i' J4 b
  39.         } else {
    0 V0 d- E! M3 n4 T. S) s
  40.           $this->mo = new Mongo("mongodb://{$server}");0 B* j# |. u, n! e% v
  41.         }9 e4 N  N) p7 O9 q# c& L' ~
  42.       } else {
    ; b, d6 |8 i, J6 b3 {
  43.         $this->mo = new Mongo();1 x5 c7 }, G9 ]/ p3 `# x8 S
  44.       }) A/ a+ v% [6 P$ |
  45.       return $this->mo;
    ( x  U" e- z& D6 p; s$ t
  46.     }
    9 `- a0 t5 |  t; }, J% @
  47.   }4 K+ n& W8 i: N9 U4 B
  48.   /**) o) Q, b4 F( C% `: r8 {7 F0 I, F
  49.    * 查询表中所有数据- a2 `& V, I" R+ A  h
  50.    * @param $table
    / l4 V1 k" e2 m. N% q' a; c1 E9 w
  51.    * @param array $where
    * X% d1 N) g* W+ R/ @
  52.    * @param array $sort! `+ B; s6 t# z( l/ U/ d4 S
  53.    * @param string $limit6 W4 g! ]* s4 }& F# \' x# U
  54.    * @param string $skip
    % J; B& _  B8 h& b
  55.    * @return array|int
    5 r$ f# Q0 {. U# n# f, l7 C& @' I
  56.    */9 @7 @! K* a/ j6 `( B! ^2 I
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {0 v5 Y0 O5 @7 v1 f3 j" q
  58.     if (!empty($where)) {# F8 y9 g0 ]- F( }  p
  59.       $data = $this->database->$table->find($where);
    . E- x; A! k) J+ A0 v  U7 t
  60.     } else {
    , L0 R( R7 H5 F
  61.       $data = $this->database->$table->find();
    ; I, e0 ]* m6 @- n3 }% _2 B
  62.     }
    - A1 n* `) K0 P* k
  63.     if (!empty($sort)) {
    5 r) z  g6 i* ~7 N2 n
  64.       $data = $data->sort($sort);
    ! m6 [& T) z% D; i# U" z( Q  s" j1 B
  65.     }
    & }9 V3 W# P; n, k, u* X
  66.     if (!empty($limit)) {" w- D' \" S3 t
  67.       $data = $data->limit($limit);
    , x" R8 O& _- U1 M- u: t  U
  68.     }
    ' `' t! \# _2 {' B3 z
  69.     if (!empty($skip)) {# g. P4 _5 o% e1 K
  70.       $data = $data->skip($skip);
    3 X0 h' G$ O' J: R* Y8 U! R- V
  71.     }0 x! n. e. H- t4 ?3 G' k! Q7 @7 g
  72.     $newData = array();
    - F' T8 l3 O0 D$ O2 Z( X  i5 \. x# [, P
  73.     while ($data->hasNext()) {9 W. A: ]1 K7 ?+ k
  74.       $newData[] = $data->getNext();
    ( m2 d: P3 V2 I& L" n# \) F5 W
  75.     }
    " _! j% j6 O; \) `. c
  76.     if (count($newData) == 0) {, p/ |1 ]  G3 m# A( o: @& s
  77.       return 0;4 n% |: i: u# j
  78.     }
    ' h' [, B* N4 _/ {3 y
  79.     return $newData;
    ! W) B' D2 x5 H2 q; K6 U! m& E. s3 h
  80.   }
      {0 h( o2 j% o0 @5 i5 ?
  81.   /**
    & P! e% A' l% V4 O0 L6 J. m
  82.    * 查询指定一条数据
    9 x+ d, ]7 o! u# R1 }% g# p
  83.    * @param $table
      @# j- G. C: P3 e- i1 R) B* X
  84.    * @param array $where
    6 Z% T9 r: K* a( o- B& b+ ]
  85.    * @return int( s7 R  j) J/ K- A; F7 [  k6 K: c
  86.    */
    - m; X' @+ e! j$ k1 K# o
  87.   public function getOne($table, $where = array()) {
    1 |4 u! V; ~6 ^- x  r% V7 x  B
  88.     if (!empty($where)) {
    ) ~: ]" ?4 O1 X1 \" S
  89.       $data = $this->database->$table->findOne($where);
    ; t2 Q  W9 c( y( D$ e% r1 b8 k
  90.     } else {
    + M( s( g' J* g
  91.       $data = $this->database->$table->findOne();0 M3 U9 B, ]9 E, U
  92.     }
    3 n: Z8 _. ?/ a/ _5 v9 x9 J
  93.     return $data;
    + f* ^3 A$ L4 z* k6 }
  94.   }
    * M+ n% M  c+ x
  95.   /**9 ^! ?, p3 i& M' u; }* N
  96.    * 统计个数) K$ l  j9 z- H2 \9 I+ S
  97.    * @param $table* [# _! s  ~# X5 J
  98.    * @param array $where% V+ r) B; V% k2 b0 u
  99.    * @return mixed1 _. @* S$ Z& ^$ a0 T
  100.    */# M7 z& m; Y; J+ k
  101.   public function getCount($table, $where = array()) {$ a+ L6 p1 o! B
  102.     if (!empty($where)) {6 Y: a9 B* c- O1 t; v
  103.       $data = $this->database->$table->find($where)->count();
    4 t7 S- P0 |& W# l
  104.     } else {
    2 a# m- ]/ s2 q- z; I/ v
  105.       $data = $this->database->$table->find()->count();- J1 x' g# V* K8 J
  106.     }; v  ^' v4 `0 D$ \+ D# F
  107.     return $data;
    5 A- n2 w: x! x8 L
  108.   }
    6 S, ]! U5 [* ^0 y6 Q: \* C
  109.   /**
    $ ^( R7 ^5 `- P) y
  110.    * 直接执行mongo命令
    + m7 E$ ]. e1 Q, w3 o8 j% m
  111.    * @param $sql
    . A) V, }% k" ]9 Q" e7 t
  112.    * @return array
    8 ~% `3 W# F& M$ `6 \2 |
  113.    */
    8 V, b% z, D- s( z) I: s/ `% S
  114.   public function toExcute($sql) {
    * J" d# W' I) Y: V' b& |
  115.     $result = $this->database->execute($sql);
    1 o4 w! P" b" z; g+ j
  116.     return $result;
    9 h& ?% c! {% T0 t" a) S8 B
  117.   }8 E4 m  B* s! E: N$ S/ H" o
  118.   /**+ H  t7 k  y( |- Q. }6 L
  119.    * 分组统计个数
    - j/ P4 V( O% \
  120.    * @param $table# y9 Y( s  i5 O7 o  K7 ]. o8 c
  121.    * @param $where6 f: z/ m* Q7 c* c
  122.    * @param $field
    ; ?) Z4 K5 K1 X: r
  123.    */+ F( Q% f" A  K/ W0 s6 `1 n
  124.   public function groupCount($table, $where, $field) {
    - D# }6 J/ W7 p
  125.     $cond = array() i  }) u5 _1 |3 M+ {2 ^
  126.       array(: s/ C/ i7 I& V& I* g) k% t
  127.         '$match' => $where," Y: \! o$ A, |% Z& G! i$ p$ B! E$ M( c
  128.       ),
    ' a- \( q3 }0 t4 t2 i+ p# l
  129.       array(" k* b* X' A: C$ ?; P6 I( A
  130.         '$group' => array(
    2 _' F3 @/ U3 a3 T+ n8 C
  131.           '_id' => '
    9 x2 {- B7 h$ f5 Y: A

  132. 6 @% T1 g, p+ g, A& j
  133. . $field,  b; F8 i: e0 n/ @' G
  134.           'count' => array('$sum' => 1),! @+ X3 F0 t8 O: J& _
  135.         ),
    # A" W) P* ^& R+ [, z+ ^9 Z8 Q  p2 w
  136.       ),
    8 {9 Q) s, k+ {, k1 W: f
  137.       array(: I/ Z2 s! E) w2 W. e
  138.         '$sort' => array("count" => -1),5 s7 `3 X- q0 ~1 s) i
  139.       ),
    3 f2 b" E3 P+ J6 S: G6 W
  140.     );
    1 w- C+ G3 X  `& J0 a/ l
  141.     $this->database->$table->aggregate($cond);
    5 c" @: O" E2 f+ K! L2 P
  142.   }
    / R# W2 C/ r6 O3 K2 `, ~$ T5 s
  143.   /**  X5 u0 ~; [$ O( K- v. R% H
  144.    * 删除数据
    $ f( {0 t1 P: J* a: ^: E
  145.    * @param $table: o) V; c6 k+ l2 T( w  D6 l8 t( J
  146.    * @param $where
    * E, X0 U; z4 C
  147.    * @return array|bool
    % u" n2 W5 G; c3 Y
  148.    */
    9 y2 `5 C6 B# d
  149.   public function toDelete($table, $where) {8 p" m0 F& r& m2 L* U2 z8 \  n* T
  150.     $re = $this->database->$table->remove($where);" J% G  Q1 k( {* R. Q$ W+ \4 f4 P1 r
  151.     return $re;+ k4 J6 t3 R; t8 v! P, J, H
  152.   }
    ! Z. u$ m8 Z" Z' x6 w% Z6 h6 ?
  153.   /**6 X8 x3 q& f% ~. {" D# Z* J5 V- C
  154.    * 插入数据
    0 O3 `2 t: v* {! d
  155.    * @param $table0 z% P/ \, O6 c/ Y
  156.    * @param $data; {' J0 s. d( {- ?6 B/ x
  157.    * @return array|bool
    1 w; J# h9 K  Z6 j8 N1 S8 H; _5 p: C
  158.    */
    + O% F( J( u% G) ~. ^6 e9 @/ k
  159.   public function toInsert($table, $data) {
    + _+ J$ x. V5 ~" M- N( B* K, g
  160.     $re = $this->database->$table->insert($data);
    & X5 [. g0 _' r: m" X1 t
  161.     return $re;
    ! `  t( y: @+ M5 d! O1 {
  162.   }; x' R5 S3 t; P! W
  163.   /**2 x2 P+ s1 b  M4 j6 q8 n
  164.    * 更新数据
    : Y! {& V. ?5 K) C7 s/ x6 m
  165.    * @param $table2 l8 s' d) s" c( A3 E( \
  166.    * @param $where
    - T; J9 A( P) @1 B
  167.    * @param $data
    3 _8 C  E: X. U
  168.    * @return bool8 T. W' x1 w  c! F
  169.    */
    , o0 a. X; [) g
  170.   public function toUpdate($table, $where, $data) {
    & f# m! U3 E; r
  171.     $re = $this->database->$table->update($where, array('$set' => $data));% l$ j0 d4 o* d2 N- }0 U* X
  172.     return $re;$ ~6 i  m) R! N
  173.   }9 z: x- W- W: {; y# Q
  174.   /**
    ! V( I9 G+ [# I8 i
  175.    * 获取唯一数据" B+ n3 B+ G7 ?  s
  176.    * @param $table
    * D2 y0 Z. p! X: z  [( D5 @; E6 Z
  177.    * @param $key
    ! |- u+ w% x4 g9 \2 d  y
  178.    * @return array  U3 R' ?# p+ J) [
  179.    */6 e( E$ x* f. H5 h( _! e% h7 j( H
  180.   public function distinctData($table, $key, $query = array()) {
    . B' `3 r1 q: y& [1 r
  181.     if (!empty($query)) {" \# f1 l2 J5 ^) `- B
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    1 Q% z4 J9 a$ H7 o) M' H
  183.     } else {8 A" {3 f5 m7 C' j! j! }
  184.       $where = array('distinct' => $table, 'key' => $key);
    ( s3 m- A8 x+ ~' _6 Y' z
  185.     }, d; t. L3 F  S) m
  186.     $data = $this->database->command($where);
    / B5 S+ y! e# l- |
  187.     return $data['values'];
    0 \2 Q# H; Y3 K) |0 r4 G$ B
  188.   }! E/ }+ `3 c- O* `! G
  189. }
    7 X3 |4 g5 o: m+ D
  190. ?>
复制代码

: k- P& b. ^  a8 u  j. U
2 h0 F# c: D! H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:31 , Processed in 0.063743 second(s), 19 queries .

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