本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。$ _0 u9 p& }) r/ D$ y0 V+ A4 t8 p% c |
模式自由。
* v' ?% T8 i7 n; ~: w3 `/ v支持动态查询。, U/ s8 I; d* R( W
支持完全索引,包含内部对象。
1 R8 U, G# g4 ]& d& _支持查询。
; g9 [% L; i+ O H7 e' L# S# N5 J支持复制和故障恢复。
) ~9 R9 ^7 r8 X2 d' Q& ]8 w使用高效的二进制数据存储,包括大型对象(如视频等)。) K& I- E; r# y; F
自动处理碎片,以支持云计算层次的扩展性
/ n. a" f8 h/ m' Z支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
" B3 R1 _5 g# A2 B. P) Z/ [文件存储格式为BSON(一种JSON的扩展)
* |- W( t! P% n( n: l可通过网络访问 所谓“面向集合”(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数据库的数据库操作类源码如下,仅供参考。 - <?php6 q! c+ }8 P0 [
- /**
; |9 [) f) I& W' R3 l - * PHP操作mongodb数据库操作类
/ q( [- ^4 f1 ^ - */
3 D2 K! L, q: }( \ - class Database {' B! ~$ x2 ?* P& s4 `9 j" {/ C
- protected $database = '';
, {+ @/ Q5 z w. m. s - protected $mo;, K6 {* x) g$ }6 J
- /**
, l6 {% @2 ]+ X% z$ _' v; |- A- c - * 构造方法2 K# f, k* @; e; p1 u( b
- */
[5 |' j6 v# ^+ ~) L - public function __construct() {
, q5 M: z0 s- K5 {/ j$ Q - $server = DBSERVER;, k( w9 Y: T9 x8 Q4 K# z9 a
- $user = DBUSER;
- j6 k* c1 R) {6 R' t8 n: i! Q' j! ? - $password = DBPASS;
( Q' n/ j5 t0 A9 ]6 n - $port = DBPORT;
1 B& A" E: Z4 X - $database = DBNAME;
d7 V: t( x/ a - $mongo = $this->getInstance($server, $user, $password, $port);
' p# h, f% b# C - $this->database = $mongo->$database;
& H* o/ n) a/ s/ @ - }/ t1 m$ n; `0 Z& q8 f9 Y. }, n& @9 V
- /**
0 _+ Z% o5 f) d# F - * 数据库单例方法
4 E' ~, S6 H+ q$ }/ `: d6 ^+ t8 Y; \ - * @param $server5 R5 W0 N3 f, T+ m/ t
- * @param $user
; S6 m$ j) Q. K& l - * @param $password$ m( g7 D" D) b
- * @param $port
" ~& _3 t4 d& |% M$ Y - * @return Mongo$ ?( d" V$ V9 ?4 o( J5 l
- */- M% |7 q1 @ n# `; @( v
- public function getInstance($server, $user, $password, $port) {' K! V/ ] {2 G: B i2 ^
- if (isset($this->mo)) {
4 e6 W- ^ u4 I - return $this->mo;
4 r0 u4 ]6 L: ^ - } else {
/ U: z6 Z& D. s& P - if (!empty($server)) {
& N6 `2 T! X3 H5 H - if (!empty($port)) {5 P) c4 |2 E+ Q; u% v" a
- if (!empty($user) && !empty($password)) {
& u9 h" t4 R4 t8 ], n% {& e - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
1 J0 ?6 X. R1 W8 M% ?# r6 x& m - } else {
3 }2 l4 j2 L; I, p - $this->mo = new Mongo("mongodb://{$server}:{$port}");
- X1 M, ~( y7 E+ Y8 c0 l9 ~ - }4 ^$ e4 ?% c# j8 c8 }$ Q
- } else {
8 M3 U8 g' z4 i8 ?$ X, w! p$ B - $this->mo = new Mongo("mongodb://{$server}");! t/ Z0 f `3 C
- }
% X4 H+ L( z# W2 Z/ _5 ^' b- Y; O - } else {+ P, i1 M, |$ [) K
- $this->mo = new Mongo();) T! ~- m3 M2 x& b
- }. N$ U- Q. \0 E0 U2 w/ M
- return $this->mo;( E% i% C, p6 u/ `+ \, _
- }$ z' t* S, M$ B, S& D; A2 S
- }
: X0 C* n3 {+ w, \! t - /**
& ^* d" @ S4 t/ y: B' F$ }: Y - * 查询表中所有数据
/ J% [1 A/ C; Q9 f - * @param $table3 m1 Q9 ~- B8 M2 |+ Q8 g$ e* P D
- * @param array $where% I9 H+ |" J. O6 F9 M) x# A2 d. A
- * @param array $sort
" e, i# h- }. D6 } - * @param string $limit$ {/ G9 @, b" l. P- X' C7 d
- * @param string $skip5 W2 B5 ^9 g: J% W0 b) |5 f# H
- * @return array|int3 `+ f! p# h; D: i, X; {1 `% Z, M
- */
- J# H6 ?2 Y4 [( c/ ` - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
: O1 b- o. l" t# a; ~ - if (!empty($where)) {9 f- L1 E7 o, A H9 F/ |; K
- $data = $this->database->$table->find($where);3 g" w6 Y- s' b7 g" r# Q( O; k6 c0 |7 t
- } else {
- n( K: n( X6 A. m - $data = $this->database->$table->find();
: l! l0 J& s' E - }
5 V4 D3 A) E: t - if (!empty($sort)) {- @5 ?* Q# t" Q$ J
- $data = $data->sort($sort);
2 F) T( W4 ]7 ^8 e - }$ q' k" _% p2 `. _
- if (!empty($limit)) {
! N+ M2 g2 A- O6 f; A5 T9 x - $data = $data->limit($limit); m" s( _4 t6 Y% q2 s
- }6 q+ _ ?. a4 O- n, q
- if (!empty($skip)) {
& k7 u1 Z- x8 |( r) w4 a - $data = $data->skip($skip);. J% U9 H" Q: _2 G: j
- }- @% i: i$ [; |+ y! G
- $newData = array();( ^- T% c) _* S( I, R
- while ($data->hasNext()) {
! A0 w9 S8 V& h$ }) `2 R/ a) y - $newData[] = $data->getNext();
& }- {# R6 D$ e, [- e. a1 g) R# t - }
K' F7 c( M9 ~ - if (count($newData) == 0) {6 \. T& ~" J' T, @. Y, q
- return 0;- A/ y. M8 A+ H3 d$ O3 W& u8 N
- }+ s' k& O% |* e# a( i0 I
- return $newData;, n0 A$ {+ @ m! M8 H' E
- }4 y% N- ~/ ?/ }9 c7 M8 h6 o8 P
- /**
: q7 |6 z5 J- P! I; _ - * 查询指定一条数据/ z1 N2 U9 ~, _, b
- * @param $table
! Y4 ~4 A! ]6 w. g: }1 r - * @param array $where
- l% ?9 l* w, R( { - * @return int
0 \4 x0 p ]6 \ - */
6 Y4 s: W4 O% q! I: K# b. h - public function getOne($table, $where = array()) {& L, k+ j% ]/ `1 W! t1 C) `
- if (!empty($where)) {: Z& R" I- N& b: a8 h# T* n
- $data = $this->database->$table->findOne($where);7 B4 O0 K: d9 \2 A- l
- } else {' Y2 f+ p& _' q% t+ z* I
- $data = $this->database->$table->findOne();
2 x1 \ _! s# L7 Q1 F/ B: a - }7 a6 S0 F1 Y3 t
- return $data;
6 l% _2 [2 Q5 ]8 D1 [ - }6 i5 t) D+ |; _6 x4 q
- /**
2 V8 ~$ M' `; B: |+ H - * 统计个数" R5 ]6 l0 M! x" g& Z' ^" P
- * @param $table& r. y$ j% }6 K$ e
- * @param array $where9 W8 H H7 m" v) M( c. r p
- * @return mixed
, B' Z. i3 ~( T2 E9 _; V - */
* Q; T2 \1 k8 z8 I7 g - public function getCount($table, $where = array()) {7 n% Y- O Z0 r+ S) I4 |' U
- if (!empty($where)) {9 k9 g( H7 o. N9 Y- [ f
- $data = $this->database->$table->find($where)->count();& ?2 v! w+ E- E1 r2 F
- } else {
9 O& }8 ~1 F" I# j W+ ? - $data = $this->database->$table->find()->count();
5 K) o. w% G8 O/ @2 R; S, | A - }! S6 B# y1 p& B$ q, N
- return $data;
7 g& F4 l: s! Z1 g1 q# _: j0 O5 f - }
( Z/ j+ }6 l3 Z8 f9 I0 m - /** G. p( h' e7 y/ E$ q# J$ s# n" j: }
- * 直接执行mongo命令
5 F" \( K! I9 }) E - * @param $sql
# @! e% w6 ]8 a" U - * @return array5 L1 q1 |: |1 f* e
- */$ u* n) S4 w4 W$ h1 f; Y7 ~
- public function toExcute($sql) {, P/ t8 O# p" `$ q, n
- $result = $this->database->execute($sql);' ?/ B. W# T) P6 u! {$ S0 \- r
- return $result;# q6 m/ s( p2 R* T( o1 |8 }
- }% {" W3 F9 Q o
- /**
2 E7 w4 R9 W \* t1 r - * 分组统计个数
' C- \. u( t4 W4 n/ a% b - * @param $table
3 u* g+ b/ [# q - * @param $where
7 t, b; X, ]/ J' M2 R& I - * @param $field7 d) e0 P, B; i+ r. O1 K2 |
- */2 R5 m- I W. O( k$ ?
- public function groupCount($table, $where, $field) {
: B1 B" k- [, }! q - $cond = array(
: ]! V0 ~- i3 {# I- o1 R) k - array(
5 m+ T O! K& k% A$ [" Z$ [ - '$match' => $where,
2 p2 Q. [* {/ X* B8 H f* c - ),
) X$ v* Q) U b9 b+ b - array(8 f7 e* N8 P/ Z
- '$group' => array(
' k! J! w" L) z$ l$ k Q8 n* E - '_id' => '
5 r- t' h" a- C3 ` - . g5 Q! F( n$ R
- . $field, b/ ?" ]8 u' Y& Y% C) Q
- 'count' => array('$sum' => 1),9 G/ V4 n8 g; D/ w3 a. P
- ),
- ^/ _8 V- ~. i3 d! S2 | - ),
8 Y! r- q: h* @ - array(
1 h: M b" J% s4 _8 [2 @- g* z - '$sort' => array("count" => -1),7 W- B' U( k7 q9 b
- ),3 }1 m" \( ~* b; x% e# n' I
- );: _8 e) J5 G1 v' f
- $this->database->$table->aggregate($cond);
( k: y$ w, A+ w - }; Y7 [6 r7 j% {5 z& c
- /**' K% @5 q8 k+ k: R8 d$ p
- * 删除数据
9 A. _9 U& V* U8 D+ y" i - * @param $table+ s: v) ?# o( c$ P3 k0 @
- * @param $where
7 \. S, h% @) L8 A6 i8 a4 ~ - * @return array|bool
- B0 M" h5 E1 q A, W - */
' F2 Q. q& H: b u. n% }% w2 r+ b - public function toDelete($table, $where) {
" h% M3 M8 k `2 f) \ - $re = $this->database->$table->remove($where);2 h: W7 E& ~; {
- return $re;$ X; J, F9 R; R' I# P
- }
3 P% w, H4 B2 J- F# x, G$ Z, s - /**
$ v' j" Z3 E4 I! V* o6 ? - * 插入数据4 T+ ~8 _9 w7 b4 Z; L0 m
- * @param $table- n: }6 Q+ n; g7 b7 c
- * @param $data5 [+ C( ^7 @5 F C# R
- * @return array|bool% V/ L( l8 q( V% I8 w. @: _3 B# I. u
- */
6 J- S, l: g7 o z8 @# k - public function toInsert($table, $data) {
+ E4 k( d# s8 e5 z) J- ?9 `" P - $re = $this->database->$table->insert($data);8 F, } O$ W+ C% H* k
- return $re;
$ I% c* |0 a) y- f( u9 k - } H' X7 k8 b. Z3 o- ~' z, Q
- /**
7 S: P Y# G" w7 R# F - * 更新数据
/ W5 m" w# }: Y/ t: j& J - * @param $table V1 O6 f& I6 w$ C; j
- * @param $where
, k( b/ H0 S; t8 o- q# X: v - * @param $data5 J- X& {1 J- ?7 B6 |7 P
- * @return bool
/ A/ a; z$ b9 e; p - */
1 E" n0 H! [) r4 ~7 N - public function toUpdate($table, $where, $data) {
5 A9 D V2 e* j8 @7 c% r) S - $re = $this->database->$table->update($where, array('$set' => $data));
/ S/ o2 {& p& Q5 W - return $re;6 }% t! Z0 R! @' y# a9 O! p. C
- }
3 R% P' p3 C( n s+ x - /** g. W# v% y8 t# W4 t1 B+ `$ `6 c
- * 获取唯一数据% j5 j+ } w* J: R4 N) O5 @% T
- * @param $table8 r! ?/ ^/ y9 _, ?+ Q3 ^: w
- * @param $key7 N+ V1 J" b+ ^" x+ q; k1 I
- * @return array- P1 t K( b5 [# k
- */
0 K, _/ W! [; s3 o! k: S* r - public function distinctData($table, $key, $query = array()) {
, Q1 |- y4 v" |/ }; k: N6 d - if (!empty($query)) {
) P0 |' z+ p4 V0 ]' A6 u [ - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 c) S/ }& G: `7 ^
- } else {
- z4 g# b, o$ i& z% w |2 Z - $where = array('distinct' => $table, 'key' => $key);4 I4 ^" {3 J6 J' B( V0 D+ {$ r
- }
! Y& \: Z9 g P1 b4 x - $data = $this->database->command($where);. N; Q/ M, M% C! c# @- f8 D
- return $data['values'];
* S( c% Z, R: B! H - }
+ p5 g- H5 [: t! ?1 g, N( Q - }
% Z; ^+ ?% h6 @ - ?>
复制代码 ( d" N) Z; }. t0 c4 _9 ^. }6 L
$ b5 F1 h3 w. { S
|