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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。* @3 a; o8 p/ T) i. G
模式自由。
( t7 R' M% s; ]8 P( N* c支持动态查询。
% p, o# B7 t8 B/ V" m支持完全索引,包含内部对象。- w! o( B- P) h9 m4 B( l2 f
支持查询。$ J( X* S. J0 p3 F9 V8 O5 S
支持复制和故障恢复。
# o( G: L6 ~. ^8 N7 I4 S使用高效的二进制数据存储,包括大型对象(如视频等)。+ `* c$ w5 q5 q8 X/ P0 l
自动处理碎片,以支持云计算层次的扩展性
" D# ^& r# |5 _; r4 n支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。' f2 l( x) D; @; |3 i
文件存储格式为BSON(一种JSON的扩展)% J! d3 Z% q& S$ X( g% 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$ t! l/ |" h" x
  2. /**
    3 L6 W! g8 [  \+ c
  3. * PHP操作mongodb数据库操作类. X- c. b/ a3 V
  4. */" @3 G8 j! E, P* h
  5. class Database {
    $ F5 n/ M6 u; ~9 {8 s& x
  6.   protected $database  = '';
      G  R6 s! s8 G, b# l
  7.   protected $mo;5 C$ }" c4 F) |5 x& O
  8.   /*** @: \" N- q5 }& q( L
  9.    * 构造方法4 R# ^7 A4 Y' v0 k
  10.    */, j# x* s8 P9 e4 F, k; [" L5 a  |
  11.   public function __construct() {
    " P; i/ t# K# v3 Y  W. q4 S  V
  12.     $server = DBSERVER;7 R3 J$ A' L! E* D
  13.     $user = DBUSER;+ o  \: j4 i7 \: a$ e7 v1 r
  14.     $password = DBPASS;
    : x, k! R* m5 w- N
  15.     $port = DBPORT;
    ; h" u% O4 T8 q* f+ J1 z; ^# l
  16.     $database = DBNAME;
    % g, h! w" m  H( C" y8 ^* z5 D
  17.     $mongo = $this->getInstance($server, $user, $password, $port);. b2 {1 Y: L& ^9 U# z: L7 O( t+ \" i
  18.     $this->database = $mongo->$database;3 F3 A8 g& z* ^  I
  19.   }
    " h1 s2 @2 v/ ]: \0 i
  20.   /**
    : f+ p8 d4 L4 g7 f- j
  21.    * 数据库单例方法
    3 M% ]; w5 I) u" K
  22.    * @param $server+ t- Z) j8 C9 g2 T
  23.    * @param $user
    3 T4 ]- ~# i+ ?2 j# O$ p
  24.    * @param $password
      C, W' b# O( B4 h
  25.    * @param $port) Y! H7 m1 _; o, ?$ r" R  @
  26.    * @return Mongo
    , @- p$ v: z6 O. D: J8 u2 p
  27.    */; `- L" h& b6 U! O
  28.   public function getInstance($server, $user, $password, $port) {
    ; J( c! i7 B2 J
  29.     if (isset($this->mo)) {4 g7 o: j6 f8 u8 l6 z) e
  30.       return $this->mo;& A4 D# Z: a1 |3 e
  31.     } else {7 p$ P9 y/ c2 I  J
  32.       if (!empty($server)) {
    % q3 c% M/ Y# k. j
  33.         if (!empty($port)) {( w0 c+ H/ j" G3 y! w
  34.           if (!empty($user) && !empty($password)) {5 m$ W$ w( i, K$ J3 t+ i3 Z9 S
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");: e- F3 W+ H4 I8 i; y
  36.           } else {
    0 L& ?5 O: i: |; |
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");1 y! Z0 p, x5 Z# |% V
  38.           }) M2 l4 D) I" {  ]' p7 p, J
  39.         } else {
      @$ U/ A1 N8 x# y
  40.           $this->mo = new Mongo("mongodb://{$server}");# ^2 p* `) f+ Y$ e7 I
  41.         }
    / r  u2 v2 z$ E0 b
  42.       } else {
    : h. }5 A  M* R- U- c. \! s
  43.         $this->mo = new Mongo();
    $ o3 V7 {* @$ Q' t2 O0 s8 Z+ `6 K
  44.       }
    3 @- B+ b# y5 d. }. x. u$ H
  45.       return $this->mo;
    ( e  f/ Z9 n# `- u4 l5 o
  46.     }
    ! t- s+ n8 K7 ?. C0 x; Y
  47.   }5 n' B. ]& M9 J- n
  48.   /**) `! y$ g- s. Z& ]1 e1 {/ y
  49.    * 查询表中所有数据
    1 ]" Y# x$ {5 L1 q4 }$ u
  50.    * @param $table
      y/ ?- H* H& p+ c: H: ~& h6 j
  51.    * @param array $where0 E$ v/ m% J: L+ e+ n# a. t
  52.    * @param array $sort6 J9 r& x% M. F' E2 G
  53.    * @param string $limit7 O5 k6 F7 U  W
  54.    * @param string $skip% M+ l/ S1 h7 t$ @+ A, x3 X' {
  55.    * @return array|int
    2 L) m( f" l$ w1 D, m0 C
  56.    */$ d( |$ K1 k8 r6 `3 s
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    - H/ \6 |+ S# i
  58.     if (!empty($where)) {* `" w( X3 k- L  q! Y4 Z
  59.       $data = $this->database->$table->find($where);
    $ S0 ~  {; S4 q* [
  60.     } else {* f) T) K' l% K6 Y, t
  61.       $data = $this->database->$table->find();  M- h1 X- x- Y# F* y9 K
  62.     }3 ~. m3 z% a) u% _  |" C0 h: \
  63.     if (!empty($sort)) {
    3 E  h7 @6 ~0 v* Q' D) O' {
  64.       $data = $data->sort($sort);/ O9 M1 ]! |# e+ @
  65.     }) g8 s  g" O* F. l  v* P4 n4 J. ]' M
  66.     if (!empty($limit)) {8 T& s- e: N$ @8 {
  67.       $data = $data->limit($limit);# ]) q; V$ b  t  M7 E
  68.     }
    9 {) O) n: k; D! x7 s
  69.     if (!empty($skip)) {3 u$ i) {3 x; n3 e5 ^  C! M7 G) w
  70.       $data = $data->skip($skip);! ^. }& }1 `$ ~( H3 G' |. \; x/ q+ h
  71.     }( L3 f0 N- t+ W; x7 C
  72.     $newData = array();5 Y4 g* ]& Y' M
  73.     while ($data->hasNext()) {, \  J' U% j% a' S* J6 W
  74.       $newData[] = $data->getNext();2 {" T6 f4 t" [( ?4 c: R
  75.     }
    : M$ D6 I" A% U; k- Z
  76.     if (count($newData) == 0) {6 F  d0 A* z) l
  77.       return 0;
    4 x5 e" p; c: @6 c# |
  78.     }9 q$ _4 e# Y2 ~! {
  79.     return $newData;
    ' {" o1 t# M/ l$ S6 Z: W
  80.   }
    ) T2 v( {/ c. M6 L: ~# B
  81.   /**; r/ U2 j% F9 ?6 `
  82.    * 查询指定一条数据
    6 ]9 ]5 C! i9 D) h: x
  83.    * @param $table
    " ?3 c3 U! t/ t1 @( ~& F$ H, Y
  84.    * @param array $where
    6 v! F2 h2 |$ m$ u
  85.    * @return int# E8 t' b1 o- B6 E: e( r5 z. b4 S
  86.    */
    * f" e6 y0 p+ p7 |2 ]- Y
  87.   public function getOne($table, $where = array()) {
    , @  s2 q' x: c
  88.     if (!empty($where)) {
    ! k4 U0 ?2 e( H  ?0 n( |* z% u
  89.       $data = $this->database->$table->findOne($where);  b9 M; f; Z8 b' U. M+ h+ {4 r  Z7 C
  90.     } else {
    % t2 d; o% u) q, ?6 t
  91.       $data = $this->database->$table->findOne();2 g6 \) ~' G/ g" B
  92.     }7 C* E# U8 b) W  X' M6 u
  93.     return $data;8 V4 a; s% t& u) q& F  f
  94.   }8 p: C4 Y' Y3 y* c7 J6 _9 l4 t0 p
  95.   /**
    5 @/ p  f6 B3 C$ B- t+ d/ `
  96.    * 统计个数
    2 r0 M" Y. Q. B' T1 ^  C
  97.    * @param $table
    % E- u( R1 D6 @
  98.    * @param array $where8 m1 w: y: K* H( l1 \/ U8 R; \
  99.    * @return mixed
    ! J5 d  F+ h  l2 d' y4 h
  100.    */5 v& D8 }- H" n3 T4 q# V8 K. G) ~
  101.   public function getCount($table, $where = array()) {% w( q' n2 s/ C6 A# c/ l7 v0 X
  102.     if (!empty($where)) {1 ^8 c7 q- \' e/ X" y
  103.       $data = $this->database->$table->find($where)->count();
    ) C6 f+ ~/ S- r2 T; ^
  104.     } else {
    ' s* P9 V( Q0 \
  105.       $data = $this->database->$table->find()->count();3 \0 d% `" X5 A3 Y5 w
  106.     }/ n6 ^5 h" Y: l- `0 ]" m3 v
  107.     return $data;
    $ t6 B8 S1 M- |7 H
  108.   }
    . z  s1 Z: t6 S
  109.   /**, a( P" h7 ^- a+ {$ o
  110.    * 直接执行mongo命令
    2 C. ]5 f# N0 ^% n: q! |
  111.    * @param $sql
    , |3 e- \6 {  }
  112.    * @return array
    9 e6 p- ]0 q* p7 L% {. Y/ c
  113.    */
    $ G* T  p) o2 v) q
  114.   public function toExcute($sql) {
    0 m( [+ W* v. B5 k: w
  115.     $result = $this->database->execute($sql);0 G* U) U( P& M5 d
  116.     return $result;0 Q  m3 P# N$ O) h
  117.   }
    3 `. N; q9 U  I1 w; m2 W# S
  118.   /**
    $ [8 A' ~2 E# Q  M0 _
  119.    * 分组统计个数
    ' @3 N0 k+ E) Q3 ]. |% G
  120.    * @param $table
    ; B9 x9 {6 f8 Y0 u  r7 D
  121.    * @param $where9 A8 B+ k1 |" y" R$ m& Y" H; r
  122.    * @param $field
    0 ]6 A) x# x! b5 T: B0 i
  123.    */
    & ?( @  K$ s4 m' ^6 b7 F* x1 M
  124.   public function groupCount($table, $where, $field) {& S7 Z) o+ g: `' A( z: u8 |
  125.     $cond = array(* \5 e4 \7 h" M" d" u$ U5 |+ O* q
  126.       array(* d3 s/ K4 V& W
  127.         '$match' => $where,
    6 r: \# z5 ^* u( u$ D% D  C
  128.       ),
    8 T' x) g+ W0 L. {# x' x( W
  129.       array(- y8 L$ _9 Z/ Y9 |& [) v( Q, F: E
  130.         '$group' => array(# t4 N  m4 q1 [( D; R
  131.           '_id' => '8 C* m/ B% o8 [1 Y( z
  132. * q# o( ?7 t0 ^, j( l
  133. . $field,: L* w+ i( h! A# ?- n
  134.           'count' => array('$sum' => 1),
    * l2 L. t/ {. @0 h
  135.         ),' z+ }! p; w+ r. L" J) P' d1 _
  136.       ),
    / d8 L+ v( T+ ~
  137.       array(% O9 o7 L# Q7 v3 ?$ I7 E* v
  138.         '$sort' => array("count" => -1),- l4 l+ r; u0 H/ _/ N
  139.       ),+ j6 n& u2 [7 x: k" T+ ~  d
  140.     );0 ?4 t: m/ u  r' T& R
  141.     $this->database->$table->aggregate($cond);0 `$ B" U5 q: _* f/ I* X' w# H3 ]
  142.   }
    4 {  _% `- L& \( ?# R5 ]3 H8 ]# r, w
  143.   /**
    ' R$ D7 ~$ c' w1 _: x
  144.    * 删除数据  S. ^5 q2 }/ F
  145.    * @param $table
    # \7 h/ y5 H7 B( J
  146.    * @param $where7 d/ k  s* e4 r6 u5 @2 I
  147.    * @return array|bool; _4 o. ?5 T$ ^6 B8 Z) C
  148.    */
    0 h5 k. O' d; b
  149.   public function toDelete($table, $where) {
    4 r( N) ?9 O7 ^$ t0 V
  150.     $re = $this->database->$table->remove($where);, u, X; u- u2 x' u$ z' F1 ^. W
  151.     return $re;6 q' C& g; U3 t; ~3 U: e% s3 e2 ?
  152.   }. Q0 g7 w" F. [) H" _! d. b; [
  153.   /**
    . ?0 q5 q: E% R! j* h! Q
  154.    * 插入数据
    ( H. t% L% C: W7 }8 ~3 ^2 l& U
  155.    * @param $table4 P. ]/ u$ A2 t8 ^( A
  156.    * @param $data
    1 p7 H* U5 F8 q7 K1 {4 j
  157.    * @return array|bool( u# a. _  ?+ k5 \/ P% D
  158.    */% e5 e- j+ j: S
  159.   public function toInsert($table, $data) {5 b( c9 z+ |2 @0 O
  160.     $re = $this->database->$table->insert($data);* u, A  Z9 R9 R4 b, a9 ^5 Z# B
  161.     return $re;
    5 e! F; [3 \9 d$ H' r" v2 g
  162.   }
    " V1 l7 k5 m8 N; Z2 k0 [- z# O
  163.   /**( F7 V. t5 `; L& G/ k6 X
  164.    * 更新数据
    & H- e- o% t8 H9 y) s4 L
  165.    * @param $table% ^4 Y: F& z8 ^8 K6 o6 M5 A- D, B
  166.    * @param $where
    7 `1 r: V8 a; Q( f, R1 s, g5 n, t
  167.    * @param $data% e2 m0 K; @- t7 U, P
  168.    * @return bool. W/ V! i, ?9 X. G& t/ F+ b
  169.    */- V6 |: H6 D/ E6 c- l" [
  170.   public function toUpdate($table, $where, $data) {
      Z7 N" y9 M/ I1 E% L9 m  [
  171.     $re = $this->database->$table->update($where, array('$set' => $data));  ^3 i% H6 {1 d* U1 m$ \
  172.     return $re;; W- P: g/ E& u9 {9 x
  173.   }
    ) ^3 K: {* l. ~% W) ?6 I
  174.   /**  r, G, m( O( l- B2 X0 s( @
  175.    * 获取唯一数据- w9 b* g% P$ p" D5 Z$ h" q( a
  176.    * @param $table
    ; t" j9 u& \' I; x' |5 I# }
  177.    * @param $key
    % o. g! N9 I1 m
  178.    * @return array
    * I# ]% _% f0 I' g' V
  179.    */" v# ]4 q) i7 P. l9 B
  180.   public function distinctData($table, $key, $query = array()) {3 k  T9 j( X. f' j, e# f8 {8 j
  181.     if (!empty($query)) {) ^! q' E  w' m* M( F$ n, x
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    ! X/ K; f6 F; T. T( F4 o9 I5 q
  183.     } else {
    ' `$ }/ E9 K" o: k
  184.       $where = array('distinct' => $table, 'key' => $key);
    % y" a& K$ \3 J% Y4 k
  185.     }2 `8 M) `. p, c: D
  186.     $data = $this->database->command($where);# j# P: Z& Y3 c  R/ b- |* O
  187.     return $data['values'];" s8 n5 A# g; t0 B, v# {9 H5 w* E' d
  188.   }/ Q: R6 Z% J* U' X( Y' ^# A
  189. }
    , Y/ y1 n1 S, T: m3 V6 J
  190. ?>
复制代码

7 _. [. M" @+ @- c
: a; v  d& T. Z$ S" x8 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 15:37 , Processed in 0.124493 second(s), 21 queries .

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