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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。) P5 H. x% B: h3 W9 u" n
模式自由。4 O6 w+ W! K' d% C0 T
支持动态查询。
$ K* [" y0 x: j: S/ n5 ]4 H% {支持完全索引,包含内部对象。+ g, F) b- e$ `7 W: h; |
支持查询。: j: _8 I9 }; M" {) r. X
支持复制和故障恢复。
7 u5 A- C% `/ @. y6 W* A3 B( [使用高效的二进制数据存储,包括大型对象(如视频等)。
/ J3 N7 ?& s3 o; T/ Q自动处理碎片,以支持云计算层次的扩展性+ G# g  c1 M. y/ U
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
7 U" N3 w+ ]- ]文件存储格式为BSON(一种JSON的扩展)
4 L/ I4 ]" T: H/ U可通过网络访问

所谓“面向集合”(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
    / O7 |) \# P" h4 @1 Z2 b
  2. /**
    5 j1 f6 n  j0 m! c' T+ p) n5 D0 |
  3. * PHP操作mongodb数据库操作类2 S, h8 {- ^) C7 Y
  4. */+ m% g2 H1 S( w5 i. }
  5. class Database {
    2 D9 V0 z" W% \2 H& c* i& d& }2 _
  6.   protected $database  = '';) Q. M6 b$ ^  V4 ?$ S9 N4 H% Y
  7.   protected $mo;
    & D9 m/ ~' R' o5 V2 X$ \/ q+ A
  8.   /**
    8 F/ i$ I) K: ^3 Y9 |+ V  _
  9.    * 构造方法1 a: {; N2 D, J) L4 y
  10.    */
    4 R* \0 U5 M' b. G3 {
  11.   public function __construct() {! g6 Z8 m  K3 l& J
  12.     $server = DBSERVER;' z  F1 c, }- E! _+ d: V* t# z
  13.     $user = DBUSER;  Z: l% s- P* ?* ?( Z7 }7 ~* P3 R
  14.     $password = DBPASS;
    4 L  i; V- l5 e: K2 k
  15.     $port = DBPORT;9 Y, H/ L$ ]( j7 E, |* }. @2 p
  16.     $database = DBNAME;! k4 b& e# V: X9 X6 }
  17.     $mongo = $this->getInstance($server, $user, $password, $port);4 ?% s- C; M( t9 a( Z: \- A: J* b% I
  18.     $this->database = $mongo->$database;% }- h3 a4 {1 L+ ^) i/ m2 f1 J& [
  19.   }% [0 q( {3 f! ^1 j! \( i* m9 _
  20.   /**
    $ ^3 r) r; h8 M" H# I, v5 i/ y
  21.    * 数据库单例方法) l" {3 f, @' |" n. e$ A2 `0 K
  22.    * @param $server2 Q3 }% N0 Z% d  Z
  23.    * @param $user
    4 \5 Y/ D' ^6 Q2 U9 \* x: m$ l7 _" H
  24.    * @param $password' L9 c6 |0 z4 f- ?6 K- ~
  25.    * @param $port; A! R* D4 [9 U5 q" u% e1 m6 H; G
  26.    * @return Mongo
    6 v8 g2 \, K# F% ?& a' x; x7 x
  27.    */6 o" b$ L2 B$ D) Y" p
  28.   public function getInstance($server, $user, $password, $port) {
    ' P: [) z) c4 c+ Z7 V
  29.     if (isset($this->mo)) {
    / P( b/ x  Q4 I2 ]1 n2 Z
  30.       return $this->mo;7 ?! ~. X+ s5 a5 D/ W
  31.     } else {
    - |$ o/ d- _; Y9 O5 R/ Q% ?  e
  32.       if (!empty($server)) {9 O+ u- E" U2 M( M( |
  33.         if (!empty($port)) {, b& I9 G9 H5 N" c% Y
  34.           if (!empty($user) && !empty($password)) {
    7 Q) }' T1 v; f! ~9 Y7 m
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
    9 ^& y* B3 u0 n6 |* O6 g
  36.           } else {
    7 R, B. u5 F: c
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    6 H3 x! C  Q6 ?- n+ m
  38.           }) m% Y  }" T2 j9 B
  39.         } else {7 A0 e, U: E5 O: i
  40.           $this->mo = new Mongo("mongodb://{$server}");) h! K+ W5 A5 ~  e0 q
  41.         }, V5 W, j" N' _2 ?* J9 X
  42.       } else {! B; F; Q. }2 `, c
  43.         $this->mo = new Mongo();
    + J6 D" ^5 j9 O( z9 M% _1 J- }
  44.       }, \7 m4 L) `1 |  s, j
  45.       return $this->mo;  N9 Q1 X: r" z9 @$ S" t
  46.     }
    / ]/ h1 h  @" Q6 |' `; }3 W
  47.   }
    5 }/ O/ L7 g  W3 s/ E, T" a# H6 |
  48.   /**& O! Z# D5 [# j2 C/ _( f& o
  49.    * 查询表中所有数据
    8 A" t* b+ t/ h9 C3 x, k' |
  50.    * @param $table3 e+ c! `7 D0 l4 J: F
  51.    * @param array $where7 c# L5 }% K- T2 q7 Z2 {
  52.    * @param array $sort
    4 ~" n7 L$ W, i" {1 {
  53.    * @param string $limit$ f; W( S  T' _6 M/ N; `
  54.    * @param string $skip
    * N% s" R$ ]/ U  i# Q% O1 ?/ ^
  55.    * @return array|int; l- _/ m" |) u0 M# `* H
  56.    */5 j$ \+ T% f! w4 q, C* i- C2 v
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    $ D  F6 U0 t5 e6 X  h
  58.     if (!empty($where)) {; A( {$ h( s; M
  59.       $data = $this->database->$table->find($where);) U' l' ?  T" i4 ^' Z
  60.     } else {
    - S) x7 n' S2 l) k7 Y
  61.       $data = $this->database->$table->find();# y/ l$ F9 A$ X7 `' y6 t7 F
  62.     }4 \5 E: A0 e. O* L+ X* x% I
  63.     if (!empty($sort)) {! V" p0 J$ S" D/ z( b8 N% l# N
  64.       $data = $data->sort($sort);4 u$ T& ~0 f  d9 F3 G  p
  65.     }5 H, n( ^& {0 m+ o: u
  66.     if (!empty($limit)) {
    $ _8 n5 c% S8 R: U* {6 {
  67.       $data = $data->limit($limit);
    " |! H6 h1 n8 @8 n2 G! f
  68.     }5 p, ^" B; O6 [) @  s! V' h# [0 q* U
  69.     if (!empty($skip)) {' ?# a9 ?8 H, W9 y
  70.       $data = $data->skip($skip);% p: P% |5 M( C& T3 ^; k
  71.     }7 x0 o" e- V0 f" z0 o8 I! k
  72.     $newData = array();
    % `0 r% L; i* ~' Z- U  g
  73.     while ($data->hasNext()) {# Z. @5 @+ G, [1 _. e
  74.       $newData[] = $data->getNext();  X9 s3 T. w: ^
  75.     }0 _; |* Z  a. F) t! H9 C
  76.     if (count($newData) == 0) {
    ' l$ m, e# q" X5 d
  77.       return 0;
    9 y3 e* M7 o# X" k  c( M0 v
  78.     }: i, `% V, U2 K  X! ~+ V
  79.     return $newData;
    ( b( H1 [2 Y: F; ^4 X+ N+ Y
  80.   }
    5 k+ p+ a5 `: X/ N6 d9 v
  81.   /**
      O0 V! w7 A+ a0 o3 V0 e8 l& u% k
  82.    * 查询指定一条数据
    ; f7 O: n0 R% Q! h0 W6 o8 C
  83.    * @param $table% n- p5 m/ X, t' ^/ j
  84.    * @param array $where
    9 ~; S( ~* |/ M- j& r. i
  85.    * @return int
    1 ]& x, L. ?8 w2 |
  86.    */
      {) N0 T; g1 I& G2 f8 `
  87.   public function getOne($table, $where = array()) {
    $ M( X8 s# E* z+ G, S
  88.     if (!empty($where)) {' f! T: {# v. D/ \& ]) U4 ^( S) Q
  89.       $data = $this->database->$table->findOne($where);& P, l7 S. h# C& |
  90.     } else {
    8 @, \7 f$ J( N3 A, Y- T& L
  91.       $data = $this->database->$table->findOne();
    1 d5 D! j" [5 m6 g
  92.     }( q2 y0 C1 {4 [9 R2 \
  93.     return $data;- e: l( h" O: _8 R( O- n( h1 s2 W
  94.   }& o% H+ R1 d0 z+ V2 z1 U' b
  95.   /**: a. U4 N& _. x+ H
  96.    * 统计个数8 q' s7 @- x4 J% Q7 Y0 N6 w+ B
  97.    * @param $table3 P2 {% ^6 Q- Y5 k9 J
  98.    * @param array $where9 G$ [- _. y- }$ E0 M# d
  99.    * @return mixed
    3 n# g, Z& s, L2 E3 h3 \% u) G
  100.    */8 Z) t: {2 i$ D" Y
  101.   public function getCount($table, $where = array()) {9 Q: ?8 x3 j1 h) T0 ~8 ^* M5 M8 y1 y
  102.     if (!empty($where)) {
    % G- w1 a, r$ K& d' M
  103.       $data = $this->database->$table->find($where)->count();
    ! I9 ~6 c' O, U- T8 S& f* ^! D: E* |
  104.     } else {: w) ^# A, G3 C8 h! u) O5 l
  105.       $data = $this->database->$table->find()->count();
    & O, w- M' g1 M+ f
  106.     }) O# }" J0 Y1 n
  107.     return $data;8 [* l) @, o; ?# d5 T0 L) \
  108.   }0 f# {$ U' \9 t5 [: f9 |& M& m
  109.   /**/ ]/ B5 Y0 I, G( e1 J, R$ U
  110.    * 直接执行mongo命令
    . ~3 K$ a) ~$ _$ c
  111.    * @param $sql
    ( }+ Z& {* Q9 c. f
  112.    * @return array; }9 o1 `6 w5 V6 d; E
  113.    */
    - m* I7 w* @& H
  114.   public function toExcute($sql) {3 t$ I4 U: t/ ?1 T
  115.     $result = $this->database->execute($sql);
    & e6 i. }- H9 Y; m9 t' ~
  116.     return $result;
    4 m4 _! q3 C: Y3 W
  117.   }
    ; ~0 T0 N1 K7 i6 [% ^( D  T0 Q
  118.   /**# i8 o0 i: a) O
  119.    * 分组统计个数
    6 V4 U5 [" U: @5 j
  120.    * @param $table
    : E% e) S  I) Q& [9 K4 Y# j. v
  121.    * @param $where
    ; C% x" s6 ~; L2 A5 o) _' A+ W
  122.    * @param $field) B, Y- M: x" @$ f  b0 G; v
  123.    */
    4 L2 F/ I2 p- V- {9 B3 v
  124.   public function groupCount($table, $where, $field) {4 Y5 G) i/ m4 H1 `( d
  125.     $cond = array(9 {9 K# ^) W2 }1 J* L$ m
  126.       array(! A4 L' C" j; h3 O8 H- Q
  127.         '$match' => $where,
    0 J) M2 H4 O! m$ v0 z; V: s% d
  128.       ),/ D. s& u( q, |
  129.       array(
    5 \" }- C6 p  C2 O2 T& o& Q
  130.         '$group' => array(
    3 r/ ~; j  S# \. S5 J5 V$ R2 E
  131.           '_id' => '
    + S  ]7 G$ z& c0 p0 g% _- M
  132. # Q  L& j7 X+ m, w
  133. . $field,- G/ T# N" A( O0 W8 e
  134.           'count' => array('$sum' => 1),4 X5 t' @- @& V2 K. p. z" H
  135.         )," c0 S. q6 v1 Y4 P
  136.       ),8 X7 ?1 q% O( q+ M3 u  l
  137.       array(6 ^0 O; b4 J4 m0 B) X, J+ `6 _
  138.         '$sort' => array("count" => -1),
    ' o, D3 ~. H- W. Y3 C* K
  139.       ),
    ! O  U1 r9 @+ u/ n8 |, I
  140.     );
    0 m( o/ ~$ N0 W3 Z/ D: `
  141.     $this->database->$table->aggregate($cond);3 M2 i0 |5 T$ X3 p8 ~
  142.   }2 c3 y% E5 p, [
  143.   /**
    8 W  s" X* t) H7 {1 U" v: W
  144.    * 删除数据
    - k4 |- i9 m* |+ _- f6 }% g
  145.    * @param $table
    3 Q) a8 p1 b1 x0 y, O; x
  146.    * @param $where' Y2 p9 M4 q) g
  147.    * @return array|bool: s3 Z6 ~7 S& a$ t" P) r4 o' g
  148.    */* E4 b, @3 i* u( a0 O" d
  149.   public function toDelete($table, $where) {. |7 a- F! s' L, g6 Y- `2 @
  150.     $re = $this->database->$table->remove($where);+ ~, m9 ]: L) _# A& e2 N
  151.     return $re;( a" S& @3 }2 n$ N3 j# K
  152.   }$ N# K6 S7 {+ k
  153.   /**
    4 A7 g8 J/ q/ y0 r7 I) X0 @
  154.    * 插入数据
      _% K' P. q1 O! p2 I
  155.    * @param $table2 g0 ]5 v5 l0 x) T( r
  156.    * @param $data- k: C& _1 U9 ~
  157.    * @return array|bool
    : P" |) N3 G5 Z, T
  158.    */1 N8 [6 Y3 G; M/ B
  159.   public function toInsert($table, $data) {9 l; k( V/ G* b& j; o
  160.     $re = $this->database->$table->insert($data);
    5 e: \* f7 `0 E) k/ }5 c- P
  161.     return $re;! C( t$ }3 S  q. j1 y* w
  162.   }
    8 O* R  l% H/ B! Z  x! ?
  163.   /**
    & i/ g" g1 _0 f1 O1 B5 S
  164.    * 更新数据
    # Z( o% e" h3 ~$ `* L1 t4 d
  165.    * @param $table
    ( n- c# b+ q( T/ y# v
  166.    * @param $where
    6 R, N3 f- p: E, F% J, M7 }
  167.    * @param $data
    7 n% w7 }$ Z6 ~; \/ }' B
  168.    * @return bool& d. n# U% D9 U
  169.    */
    % E. J3 q# Q$ n- A, W
  170.   public function toUpdate($table, $where, $data) {
    6 d% o" h% k% C* l
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    " M$ b1 \. e5 F  }! g
  172.     return $re;4 z* s/ M! a  h5 n
  173.   }
    ) n# e+ ?; R* ]
  174.   /**
    * {9 k& G4 @6 ^; y' U- ?1 Z
  175.    * 获取唯一数据) @: q/ l6 v! Z' z+ n; a
  176.    * @param $table  a& k$ O+ P2 u2 R2 g1 S3 \
  177.    * @param $key
    * f4 w9 X4 f% d9 Z
  178.    * @return array
    ! g; [5 K& e/ d# p0 T: R7 l
  179.    */
    . \+ d# S: f' _
  180.   public function distinctData($table, $key, $query = array()) {
    4 `* O* Z6 R6 b& R) l+ w
  181.     if (!empty($query)) {
    # c0 Z1 i" P* o6 b+ d* Q
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    % j" Q, ^4 Z" I! G, d5 d5 Q  q
  183.     } else {
    8 _/ c% c2 O8 y- W% A
  184.       $where = array('distinct' => $table, 'key' => $key);
    . d0 L  A  ?1 z; b6 v9 N3 j. j
  185.     }
    & G3 q. C9 c# G; Z
  186.     $data = $this->database->command($where);
    - u0 w. U: P" |* I; f
  187.     return $data['values'];& O' U7 h" m  P2 j3 ~% p: H3 g, T
  188.   }! y! K: y3 p- `( C
  189. }
    ; V/ I; V- r" D/ c5 [0 Y4 c, N
  190. ?>
复制代码

6 N7 s6 q/ r( ^/ O0 K9 B8 x! R- z( |) M  a: o9 ]% @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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