本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
1 t! \7 d7 U( Z9 R6 P8 G9 j模式自由。" p1 w# E0 C- ?6 l+ l( Q4 y
支持动态查询。6 o- z% J, d7 ^$ T$ W5 T' a
支持完全索引,包含内部对象。5 z4 s' K5 @5 K) u5 S* r
支持查询。, H$ P( o! @2 R5 H6 n% `
支持复制和故障恢复。
0 ]% x N0 F5 ~4 U! d" x使用高效的二进制数据存储,包括大型对象(如视频等)。/ D. ? S/ O5 D6 o3 y5 k
自动处理碎片,以支持云计算层次的扩展性 L& X! ^' I K* {: V) B& K
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
; b% r' l" S, Q) e! F7 D1 w- J文件存储格式为BSON(一种JSON的扩展)
$ K- ?; \+ C7 ?9 N! W1 @' K可通过网络访问 所谓“面向集合”(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数据库的数据库操作类源码如下,仅供参考。 - <?php
* z" R ?6 U$ e/ S) f r - /**
% C1 s" Z+ f* L' u" h9 `1 i) j - * PHP操作mongodb数据库操作类
5 O4 r( `: ~6 V+ M* ]4 H ]# E7 R - */
3 ~0 u+ d" Y" i1 R+ `8 r - class Database {
4 Z9 ?% ^& C& q6 F/ i& p - protected $database = '';
- F1 @/ O5 J( I) D8 j6 u' s - protected $mo;
; R6 R/ N/ X1 K6 A" u, q- A - /**
1 [5 k; ^, a- @: d3 G* `% U8 F - * 构造方法8 s* O( j7 b0 O8 U/ }- ~$ ]5 \) M
- */5 l. a; \- e& [+ N! ?- V/ s4 P
- public function __construct() {
% x5 E- p9 U. ]; F - $server = DBSERVER;
" u6 Y' }- V6 t1 {- z0 x! @0 e: Q - $user = DBUSER;5 Z7 ]8 q$ Z% h/ p; L- E: W
- $password = DBPASS;: B: V4 T! V/ o& e( I- m9 P7 {
- $port = DBPORT;' q- [+ d8 F# o: w) t, P7 k
- $database = DBNAME;, m4 P% z/ W6 g2 h! Y m. D" U
- $mongo = $this->getInstance($server, $user, $password, $port);0 K1 {1 V, J1 Q
- $this->database = $mongo->$database;
1 J9 q$ I3 I* D( B( P6 B# r - }
9 v. {& t/ ?$ c0 k2 i( m - /**# ^( m. C* I7 v( n" {% q
- * 数据库单例方法' I+ ?. a3 Z1 r3 d, w$ a, B
- * @param $server
* M n* m6 T, o- m- Z; S - * @param $user$ d8 L. b! `* ^6 j5 d
- * @param $password/ i7 N2 ?; y' J0 K) U, u; b
- * @param $port5 n! S- x& U# N. A3 P
- * @return Mongo
4 y4 o& ^- `$ m8 r6 @ - */
5 R# ]/ D5 k( S D7 [. C- j' ]$ ? - public function getInstance($server, $user, $password, $port) {
/ g/ `: @1 j6 ]/ Z& a( W* L - if (isset($this->mo)) {5 P+ q/ _% \. O) y6 H5 W* N# }
- return $this->mo;
& H9 f: u% Y t- D# K& d - } else {. }# z! Z7 g5 ]% @5 B8 b7 x
- if (!empty($server)) {
: r, R; }! O$ ~) n" y9 o; U8 t, Z - if (!empty($port)) {0 D+ [' s; R) n" F
- if (!empty($user) && !empty($password)) {
5 b+ o& a* e0 ^! l! @ - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
4 c S& K' P# e) q+ U+ }' `' ^ - } else {
) w( w$ f# V, z. C+ _5 O( K - $this->mo = new Mongo("mongodb://{$server}:{$port}");) f9 M6 x& O# z. z8 |$ W* w P
- }+ D/ e x7 C4 d, P2 C- R$ V# V
- } else {& q3 b: P& r: r2 W3 R& _( \
- $this->mo = new Mongo("mongodb://{$server}");1 n) O! p! a3 y% c$ e( i: \; O: J$ g9 p
- }
0 Q2 I! C/ `+ u3 S1 c( R: i - } else {
1 F9 H- e4 c9 r5 L# c1 u } - $this->mo = new Mongo();2 ]/ K# c7 E: t, \
- }
$ u% i- H6 T1 _2 z - return $this->mo;
Z1 M- x$ f; J2 w0 M4 B - }
" W: Z9 G9 Q4 _( ?, N/ U! C; N - }: i/ ^2 I' _& g" x: U5 D
- /**
1 S5 M' g1 B- r+ S/ ?9 r# a, _ - * 查询表中所有数据
) P. B. A: J) Q5 ^0 V, w - * @param $table* [$ [& B& S) Y4 o' m3 w# `' ?# s
- * @param array $where* J* Y) f' l, s# a3 {) ^
- * @param array $sort; F" B1 b7 T$ X8 h/ d9 ?
- * @param string $limit
8 B: o' [* u7 Q; j3 [7 \ - * @param string $skip
0 H4 {$ l) H& A - * @return array|int* P* O) j* a) v8 c6 R/ y" @. X+ [
- */
3 O+ t% ?, [8 B6 h/ n% e1 ? - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
5 U8 ^( h: O4 H& l8 J' K' W - if (!empty($where)) {
4 t: w+ l) f; Q2 j2 K; ^# L - $data = $this->database->$table->find($where);% D6 g# N1 s [5 j; _. e7 t5 \
- } else {
0 z$ v5 g& r2 B$ Q4 M1 B1 p2 y - $data = $this->database->$table->find();% z" Y+ F; P: {, j! Q p) d
- }: a# H7 p9 v+ ^$ }; @% H3 F
- if (!empty($sort)) {
9 E' B+ }2 M; D/ l s' B - $data = $data->sort($sort);% |! @8 @4 k1 A
- } ~+ {* [. e+ m. A$ m
- if (!empty($limit)) {
! o; B2 `! f8 H/ h - $data = $data->limit($limit);
1 i8 Q! |3 ^6 F* v9 V - }1 y: v$ ~9 l. Q ^' t0 u# g
- if (!empty($skip)) {
0 X( R' K3 R: t8 w5 T6 J - $data = $data->skip($skip);
% H9 ~6 e' `# B8 i- w - }
6 a: L+ V! Q) E) C& r9 e; P - $newData = array();
- k2 Y) Z+ N4 l) `2 X - while ($data->hasNext()) {
. S/ Z7 T j6 l6 j* o, b; H - $newData[] = $data->getNext();6 @3 I# X5 ?3 t0 n% o( S
- }6 Z; I0 c# U: ~) q9 a3 e# H
- if (count($newData) == 0) {
+ }; ]8 y/ F/ U% f% l# m6 v6 a' c, Z - return 0; E. w' G1 g: e0 {$ T
- }
# r0 ]0 ^0 X/ O* B" d4 T2 u - return $newData;$ {/ W6 n: i7 ~* S; W6 f
- }* c+ d# w Y" n9 \
- /**
4 U" {2 z- |0 n6 _ [ - * 查询指定一条数据
- r. {7 y7 D) e* t4 K4 p - * @param $table, m& G8 w; b. ^9 O; T6 H/ y, }
- * @param array $where; `, I" g& r& B+ T% ?& X- E8 x2 r
- * @return int
8 d* Y$ W: W7 R- r& l } - */
+ T) h; o2 z1 ? e5 B2 c! F - public function getOne($table, $where = array()) {, D, E, ]8 y6 {6 S$ ~% C6 E4 k
- if (!empty($where)) {
. X: a$ ]! j4 U - $data = $this->database->$table->findOne($where);6 t- v9 w5 E/ j: N* {- V4 ^# P! R& b
- } else {8 Q+ A. G" ^3 {& J, [& B3 O6 k
- $data = $this->database->$table->findOne();
$ Y) L0 T- b5 W - }' m# T4 w3 _2 I4 {2 }( N) B
- return $data;8 b6 S. r; t/ c/ `8 v! f/ P, H' i
- }3 d0 l; m' |4 p
- /**; `: h m0 F" p9 F1 m' l
- * 统计个数6 R2 e- p0 W6 @+ t. C
- * @param $table: d* P& k, e. m# B
- * @param array $where
4 A- k3 X1 s5 i+ l* `- | - * @return mixed! {7 p- V8 g4 p
- */! H' C( v$ z+ J" m2 N% B9 ]$ n
- public function getCount($table, $where = array()) {4 a, ^0 c$ H4 w; @7 P( o1 V2 L& C
- if (!empty($where)) {
4 }8 T0 k( M* d6 Y - $data = $this->database->$table->find($where)->count();5 a0 F# D5 I8 k1 x6 r
- } else {) X( c( M7 V/ m5 O1 t8 k
- $data = $this->database->$table->find()->count();9 Q- z0 C( T6 R. M% `
- }0 k) K% e& c/ |. U5 T5 ?* x0 S, [! a
- return $data;/ h: W/ N' |0 L l: u ~
- }6 z0 |% l# q9 a( M0 X
- /**
, b% T0 [5 I6 X. z5 {1 I3 M - * 直接执行mongo命令" ]! a9 k9 p1 n& _5 T! D. ~7 ]
- * @param $sql: p$ f$ r. o1 h6 A# J/ d
- * @return array9 j+ b7 Y" m3 ~1 z4 D" `
- */" H" U2 c; C5 Y7 _; R$ b
- public function toExcute($sql) {8 N, R" f u! S8 X( [
- $result = $this->database->execute($sql);
3 M7 r8 u2 W: k( l& @, E+ S - return $result;
' t) I; z# o% e* W0 f/ V - }5 Z. u3 K* x* ?6 N" D6 E( m) c
- /**. U; N: S- B. B7 S
- * 分组统计个数
# z6 N( E* L# e! {0 v& o: @2 a - * @param $table
4 O2 ~1 A. o! z% k4 g/ }. ~! u - * @param $where
- }" p7 ^4 S( h2 V& X+ e% Q - * @param $field! w8 [6 X( _9 }: P/ ?$ |$ S) i
- */! Q2 i ^0 Y+ J; p
- public function groupCount($table, $where, $field) {2 z; h. N* k J7 o# |
- $cond = array(
" n8 P& q3 g' B& a - array(/ v, T8 }3 E. H8 ~6 m0 v$ `" U/ V
- '$match' => $where,
! [2 N* {7 v! f: [' g - ),
) D. s2 F* e# x- ~ - array(
% x0 M; C7 \( y5 [ - '$group' => array(7 ^" N. p5 e9 g$ i8 ?
- '_id' => '
+ }/ P* |' }# s, ]* f7 i
( i2 h& y& B- R- y/ A+ p- . $field,
6 f7 o5 a: `3 D5 h, ] - 'count' => array('$sum' => 1),/ b" P8 A0 v1 Y; D# z! L
- ),
9 m9 a. e+ S0 r, R9 D( w - )," ~6 z# C9 ?" A( J& v1 {0 }6 C
- array(6 r1 v3 O: j! `
- '$sort' => array("count" => -1),
' b+ e% f6 q& |. V# O - ), b( \- a4 x$ h6 L# q
- );2 |/ }$ }, k# j; e2 n" ^; M b
- $this->database->$table->aggregate($cond);3 X% `# Y$ ~' @) U
- }: d; Q( Z9 S I* H! Y
- /**
, o, H" @! c8 W4 v - * 删除数据" y% m6 k+ E( V4 i# S; s
- * @param $table
. r3 z+ s; L% q9 n1 o1 T1 T - * @param $where) ~2 w1 _3 @# q, Y) e ~" C% u
- * @return array|bool% |$ \; l$ P: N' L
- *// z$ ]/ V+ T4 V6 z
- public function toDelete($table, $where) {8 |. k% Q- L8 ]
- $re = $this->database->$table->remove($where);& d) M, ]2 X _- ]5 r) V# F3 _
- return $re;
! t4 {* b3 z! q# o - }3 F7 \" j- r0 U; t
- /**: _* y8 t5 G1 U: v2 N, P
- * 插入数据( Z8 A6 U: m( {7 W
- * @param $table
% O0 e0 |' C4 D( A - * @param $data+ J( P$ A: L" Y3 R' {
- * @return array|bool* \) G$ y- _; v* D3 R
- */
# g- o7 k. [1 K7 i- _' q - public function toInsert($table, $data) {/ m# @% D+ K, t% s% M3 O
- $re = $this->database->$table->insert($data);
# L! w1 i6 L' d6 w9 ~/ d" _ - return $re;
' x# d7 f, a/ H# ^ - }! B$ Z; a( d/ O' L$ G/ C
- /**
# T0 K, ?: Y! b, ^! I1 m - * 更新数据
( R9 ^* s' u9 I7 g2 H - * @param $table6 H- O' Z3 A6 }& ~% s v
- * @param $where
, o ^7 q3 E8 z - * @param $data6 a% P$ f6 ^( d2 m
- * @return bool
) r+ J, `( c, K - */( m, B; ~$ O2 o7 i4 ?4 B" g+ \
- public function toUpdate($table, $where, $data) {; `7 _# N" K6 j0 u }' q* e
- $re = $this->database->$table->update($where, array('$set' => $data));
4 m6 v+ S( Y: ^, x' {. M& x& n4 v O - return $re;* E4 n, ?/ Z1 A" v: k
- }+ ?) c* x# @ f- Y3 l
- /**
( ]/ l& M8 y8 j8 l, O. l - * 获取唯一数据
% Z' ?9 p. ^8 }! c6 j9 p4 ? - * @param $table/ `! |1 u; X/ v6 B8 y
- * @param $key
7 g6 b8 W! T2 j& g% V - * @return array
0 Z* [/ P% t7 k# [% I. N0 _ - */
$ ^/ y/ w( f/ ~/ D1 D - public function distinctData($table, $key, $query = array()) {
) K u5 O+ i6 K7 ?8 g& ` - if (!empty($query)) {3 u" e0 m0 O/ c$ S
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
* ?, D7 S6 ~4 `# i. M+ O% P - } else {2 X3 u. [, G2 b% G0 g
- $where = array('distinct' => $table, 'key' => $key);. m, J% ] G S. y4 [8 F
- }5 k$ ~9 T+ w% Q W. B4 P
- $data = $this->database->command($where);
7 a$ x0 ?& i% u+ r. @* J/ d - return $data['values'];2 ^' L) [" W0 B- ]& m% @, g
- }- E7 p5 V! H" B
- }% a% _: P' p2 a. z
- ?>
复制代码
+ O9 @4 g* | ~0 }" Z
4 i! [: S. e T7 u* ? |