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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

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

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

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

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

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

面向集合存储,易存储对象类型的数据。
4 y8 N2 o7 O0 v) z5 x1 o模式自由。
/ ~( J7 c- z4 t' L; c! k1 w+ j支持动态查询。
, N! U: g( ]2 b2 B- r9 e2 [3 ~支持完全索引,包含内部对象。% f8 F$ T9 g# b0 z1 ~% w0 B
支持查询。7 n# d$ J7 w, d: K" M/ [! _
支持复制和故障恢复。* I+ s6 j: t/ {& l2 M2 z, i
使用高效的二进制数据存储,包括大型对象(如视频等)。
8 T2 N* w3 h. W5 H+ R" k自动处理碎片,以支持云计算层次的扩展性
3 r1 m+ l# G% Q5 s- a0 a支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
! r1 r( u. r& b' c文件存储格式为BSON(一种JSON的扩展)! h6 t1 e8 W. g* _# H" |
可通过网络访问

所谓“面向集合”(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
    2 }+ f* n+ i* M9 ]0 B
  2. /**
    4 D: y; |: F8 w1 L) U3 x" a( L) t
  3. * PHP操作mongodb数据库操作类$ {( A8 V6 W/ `* o- R1 v6 q
  4. */8 Z5 y4 d" b4 f" w7 |: o' D
  5. class Database {/ c* ^/ c8 b+ A
  6.   protected $database  = '';( H3 M; b! N0 ~- K0 O) E
  7.   protected $mo;
    $ ~; v( g: L# u1 u( S  S
  8.   /**0 r/ @; m  S# }& N0 J6 M
  9.    * 构造方法
    - h5 b7 x) X/ V1 F; f. {# p" m
  10.    */3 B7 q% N, c9 p- T
  11.   public function __construct() {; n+ R# o# o# m' ?7 r/ f
  12.     $server = DBSERVER;
    3 L4 P  s0 s: o  e. a1 Y
  13.     $user = DBUSER;0 [. G2 e. B, Z8 `. @7 j
  14.     $password = DBPASS;  ?" f! a0 t9 f$ l
  15.     $port = DBPORT;% }  W9 P* o- a7 v: V
  16.     $database = DBNAME;
    $ T" [% w% D) I5 [
  17.     $mongo = $this->getInstance($server, $user, $password, $port);) x+ d. k" O# x. F# B1 e
  18.     $this->database = $mongo->$database;  d5 g" p* }" ~! u: ]  Q9 P
  19.   }
    - E2 n3 m* `3 k0 }7 B1 M
  20.   /**
    & a9 j3 L+ x+ i/ _6 r
  21.    * 数据库单例方法
    . `' t% _  A' Z* k0 a/ r  B* O# T* D0 u
  22.    * @param $server2 t6 O4 c$ H7 x/ ~
  23.    * @param $user
    ' P& w1 O8 z2 b$ L( n: G) m
  24.    * @param $password
    4 e9 y. F3 ?/ V5 c
  25.    * @param $port# r8 G  l, \8 G: J
  26.    * @return Mongo
    # Y: N  t! {; Y: `; \! [$ z6 V+ X
  27.    */. h0 u/ |7 T- O9 K' [% q
  28.   public function getInstance($server, $user, $password, $port) {  \7 D. Z6 Z' s# I" n5 M. r; A1 v$ g
  29.     if (isset($this->mo)) {6 y3 ^8 h# Z( b6 L
  30.       return $this->mo;
    3 y3 r' C6 ^( I; t5 n. w
  31.     } else {
      k# b; V# ?- o, n6 e
  32.       if (!empty($server)) {# f) v. q1 f9 [' \# I6 j
  33.         if (!empty($port)) {! b8 q: k8 t) ~9 Q! ^& r
  34.           if (!empty($user) && !empty($password)) {- w( Y- h7 n- A2 n2 D
  35.             $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");& Y+ b8 w( G, Y3 c: ]6 G- i& E1 o9 ?
  36.           } else {
    6 M: u9 |! @: V6 ?! v2 a* l' @- N
  37.             $this->mo = new Mongo("mongodb://{$server}:{$port}");
    8 O- [8 {5 l' E1 D: Q5 {! N1 D
  38.           }
    ' j% a' j3 Y% ~7 W: N
  39.         } else {
    1 u$ D+ R; k' r, X4 j  z6 f, P$ e
  40.           $this->mo = new Mongo("mongodb://{$server}");
    . k7 q# ^- ^1 s. ~
  41.         }* c% k9 h  [" Y. q6 E
  42.       } else {
      w4 |  ?- Q% C' S9 T3 w  \$ K- i
  43.         $this->mo = new Mongo();* `  O$ x( t: l/ @4 h: O* o/ I$ b
  44.       }7 {! P8 C# e  V! N0 @
  45.       return $this->mo;
    , q( R3 x+ J! I% k4 x4 y9 y
  46.     }! a% E# b; E1 o- z9 y
  47.   }( u! E7 n8 F& Q$ ?- q! }+ y. u/ B
  48.   /**- [* e+ L0 w% n
  49.    * 查询表中所有数据
    2 S- |/ C2 [9 ~6 G8 r6 V* W
  50.    * @param $table
    % B$ O% h; A4 T
  51.    * @param array $where
    . w9 i9 j8 `: Z6 \7 o7 i
  52.    * @param array $sort
    ! V6 `5 L# a4 ?1 Z  e
  53.    * @param string $limit# t# Y' E0 o8 ^% ]4 G( {! S$ i' X
  54.    * @param string $skip% ?% p2 K6 Y4 i( F! S7 w
  55.    * @return array|int
    4 O! o! t# z7 z5 r
  56.    */+ K: Y( P8 ?% c6 Z) w# b
  57.   public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
    2 f' V8 Y  J) h. i( S4 O
  58.     if (!empty($where)) {6 l5 K6 T" D9 p0 [) s- O
  59.       $data = $this->database->$table->find($where);, d' E( f% N; h% \( X! H0 o+ s
  60.     } else {* g  ]7 E, T+ y# C& J- j+ z7 T
  61.       $data = $this->database->$table->find();
    " z! p6 h4 t- W) m
  62.     }) a* Y, P: _" \- ~0 Q; n$ p% d4 P
  63.     if (!empty($sort)) {" ^# |  |; `  a; m
  64.       $data = $data->sort($sort);+ N4 Q5 d2 D8 J6 N* M& j/ w+ Q+ }5 C
  65.     }, W/ N9 a7 T# k/ |$ S% P7 j  \
  66.     if (!empty($limit)) {5 g( r6 [3 `, }
  67.       $data = $data->limit($limit);
    , i4 }( u/ m" P5 G7 d/ x, ]1 r: O
  68.     }
    9 E, n; ?# H8 ~! e" ?
  69.     if (!empty($skip)) {3 k; a2 N. X7 D
  70.       $data = $data->skip($skip);
    5 z( {. j1 q4 ~
  71.     }
    8 P. }. \6 j( V/ p
  72.     $newData = array();$ M6 Q) x* |/ h/ m1 O
  73.     while ($data->hasNext()) {
    - Z( U. u1 _* b* ~
  74.       $newData[] = $data->getNext();
    1 i: {6 c* B, V  k
  75.     }: w; J! c1 k7 ?" ?: X
  76.     if (count($newData) == 0) {
    1 \$ w) L7 F+ G7 M: B1 C3 m
  77.       return 0;3 i+ [: H1 t8 Z" f
  78.     }3 A  R" t( E! |& D/ E
  79.     return $newData;$ {: o. {4 E" x" R% @- V3 B
  80.   }1 P( ^% Z* t5 O4 @8 g
  81.   /**
    2 H' M! x' D/ D) @1 k4 X/ l' R
  82.    * 查询指定一条数据
    " f. b3 L; j, B' C( O
  83.    * @param $table( z; H+ E" m( L# `6 f
  84.    * @param array $where! |2 J9 M( A( M- y6 x4 K
  85.    * @return int
    / _' D4 v3 E6 C( p; M
  86.    */
    * O1 j. g' S5 \/ @% c1 }
  87.   public function getOne($table, $where = array()) {7 Q7 O# m) E! C! o  V1 Z
  88.     if (!empty($where)) {
    " v7 I' q7 o: U; Z
  89.       $data = $this->database->$table->findOne($where);
    $ K$ P" X  W, i3 v4 r' L
  90.     } else {
    8 k" d/ X4 w  d5 g
  91.       $data = $this->database->$table->findOne();- H% _) x3 I. m7 ~! k" o
  92.     }! j) h( i' s9 D, @  ^
  93.     return $data;$ e2 M2 R% o+ p$ B  z* n
  94.   }
    + ]; `% e* A2 w1 R/ J/ K+ l* F
  95.   /**" W$ m2 H; z! Y9 g5 H
  96.    * 统计个数
    ( k! u: q8 A! k" q8 b4 z3 o
  97.    * @param $table( Q# q! W! n1 j& e' @2 D+ z$ b
  98.    * @param array $where
    % N, h/ Y2 O' |: y5 v. l4 [
  99.    * @return mixed7 x4 d/ w, s# G& Z2 s/ ?9 e
  100.    */, ^9 |" i, V2 |: R( s$ |2 y7 H' S
  101.   public function getCount($table, $where = array()) {
    $ I8 F2 U% {6 [* D; Q" x
  102.     if (!empty($where)) {
    + @, Z' Y0 S7 y/ N) v0 d
  103.       $data = $this->database->$table->find($where)->count();
    % F5 }0 v! C  {! W
  104.     } else {/ b3 V7 u9 N" o$ J( B
  105.       $data = $this->database->$table->find()->count();( p/ }* Q; G! _7 i7 S" ~
  106.     }
    # P6 N! `! {8 C6 U, T  o: z
  107.     return $data;
    ; U3 ~; A; R6 I/ s6 L& ^0 o* E, N
  108.   }
    ) Y9 s* Q+ D" l2 H* f  J$ k
  109.   /**
    9 j, V( s' b6 j6 i2 r6 g3 @7 g0 Z+ O
  110.    * 直接执行mongo命令
    & A% @: m9 M& ~1 m! v! @( W
  111.    * @param $sql9 ]+ [; E; K- C" L% D9 y8 W
  112.    * @return array
    ' c  z9 y2 L  W, ]
  113.    */' M% ]6 K& l- z+ a4 S/ _
  114.   public function toExcute($sql) {
    " Q5 Y$ w( A7 h2 L. \
  115.     $result = $this->database->execute($sql);: E( i9 Q% g8 {% B8 }
  116.     return $result;
    $ m% n+ L5 u& ?7 B
  117.   }
    2 h9 u! a8 e5 a; a
  118.   /**
    " I4 s9 f8 K7 T9 J2 v4 C: _
  119.    * 分组统计个数& H( }6 _6 r* v* B+ B
  120.    * @param $table% Q& D* C" X" m( q
  121.    * @param $where
    4 B2 H8 V" j8 S. a/ |" ^( {
  122.    * @param $field! S" o8 ]1 S5 z/ D! c
  123.    */
    % B0 W1 V% E0 m9 N- l/ ~
  124.   public function groupCount($table, $where, $field) {! j& T0 |; k1 Q* q4 X8 h
  125.     $cond = array(. d9 {$ R; s: x
  126.       array(
    9 w9 X) l5 T- P% l
  127.         '$match' => $where,
    3 p0 I, h* c& h2 I" ]- ^) |0 k
  128.       ),7 F' y2 C; `9 m; t. Q$ z9 V
  129.       array(
    ! g! Q# m) i" H+ h. i) b: y
  130.         '$group' => array() `" a2 E  h+ ]& ]! L" x5 ^, M. q
  131.           '_id' => '! \4 ^: h$ W  }( H; ]
  132. 0 B- m, l4 B) B- ~0 f; h5 Y% F% z
  133. . $field,
    0 V; B6 N" B3 I0 N( B/ L; o
  134.           'count' => array('$sum' => 1),
    - D4 v' L8 R/ L9 X) F8 l% {) k
  135.         ),
    & ^% g  N- m9 r6 t
  136.       ),8 h% |9 g/ w3 D
  137.       array(0 ~8 ~4 A% H! i( t; K8 B0 ]
  138.         '$sort' => array("count" => -1),
    5 x2 X" u' x& l/ U  `4 j
  139.       ),8 V1 K) V$ c) i& K+ x
  140.     );+ m! \, `8 O5 T5 J5 Y
  141.     $this->database->$table->aggregate($cond);& g: v2 _! A- j8 A; ~* Y1 A
  142.   }% p& N( i+ V( u9 X$ P% Q9 {, z
  143.   /**  S$ |  \1 X' P& N
  144.    * 删除数据2 @6 d, V4 ]* G% L8 `, ?
  145.    * @param $table2 f3 D2 ^3 J! J! S& {4 I5 J
  146.    * @param $where: `: C0 q% @$ U4 ]( ]& I
  147.    * @return array|bool
    3 k7 {9 n$ [& t
  148.    */
    " z1 y, D- ?3 B0 v6 D9 u
  149.   public function toDelete($table, $where) {
    7 T0 I6 \! x" r& b. J
  150.     $re = $this->database->$table->remove($where);  T5 j5 J% X1 Z! _
  151.     return $re;
    / w& X( d. L' e* j" y. K& c
  152.   }  R% O  p0 J9 V
  153.   /**0 a' N5 `0 k. l
  154.    * 插入数据
    % I+ U0 @* K0 N3 ~2 e5 B' o
  155.    * @param $table' h( B/ V( R. _
  156.    * @param $data6 ?6 Q- W8 u7 Y& U* S" v
  157.    * @return array|bool* |; t- z% I( t  Q3 W9 e$ |3 a* D
  158.    */
    6 g  A# T' n2 z; O  Z$ X8 g
  159.   public function toInsert($table, $data) {
    " t+ f7 e6 E& M2 ~+ I
  160.     $re = $this->database->$table->insert($data);& P& {5 }  _3 V  p
  161.     return $re;: k# p7 S- |5 |  z4 Z* B3 x
  162.   }2 s: R  a- b/ B) h
  163.   /**) K; D8 _5 I6 t* u: |
  164.    * 更新数据$ C; C) Y" O) C. y
  165.    * @param $table% Y% b: c# M: B
  166.    * @param $where5 Q5 z0 i; G7 E6 N/ ^
  167.    * @param $data
    3 ?# H) K* |" H1 A
  168.    * @return bool
    & M7 O3 g$ n6 z8 y5 O  Y6 G
  169.    *// W" I2 c- @) U# Y+ p
  170.   public function toUpdate($table, $where, $data) {
    4 _( M& D! `( s  L; S
  171.     $re = $this->database->$table->update($where, array('$set' => $data));
    6 U0 K* B+ n6 r7 \: g0 V0 ~0 x
  172.     return $re;2 f' f. ]! v3 P% i& z
  173.   }
    " Z$ f0 P, q3 y9 U  E" J$ \
  174.   /**4 x. Q4 C5 u9 l% l; A
  175.    * 获取唯一数据
    : c# z# z$ m* J
  176.    * @param $table; `0 S' ?. Z0 k: e. Q' t
  177.    * @param $key
    2 G9 K" f+ L" Y" `6 z1 J$ X
  178.    * @return array
    - `5 z+ S5 {$ L  c0 H( ]7 Z( Y
  179.    */0 I# }# f3 e1 L4 S4 ~3 W
  180.   public function distinctData($table, $key, $query = array()) {
    + i- w  ~& \& H" K
  181.     if (!empty($query)) {; h$ |" h$ s" [$ \5 Z
  182.       $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
    ! z) _3 p" j4 Y. g
  183.     } else {
    " M% z3 K9 h( \
  184.       $where = array('distinct' => $table, 'key' => $key);3 F, |' ~* w& [9 L
  185.     }+ X' n# K  U: r
  186.     $data = $this->database->command($where);7 Y+ Q& F- `; z/ ?, }0 a! R
  187.     return $data['values'];
    " o8 V% y+ ^+ l  C; ]2 {
  188.   }
    0 N! w. }; t# I
  189. }, e2 s6 L3 z! \8 X2 J+ x2 |
  190. ?>
复制代码
8 I' @" _" p- g" F! K! ^& D+ _
* s1 x% X! o; v. K" z. i& b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 12:54 , Processed in 0.057669 second(s), 22 queries .

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