本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
7 p; L6 }1 f& O; {. y模式自由。
% G0 \) R( m5 Z) O' F( \/ b支持动态查询。
* Z7 S; s( ?% b$ G支持完全索引,包含内部对象。8 D$ ^4 g; _+ B" i5 S# Z3 c( b
支持查询。 o+ m) @7 H( a8 q3 d# p' }# w, R
支持复制和故障恢复。
% J% R8 i+ g# |( p; w& B: E8 f使用高效的二进制数据存储,包括大型对象(如视频等)。3 J t5 J9 a- @$ E
自动处理碎片,以支持云计算层次的扩展性1 {: _2 o& ~' ~0 S# J9 j- V
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。5 `# ?2 P5 p; E2 R) I" y2 I
文件存储格式为BSON(一种JSON的扩展)
* v/ Y, S- r, F- K: z可通过网络访问 所谓“面向集合”(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
5 z( s$ S O( [( I( d" h; P' {& H. c - /**
! N$ P: J& M3 x - * PHP操作mongodb数据库操作类1 M7 q; `+ R3 R( e9 E$ q
- */* V9 n- q' e9 Y- T1 z; h5 \
- class Database {) b7 C9 X* p6 B# \
- protected $database = '';
( A N4 V9 M7 p; L - protected $mo;4 ?# S9 ?1 U' }/ l% g
- /**; X" w+ K0 Z8 \( e3 W
- * 构造方法# l4 `' p( E. ]- O, Q/ y7 C0 b8 U
- */ H3 ]/ s& P# L, N$ K5 T
- public function __construct() {5 x* z% L$ X, W* O, ]
- $server = DBSERVER;0 P; i# }: [* C
- $user = DBUSER;# Y ?: q' [2 }. U. n
- $password = DBPASS;" i$ F8 s( ]! {! n: G# V
- $port = DBPORT;
4 _/ G1 I' y y* e - $database = DBNAME;$ g0 M2 `- e; ^ m" l" G/ x$ C# i
- $mongo = $this->getInstance($server, $user, $password, $port); H- x+ h, C6 w
- $this->database = $mongo->$database;
P: O0 |: F' V: d) }% z8 w - }$ L& z+ Z2 m: V: k
- /**1 y' R0 i& O1 @* C% A+ `, y8 o9 a
- * 数据库单例方法$ u8 t5 b+ m% p& n. Z# h7 W0 [% t- p
- * @param $server
8 x& _0 H7 \1 Z+ }1 t - * @param $user
4 W7 c9 A8 u7 s: a) \ - * @param $password1 r% S- ?1 R5 W( e( Z
- * @param $port
; o. b; o4 g% s" x N1 c - * @return Mongo
- d O. m8 P* B! g# M1 D: u - */" I) j) B0 w9 _
- public function getInstance($server, $user, $password, $port) {3 {: Y" `' @( T g7 O: P6 x* w6 x
- if (isset($this->mo)) {
3 N" y; G8 E0 @ - return $this->mo;" i; J4 `2 S4 R3 N6 k C9 u
- } else {* U4 n$ ^& i, e# n
- if (!empty($server)) {
1 G/ E) E/ L$ t- ~ - if (!empty($port)) {, C& y2 D0 }! S9 a7 l
- if (!empty($user) && !empty($password)) {. ?3 X0 ^( ~. Q/ c% M: F
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
6 V) Z8 {$ x( `; x( V- ? - } else {4 Q6 D. w& S) c; s( s
- $this->mo = new Mongo("mongodb://{$server}:{$port}");0 p, Y% J2 F2 k5 S, y
- }; k- |7 s7 _2 t# D- U$ a) F& V4 n
- } else {
3 v9 K2 ?* k* b3 C - $this->mo = new Mongo("mongodb://{$server}");# E' J. [0 V, q! Y4 {) C
- }
" R! \6 Z; u, b: P4 p# {, l4 M. B - } else {
8 d q! }: j* j, A0 O5 \5 I - $this->mo = new Mongo();& l2 `7 b1 m0 R% q0 w3 i4 f$ i
- }
: A0 P* ^9 O) s: c - return $this->mo;. r" F* R1 E! E1 T5 R" q) L0 o
- }
) b% n; @$ [1 Z3 t/ g6 U5 R7 ] - }
# d* O, [, l6 x2 J - /**
3 d$ I& P. F7 e3 @ - * 查询表中所有数据
4 a* }3 e& w ]+ y T3 p8 J - * @param $table
* f+ [! o/ H: g0 C - * @param array $where
" f/ B2 F+ H% E* f+ q" J$ ~ - * @param array $sort: H3 b: V' J: i& e" W( ]1 F
- * @param string $limit
1 a! B4 e3 f. ]; v c. { - * @param string $skip4 g8 q( V9 P8 P6 L: o- u1 ^
- * @return array|int, u" G: q1 D: d# o, M
- */+ @# h* C) b- p/ M) K. \
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
; h5 \/ \/ ^3 f - if (!empty($where)) {
0 q4 X) I) ?- o& J- t - $data = $this->database->$table->find($where);
' \% t7 Y/ L6 W& O4 R$ v - } else {
6 |" k& x; ?0 ? - $data = $this->database->$table->find();. _( u! C. k" v( Y5 m
- }1 S2 Q9 O: n$ {' U
- if (!empty($sort)) {
6 G" ~* W0 H. d# d, `, Q1 e - $data = $data->sort($sort);
. k7 @$ I1 b. x# u - } U) M7 \0 h% Q d3 }) `$ `
- if (!empty($limit)) {
" l9 O8 k& z! o - $data = $data->limit($limit);
9 P; R* Z6 O! ]7 X6 L5 C9 G - }0 V, j: ~- `9 D% F, `
- if (!empty($skip)) {
) {+ L; q$ \/ v; F1 p; L% E2 M7 k - $data = $data->skip($skip);
) c8 J" Q- f1 W6 Z( l; p( f* O - }8 R+ W4 z+ e+ P# @: ]/ l" s# d
- $newData = array();. ?- r# u+ C. h/ k+ X
- while ($data->hasNext()) {1 g2 f; E% B' W- d- B& ?: O
- $newData[] = $data->getNext();
6 ~" R$ n+ i! m, U' \7 m - }
! `9 c @2 ]2 f( V, n6 t+ W9 I6 j - if (count($newData) == 0) {
; C# ?# B/ N& l* V( x2 G5 f2 d& ~ r" b( U - return 0;
- k4 r `6 d0 r l- g0 m - }
4 u4 y! y0 j9 R - return $newData;# f) H' E- s1 k- e& d/ F
- }% j6 [6 M) L/ Z* m \, c
- /**
. ]$ B- A* } |# R5 K& ?: { - * 查询指定一条数据
* _2 D6 I6 D4 v- J, s& ]/ ` - * @param $table b% m; l+ r1 J2 \8 G
- * @param array $where# Q; q1 S I. ^' f3 b
- * @return int
4 v/ Q* I" q& D# X. d9 z6 x - */4 p! O3 U+ S/ }: y& k6 i% T
- public function getOne($table, $where = array()) {
* n( s( E- h0 d - if (!empty($where)) {+ F; Y$ q! _/ G: G
- $data = $this->database->$table->findOne($where);
7 X% Q: F$ w5 I8 M6 i. R - } else {
! q4 _% G0 a b! G' Z5 q6 F - $data = $this->database->$table->findOne();- S. @/ @* l- @, y& E
- }/ h7 F: \; y* g5 t
- return $data;
0 ^0 g6 X% w8 I9 Y+ \1 U* j# M - }
* x0 S: k. z" r3 q) s' r7 | - /**
8 f t) O7 B& M& S: q6 I* ]1 q0 u - * 统计个数1 {( Q# h3 I2 h
- * @param $table( w; R, G3 n) S7 {
- * @param array $where& B; g2 `( d X8 B8 m
- * @return mixed
) r( I0 W1 \3 o, R - */
, X0 F, \8 d% o" `0 `. w t- {, i) U" V - public function getCount($table, $where = array()) {
, p# L! n. p4 \7 k4 ?; b- n0 W - if (!empty($where)) {1 e, c, x/ n: D' M! l3 M6 b+ U; p
- $data = $this->database->$table->find($where)->count(); H8 M' J, v H0 P- P$ P
- } else {$ @% T" p; |6 c$ ^* n& K6 c) [
- $data = $this->database->$table->find()->count();+ O ~0 \+ t+ I( E8 T
- }
# J7 `) p2 A+ O/ Y7 t - return $data;& S; ]( i C( u4 L9 Y
- }+ Y1 c% n6 O7 C* E
- /**' g# D. s, K+ z& `7 r
- * 直接执行mongo命令' T: x- L3 J5 B: T) y4 ^4 k
- * @param $sql9 U+ ]1 ^$ h9 R' T) H+ u' G5 C
- * @return array
j4 o d0 A/ S2 h* l0 a. S2 S2 R - */
8 i8 Q3 x+ S! `. q - public function toExcute($sql) {
; n* L! s) t) t& C+ S% J - $result = $this->database->execute($sql);
q) W! h# M# e; m$ H* o2 @ - return $result;
' c( \; S$ D5 m, G4 w - }/ ?! Z) E1 t, |0 ~
- /**
8 i, t. L$ Q9 O0 A - * 分组统计个数
+ D k0 ]& v7 _( G, R" \ - * @param $table" z% Y; c) l' u& ?+ u! D
- * @param $where$ i- o" q/ b( T) [9 I
- * @param $field7 d4 r* m& s8 T: s- e! h
- */+ I [* v# e2 s) U/ Z4 {
- public function groupCount($table, $where, $field) {1 Q6 W1 k7 C1 t7 ` D5 Q
- $cond = array(
) B; g3 G# Q( Z0 }5 ` - array(
+ V1 Z% p% j6 d6 N - '$match' => $where,: C8 V9 H- Z; e% X1 \. ^ F; i
- ),
+ e9 N- C" P8 F4 ^9 ^: y - array(
/ k; z5 p$ f9 ]* ]9 M3 v - '$group' => array(
; Z8 Y! \ g+ u2 ^4 N0 N - '_id' => '5 g4 L6 W& I2 T- r) z
- " U* V9 f+ n: r3 G( v, K g. q
- . $field,
* H6 e+ S1 |' | - 'count' => array('$sum' => 1),: M6 H# F$ M6 ^ I x- g6 j4 ~
- ),) |* ~/ c3 {, s( o! D2 e
- ),
* K% J* G- n6 @5 S8 |4 h1 E - array(1 p. u3 I) D% n( }, W3 Y2 c0 \
- '$sort' => array("count" => -1),, g" [ [3 h; m( y% i4 t! E
- ),! M- I& ~( u0 ? z, Q u
- );' }" l' P( s0 M3 I+ y M/ Q1 z
- $this->database->$table->aggregate($cond);+ b8 i+ x6 s, D5 _% S
- } @4 Z4 Y" I8 r8 W* g5 O& L1 V7 M. e
- /**/ [6 _# O: x: F
- * 删除数据
$ L6 D2 Q. P! d; | - * @param $table& ~$ O, Z/ M/ t/ p
- * @param $where
; H. m8 g& G/ ]0 d2 E+ W, ~ - * @return array|bool3 ?* }# S# }4 q( T& V
- */
8 g% e3 E* N7 Z3 ~0 b8 G! E - public function toDelete($table, $where) {
' f; L0 i! q6 k: R# u9 r - $re = $this->database->$table->remove($where);. F! n0 ^4 I! u! ~' o' | D
- return $re;
% Q6 |" @9 k) t- U2 b - }
! m) Q4 d* m) F% i - /**
V1 `# ~2 x( W - * 插入数据/ e2 o5 z8 k% H! s( B! G
- * @param $table# G! q! U: \5 X( I8 g5 `9 L3 Q
- * @param $data7 O. M7 Y7 k7 F/ m& |
- * @return array|bool
4 d: K% R9 T. ~' ]% \$ r. s - */
: ?. S4 J, f/ { H - public function toInsert($table, $data) {
- V+ Z. C ^4 {6 I: {% Y+ q - $re = $this->database->$table->insert($data);. K R. z& y: d: o8 V& h9 j
- return $re;5 ]3 a) Y- L1 ~5 h0 Y" b: K6 B
- }
+ \9 b7 j# G( X+ n3 |5 E9 A) b) }& H4 ] - /**
% b+ M% ?1 G- |: S0 D9 H - * 更新数据6 S7 N; C9 g* |4 f$ [- F% }( e
- * @param $table9 f" |% B; t0 O
- * @param $where
% C( S" y7 O7 u6 i - * @param $data
0 {) E$ X* l7 K# B K& `2 i - * @return bool
& u+ S; d/ Z- @! c - */
: i) m6 O7 H' |8 B$ i - public function toUpdate($table, $where, $data) {
$ `4 x1 W6 X, h* L5 b) J - $re = $this->database->$table->update($where, array('$set' => $data));
! }/ n. y: k: [& y - return $re;; E( [7 `, U. r) D* `" T! Y
- }
: t: @$ R/ ^7 P8 V- N* C - /**
1 B" ^1 ^ |( G7 t - * 获取唯一数据; z9 f7 h$ _6 p) P& o6 Z, \
- * @param $table
0 x' N4 O3 M, ]9 J( k* f8 j - * @param $key& \$ h( q8 ^6 n
- * @return array
5 f- k2 q P1 E. ]- K! v - */% a% x1 R+ G8 X1 h2 }
- public function distinctData($table, $key, $query = array()) { H4 y' Y% V. [9 C& x
- if (!empty($query)) {- v; n, z/ U+ X. \( `# T1 q4 [
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
0 ?. @, _3 n P+ e1 _$ B - } else {% ~" V+ T, W5 \1 o& y% o. @1 H- H8 d
- $where = array('distinct' => $table, 'key' => $key);
& U) G' W+ `7 D9 a6 x' b- [- W - }' ?0 @ I! f* a+ h3 Y3 Y
- $data = $this->database->command($where);- g2 {5 c3 l+ A) @4 O6 P
- return $data['values'];
, S( K+ T- w1 Y: s" x* D - }
' ?! n0 J* i' N& f2 X) O5 u - }
* O2 G8 @0 T& L7 t- s - ?>
复制代码 + f& f# M; j* M% L6 s
G8 F: ^. S. |& Y6 d |