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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。* o: n+ B0 S: D: R( B; K
模式自由。( o5 z& l& q7 C$ y; L
支持动态查询。4 K& Z8 ^& l( n; h4 {+ f: I
支持完全索引,包含内部对象。1 f/ c3 Z. u4 ?7 D
支持查询。
6 Z' z1 p. v/ H6 ?3 W& x5 W; ?5 j支持复制和故障恢复。* Z4 R6 @# B$ |* C/ z" I
使用高效的二进制数据存储,包括大型对象(如视频等)。
, x' V+ w1 n; ~. m4 W/ b0 y/ q. C自动处理碎片,以支持云计算层次的扩展性
- z* t, G6 C! k支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。8 \0 U" x) n9 b& ]
文件存储格式为BSON(一种JSON的扩展): K* ?# N/ t" A4 V4 I
可通过网络访问

所谓“面向集合”(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
      {' j! f! H2 p/ U0 `0 A) M
  2. /**1 D1 a- T5 J* U  U; c* `2 @
  3. * PHP操作mongodb数据库操作类
    , ]# L$ t6 T6 I: x2 b
  4. *// m& a7 p6 v' T  S( y% u) B3 R- N1 Z; [
  5. class Database {
      D1 Q6 F5 E2 r& ]9 _" N
  6.   protected $database  = '';
    ' Y$ E! @0 [2 E! R1 S& Q( ^
  7.   protected $mo;
    * M" i7 ]9 o4 y5 v& t% |; W, \
  8.   /**( g" x9 C& m' \' c
  9.    * 构造方法" L8 ]* V% i0 ^0 z
  10.    */
    5 b# x  N, s3 k6 v4 z( N/ M/ [. n
  11.   public function __construct() {
    : v6 |% J7 t4 U! |( @5 c& u* M
  12.     $server = DBSERVER;/ T+ d" ^9 d' _9 M$ r% z
  13.     $user = DBUSER;
    7 |1 U$ O3 i. g2 T3 }, ~5 H
  14.     $password = DBPASS;
    8 Y8 M5 D! H6 q6 E: B
  15.     $port = DBPORT;
    $ |. ]2 E0 o. e6 G
  16.     $database = DBNAME;
    2 }- D6 O/ c, `" a  h- v! ~
  17.     $mongo = $this->getInstance($server, $user, $password, $port);
    $ e; ^- a( |$ H$ Y- b5 K" C( \
  18.     $this->database = $mongo->$database;+ m' l3 E  p! \! K# h( m
  19.   }+ k' d4 @* L/ `$ b1 q) W
  20.   /**
    % e- I- T! x+ c8 h3 C2 T, }
  21.    * 数据库单例方法
    / @, z8 t6 J0 P0 K4 F
  22.    * @param $server. c5 }4 p% M- M7 U+ V5 z
  23.    * @param $user
    , Q# }3 U0 s6 K0 ^* G6 Y
  24.    * @param $password  r% W/ K* c  P/ W0 b
  25.    * @param $port1 K9 J  d3 I, }/ j1 z( O7 l( ?) w
  26.    * @return Mongo
    ) b3 E4 o7 K" [6 V1 x& Y! P: u* \
  27.    */- o0 w, _# Y- w# a
  28.   public function getInstance($server, $user, $password, $port) {
    : r7 {5 }& h" G$ \
  29.     if (isset($this->mo)) {
    & V. b, k$ F$ W5 T
  30.       return $this->mo;8 d& W) Q* R7 J  I( r$ f* _
  31.     } else {( L; U+ [) _: W1 C# O3 J/ }5 S$ }
  32.       if (!empty($server)) {) B( M$ a$ [6 U" x0 D
  33.         if (!empty($port)) {
    " x8 U. ~) q4 r$ W, A
  34.           if (!empty($user) && !empty($password)) {  ]+ M/ J8 n& R* {% n/ x
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");# o& k& V3 K/ j) z* ]+ A& J) m8 F2 o
  36.           } else {
    7 a+ N# A1 U0 X* m3 k
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");; R7 e  r: b4 C1 B% R- p
  38.           }
    9 ]+ w8 ^6 C2 R& O
  39.         } else {1 T* {% ~( ?  k: x  m) G7 A
  40.           $this->mo = new Mongo("mongodb://{$server}");+ g  C7 f# W; v5 N* @. }1 g
  41.         }
    ) w: y1 W  `1 q
  42.       } else {
    ; T: U8 E3 C# f1 J* u  g/ u
  43.         $this->mo = new Mongo();
    - ~& i6 ~6 Z; w6 ]' e8 N( J2 \
  44.       }
    2 e/ a- V( |: K
  45.       return $this->mo;
    ' C0 k" @. j; y" v% G! `# m
  46.     }/ h* N# z& W( O' i+ L5 R
  47.   }, t8 Z" t" K5 i# i9 U3 \2 _
  48.   /**
    2 P) I' p& w! f0 X
  49.    * 查询表中所有数据
    6 `6 b2 K$ {1 w1 U$ Q
  50.    * @param $table
    ; j$ c$ e  Q5 p5 V) t
  51.    * @param array $where) |8 L# C. L+ G
  52.    * @param array $sort
      A0 ?1 I, m7 P9 L
  53.    * @param string $limit% q* L3 Z* N: k  a6 G/ |- [8 {
  54.    * @param string $skip
      j9 z" m% ~! h4 N
  55.    * @return array|int: T% Y8 J! Y8 z# u7 z
  56.    */0 N# @9 L1 Z: q% T. Q/ j7 s
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    " _: H3 @: \  ^$ S" p' M+ T) Y
  58.     if (!empty($where)) {
    5 X0 ^  x6 b5 P
  59.       $data = $this->database->$table->find($where);
    ( ]' L" f& B% |+ |9 ]
  60.     } else {& y2 N6 q6 D: j
  61.       $data = $this->database->$table->find();! q+ i+ u& [& r' Q5 v7 z6 y
  62.     }
    % U7 Q4 {3 f; V
  63.     if (!empty($sort)) {
    - [; m0 U8 o  s2 v" P6 q- E6 Q; j
  64.       $data = $data->sort($sort);
    " y, T, C: J( _$ M- ~3 N! U
  65.     }$ }+ Y8 N8 {7 C; ~
  66.     if (!empty($limit)) {- o' m; x5 q# |; I  A
  67.       $data = $data->limit($limit);
    & l/ I+ Z2 G5 S) _- e0 y
  68.     }4 k% @0 Z0 `  S, @  D" R
  69.     if (!empty($skip)) {( z3 Z; m. M( p6 l
  70.       $data = $data->skip($skip);* J6 O1 c8 _3 B! [
  71.     }& f' ]/ z' x" h6 d
  72.     $newData = array();
    ! ^4 d* j8 L5 x
  73.     while ($data->hasNext()) {+ c3 M0 m* ]6 A: R" e$ O6 o0 u
  74.       $newData[] = $data->getNext();
    5 y3 u! K+ u7 Q* ]; S; }0 Q- @
  75.     }$ y% F: V5 U( B; g/ ^
  76.     if (count($newData) == 0) {6 X2 T9 Z3 M& f5 d. s0 a! p6 R" z
  77.       return 0;- E2 G( {$ o$ C- N, q  V9 K% I
  78.     }- f3 |; `: A* w& W7 P9 ~
  79.     return $newData;
      [. z6 l; [  X8 c% @
  80.   }
    8 I5 [/ G- p4 E
  81.   /**1 [+ r- H( R0 b# E3 O
  82.    * 查询指定一条数据0 x) {& n7 ]9 j0 Z% q1 s
  83.    * @param $table
    0 z6 b/ m& j% G$ f, A- E) i2 o
  84.    * @param array $where0 {  y- L5 I& w: R: r5 |4 a
  85.    * @return int  w+ K! x6 b- k1 ^
  86.    */
    * _' A& W9 `: M% T+ r" Z" O
  87.   public function getOne($table, $where = array()) {! Y$ g# a0 R' k( W& a$ b
  88.     if (!empty($where)) {
    8 J  x/ X( Q& E- w
  89.       $data = $this->database->$table->findOne($where);9 I! m3 w0 H. `- |: `. e0 D: d1 D
  90.     } else {  \) }0 _  l" v5 W
  91.       $data = $this->database->$table->findOne();
    : ?3 X1 t* I6 h6 ^! U# @$ p) G( o
  92.     }
    + f/ n. M; A/ c7 C; [. n3 k( t
  93.     return $data;  ?' g- r7 i: Z6 L8 _! d" b+ v
  94.   }: r/ j2 q. {, q) p9 {
  95.   /**9 n# \. a: s& j- {( S
  96.    * 统计个数8 L7 B$ t  D4 u1 I' ~
  97.    * @param $table) P) M# ~* X0 K- B( h' y# C) \8 f3 T
  98.    * @param array $where" @6 g1 B7 U/ N* p8 z3 E3 v
  99.    * @return mixed
    2 I2 h# b. X, G) G/ w7 @
  100.    */* \" B) G) `- {0 E
  101.   public function getCount($table, $where = array()) {
      `: t* j( P: o# T" w) m) R
  102.     if (!empty($where)) {3 f* ?: R/ `. W8 q# t4 l7 g. t
  103.       $data = $this->database->$table->find($where)->count();, s4 W8 k  t; C; }3 {
  104.     } else {$ E8 j& ~; {& G  c
  105.       $data = $this->database->$table->find()->count();! S$ ^! z9 [* Z
  106.     }
    1 z: T2 x6 g+ m6 M
  107.     return $data;2 o' E) @0 W6 K, W& u
  108.   }6 T0 W2 E9 f8 C( q5 n" e5 T
  109.   /**
    5 U* b) T: p8 I& ?" H# d
  110.    * 直接执行mongo命令
    4 E/ T7 F. }' K$ p2 g. T
  111.    * @param $sql) t6 W  E$ }! j
  112.    * @return array
    " s+ s6 ~6 V: u/ s$ D" C. h+ h
  113.    */6 t7 g' x2 _! x' n( f; S7 s, J
  114.   public function toExcute($sql) {
    - _+ Y5 a4 [9 G$ q' G* f6 u
  115.     $result = $this->database->execute($sql);3 z1 u# ~4 g3 G- e. C# Q, x8 W5 B
  116.     return $result;; V5 U5 i0 e1 ?" @" A! u
  117.   }
    . q5 p2 K# |5 W/ j; D3 h
  118.   /**
    $ e" K4 z' L4 o' `& }- v; e2 Q, K
  119.    * 分组统计个数( d+ o8 x& ~6 k5 C1 Y/ ^+ N& Q% [
  120.    * @param $table
    " D( @1 t0 p' D. ?- q
  121.    * @param $where7 u) P1 ?$ w- z
  122.    * @param $field8 }& d0 x, J( k; o  Q( S3 {. Q
  123.    */
    9 v8 U/ q/ k6 P  {% K$ X, v0 @
  124.   public function groupCount($table, $where, $field) {* f& a& s* ?# O3 r, P
  125.     $cond = array(1 {; Y9 z" @' B0 T
  126.       array(. J& D  _- w$ h, O9 v$ i
  127.         '$match' => $where,
    ; w6 |6 z: o: H
  128.       ),; A3 A9 b0 G" q% c
  129.       array(( Y6 N6 M' R% y7 G! A& e
  130.         '$group' => array(7 @2 U+ Q/ R  {( @
  131.           '_id' => '
    & H2 w$ F5 y* S
  132. - W' M1 P" S% v4 R- q% |3 R
  133. . $field,
    ) O& m# c5 b4 W) d. v
  134.           'count' => array('$sum' => 1),2 M$ I6 H+ ?) Q, f
  135.         ),
    3 P% H+ O0 O; w0 R) \
  136.       ),6 w# a4 w. I0 G3 k5 j3 g: x, `
  137.       array(* n/ Y. {+ z0 B% W( y7 F
  138.         '$sort' => array("count" => -1)," Z1 \# D' j; ^
  139.       ),! V% W+ N% R( M; Y9 g
  140.     );
    0 {, u3 W, j  A& Z8 _
  141.     $this->database->$table->aggregate($cond);
    4 \/ N* o* l% X" @  ]
  142.   }; N$ V2 l! E/ X" P" s
  143.   /**
    ; w9 d  U6 Z: S; Z& T# d
  144.    * 删除数据
    1 D; c7 f, l8 f) a$ b
  145.    * @param $table- A4 A* s+ f0 ~+ G( `
  146.    * @param $where$ @9 K2 \8 w' `+ P" Y7 O1 F
  147.    * @return array|bool* x: M. B( z9 W  w% N
  148.    */
    / d+ i& T. ^$ t3 b5 C& Q
  149.   public function toDelete($table, $where) {
      s6 W' x* u& ]5 e' C! j
  150.     $re = $this->database->$table->remove($where);! {* ]* U+ H! i9 `
  151.     return $re;6 O7 s7 J* E: {9 @* z
  152.   }
    & M  V: n, ^1 r
  153.   /**
    4 n2 x9 ]! [: r% w! p  p3 r
  154.    * 插入数据( C  t2 a! k" r% r  M5 e7 r& U
  155.    * @param $table7 N9 [: q% j8 W1 K
  156.    * @param $data9 c( L5 B8 I  R/ Z
  157.    * @return array|bool9 R+ T. Z3 }7 M
  158.    */, [  J6 [  Q4 P1 [! e
  159.   public function toInsert($table, $data) {# f* K+ U1 t% D6 S/ H3 I# `
  160.     $re = $this->database->$table->insert($data);. }; h9 @0 F8 n8 `0 I, i' i
  161.     return $re;
    & d1 D7 S% B% J% S6 F! S
  162.   }" k2 Y/ q# w0 V% K" U
  163.   /**
    9 O6 z& K/ t0 f8 V# _
  164.    * 更新数据- p9 ]% a8 g' z7 ]6 S
  165.    * @param $table; ]: x" l( A* T+ r' g
  166.    * @param $where& j1 e6 w+ x* g+ F5 ^* |+ p* z* ?
  167.    * @param $data
    7 {' C( n6 \! ?+ G  t
  168.    * @return bool
    - U0 m8 [* g# c0 _9 x
  169.    */; [! `, C4 G7 @# V, X) \
  170.   public function toUpdate($table, $where, $data) {
    7 G1 U- E  r  G) J: O# S
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    / q9 p" U+ K, w6 U, B( P
  172.     return $re;7 y5 D3 D( h0 ^7 `/ a  q- L
  173.   }6 O) S" q: _( f4 V" h1 T' K
  174.   /**0 _* G1 Z; S. W9 C! k9 z& U
  175.    * 获取唯一数据
    ' H- H8 u5 Y8 l- y/ C6 u
  176.    * @param $table3 ^+ U9 c! ~' i" |; w
  177.    * @param $key7 `; k+ r1 S$ W# S& j1 @
  178.    * @return array
    : {4 D  |/ ]! ^" l1 Q; ^( U5 C
  179.    */
    + t% a8 L  m& n& r0 H/ }
  180.   public function distinctData($table, $key, $query = array()) {. w* }+ q# u% |3 a6 f
  181.     if (!empty($query)) {: m+ X7 j( P( c' l
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    7 ~8 F: U, u, k9 B
  183.     } else {
    6 l5 t3 y/ m) v/ G
  184.       $where = array('distinct' => $table, 'key' => $key);' l) ~' l3 y' q4 X+ f& j/ p& _8 K
  185.     }
    / @; _. e4 r# U
  186.     $data = $this->database->command($where);
    ; h2 f3 a4 x# }+ a2 ~+ H& e
  187.     return $data['values'];- `6 t" g# a2 h0 ~1 U
  188.   }* T5 ]+ K" U9 b
  189. }
    + c6 l; R' F  K
  190. ?>
复制代码
; G8 I- P1 }  J, j4 B; y2 C# n
7 O) V) r+ e3 [1 p; _( J- }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 04:30 , Processed in 0.158670 second(s), 28 queries .

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