本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。, h7 Z _: q% |
模式自由。- e/ E3 Q" U5 d9 [
支持动态查询。
! J5 E$ l2 J* @支持完全索引,包含内部对象。
8 f4 M8 q' q# Q. j( B, r支持查询。# j8 z6 \3 m7 p. w& g5 b
支持复制和故障恢复。3 g9 e: G! r5 d
使用高效的二进制数据存储,包括大型对象(如视频等)。. |( q- V0 J+ ]& u5 ` v
自动处理碎片,以支持云计算层次的扩展性
& ]5 }9 I( B W7 P6 J0 h7 ]支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
) L+ ]' @# K- d2 l! N' C文件存储格式为BSON(一种JSON的扩展)
- B! K8 a' A9 Y) j可通过网络访问 所谓“面向集合”(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
% _- t9 G5 q3 i. R# _ - /**
% i# S8 g8 |3 R - * PHP操作mongodb数据库操作类
3 d' m8 B. d& ]& q - */
2 J; u( `6 r0 w( k8 {$ v* e, T4 Q - class Database {+ m! U- V: N, e. B5 s; S5 ?
- protected $database = '';7 |+ a2 v; }; M% k5 v0 q* A: @8 S
- protected $mo;
& R, @& l4 L8 ~1 v - /**
) E- x8 Y/ t p' i3 a - * 构造方法; X/ G' V# T4 r T
- */9 _6 Z% k/ [, t* G+ }( U
- public function __construct() {5 B/ T9 I5 R8 P1 d: I- a1 g3 a
- $server = DBSERVER;/ C; Y+ h' M7 d2 b
- $user = DBUSER;+ K7 F2 S) e3 U& d: J: e
- $password = DBPASS;
. c: |! _; Z; Z% `/ K8 { - $port = DBPORT;
* g8 S Z+ r4 V' c, k - $database = DBNAME;
! r6 L7 d! k7 X1 a0 j - $mongo = $this->getInstance($server, $user, $password, $port);# S8 [5 P$ F. i, P# m# j
- $this->database = $mongo->$database;
& W- G$ Z0 a$ @: u! {3 i! A - }
% Y% l* r1 g/ K( K - /**
5 W- a, e+ o1 r9 U - * 数据库单例方法, \ P6 R; C- n) S5 g
- * @param $server# N) h4 y( N- o4 H, W5 x5 m
- * @param $user
$ ]/ @: o ]. S+ M$ O7 P - * @param $password5 W6 ~ o1 d5 J7 T8 ]
- * @param $port& D1 G) Q1 J/ j* K
- * @return Mongo
. [! V; R+ j1 V7 t - */* q: t& N+ P# J# x1 ^
- public function getInstance($server, $user, $password, $port) {( U6 i x6 ?- Y
- if (isset($this->mo)) {
. T' M2 c7 d3 P/ L5 e. C - return $this->mo;
2 {0 K# u7 Z+ a$ [: d9 r7 T - } else {3 q; q; U, @0 F" @# M; s
- if (!empty($server)) {
9 b# h$ K7 ]1 E - if (!empty($port)) {
( O& `: R$ J0 y0 z$ D - if (!empty($user) && !empty($password)) {1 K9 ~7 |, I, f1 L
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
8 z5 S6 v1 h1 m* z# o) j - } else {" J$ g. l6 K. I1 O. T5 g
- $this->mo = new Mongo("mongodb://{$server}:{$port}");9 ?* R3 m+ K) |2 w' B2 F
- }
: B; B. V5 g+ ?4 ~4 _: M - } else {' c3 h: r3 \) ^) S6 ^- L7 |, m
- $this->mo = new Mongo("mongodb://{$server}");
5 _) d( a$ t7 H" n1 G# v' S4 l - }7 w0 Y& D& I# z) @" g8 \
- } else {
! q, z5 r; B) t9 l; R3 m - $this->mo = new Mongo();
% c6 W4 Q8 d# a: l3 p - }- Q' E! O/ h( O1 y- s* Q
- return $this->mo;
$ P! |( n( m" J9 @! @& I3 t - }. r0 i Y5 n+ _9 R% q
- }% C, j5 a) M! }8 J0 ?
- /**
" s! x+ ~# h% z9 V, ~8 ~- H( I* c9 m - * 查询表中所有数据
, Q3 j2 M _1 q. B! m - * @param $table5 o% w( R' h$ B" d7 L
- * @param array $where
! e5 `% ` y3 s5 I" ^- ^ - * @param array $sort
6 T; [0 r1 k8 s$ f ] - * @param string $limit1 \* S( X4 H8 i" D! _/ |
- * @param string $skip
5 C/ s# a$ H: @/ m' f4 d - * @return array|int( S7 G* _ l% C
- */6 }* G2 A; n' h8 p
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {! ^; B* g K; @/ i t
- if (!empty($where)) {
+ g) x: F/ ]8 Y0 w( C1 w* b7 r - $data = $this->database->$table->find($where);+ r* a+ [7 A! l2 J0 Z
- } else { i. V) Q1 k `
- $data = $this->database->$table->find();* _3 w# ]& [8 A5 R
- }* q0 p* i6 L# o P+ ^! S/ R
- if (!empty($sort)) {& y# q/ _. w1 B% p7 @
- $data = $data->sort($sort);) }8 @6 h5 a+ y. g0 i6 x/ ~2 I
- }
8 r$ Z4 p( |& ]7 W& u8 d) h - if (!empty($limit)) {
0 U, n$ W: f/ N$ I7 X/ M1 ~ - $data = $data->limit($limit);" q6 B. L+ A2 L i7 U
- }5 z7 Z9 t8 d- k% e- E' b
- if (!empty($skip)) {, C8 i& }8 |* Q( J V) ~" `- b: z
- $data = $data->skip($skip);1 D; E. g* q1 s$ Y z, U
- }0 }& Q$ \! h; L% G
- $newData = array();5 y K: p3 ]3 z& U
- while ($data->hasNext()) {
, m) C" J" _* C+ Z7 Z: R - $newData[] = $data->getNext();
u* Q! N. N9 Q# g" |- d1 I - } J9 T" U3 z- i8 m$ h$ w
- if (count($newData) == 0) {8 r% Q% n0 {/ o3 ?( m
- return 0;
* o5 q6 M! s9 X - }2 x3 M5 K0 F3 ?- T! w# J
- return $newData;
1 k: I s& i# @4 a |1 Q# B# D - }
5 Q: ?6 o" B3 F' K5 } L - /**
+ E* g0 ?& Z s) R - * 查询指定一条数据
0 f' V9 g) ~3 T- a' x8 _7 D - * @param $table
- }* [& t+ [0 P2 p8 k - * @param array $where' ~( }& L2 A, [3 A8 Q
- * @return int
0 ^. V+ D# @3 e: K3 f# _, n- z - */$ Z& f- L7 S1 p0 O& k8 G/ f2 w
- public function getOne($table, $where = array()) {
2 M$ G% x0 O1 \% \: \. ] - if (!empty($where)) {* U- G! e/ s6 T7 v8 e; }
- $data = $this->database->$table->findOne($where);+ V; g, w+ p# _ F
- } else {
+ `1 G7 e; @* M - $data = $this->database->$table->findOne();
. B* l$ Y. i' o7 {) f0 g% G! B - }
/ j: |2 M0 |9 h. ]) Y* M8 l" t - return $data;
! H! V. j4 {1 c9 b" D9 F3 {! v r - }( V$ }6 R8 q) m; K" `
- /**: U3 k1 M1 e, {+ j' K1 m5 S* ?6 f
- * 统计个数) b$ o1 |( I! }
- * @param $table
4 N% O }* d/ \6 ^ - * @param array $where! k7 t/ ~* ]# a3 A
- * @return mixed+ P B( E* X- b0 v: n
- */3 T$ J7 G0 T6 C" S
- public function getCount($table, $where = array()) {, N+ F. [4 I* v( t
- if (!empty($where)) {
' w9 Z) C5 }& g6 ~, j# G/ ? - $data = $this->database->$table->find($where)->count();
. I8 W, ^% }8 A - } else {
o: r) g, _1 S - $data = $this->database->$table->find()->count();5 q6 I! p* A2 q' |* v+ H
- }8 r3 W7 p1 n8 ~/ I3 A4 z$ O8 |
- return $data;
/ |! F# O1 b9 n; A - }
! f: }5 L7 j7 g2 n - /**% ]: y% k! o6 L( [* ?
- * 直接执行mongo命令
" u7 w! ^2 H: F8 i7 a4 @) X - * @param $sql# T ^' ?2 [ T0 {* C' `) O3 H
- * @return array _% ?5 [+ [, Q; D# a3 @) B
- */
: g) c" c, X& O9 C j - public function toExcute($sql) {' w6 m% J$ L& V5 u
- $result = $this->database->execute($sql);
- e+ d- t5 N% W1 ?( b8 k. V, v - return $result;
5 }" D& x/ S& k# t. Y& T: |4 [$ h - }; {3 t7 j/ y) F7 k
- /**6 m# m i! h8 K8 c$ b8 ?7 q1 w i! L
- * 分组统计个数
8 X+ y" s. M5 ?% R - * @param $table
* f% m+ @. ]8 L Q$ `+ p4 m3 d - * @param $where2 W6 H k; A2 M; [: l: \7 G" v
- * @param $field! y+ u0 s' g. P! X I. j+ z
- */
* a# B; x7 n5 `! ~1 p. ?* ] - public function groupCount($table, $where, $field) {
* w! U3 w' \ |: s2 P - $cond = array(
: y5 X! Y& H4 n! h& K, M: ` - array(
3 I7 x' Z7 U, u% L - '$match' => $where,! ?) }5 V9 S% _: n
- ),1 S$ t* |, M# b1 h) J7 N, U
- array(1 a g8 |. ~ v8 K; a
- '$group' => array(
" g* \$ K. j; V% F% ^$ T - '_id' => '' O9 \2 f) N8 w9 t9 g
) g5 P7 Z! U! J! W5 m" J* h) ^" W- . $field, ]: U5 a7 A* o
- 'count' => array('$sum' => 1),
0 N" T3 m9 Q7 A# o4 N - ),
9 I7 J$ X# e% q8 t# @ - ),
2 l Q( C. Y) q% G6 Y - array(
; m7 i) ?& h+ h& s; e" T f - '$sort' => array("count" => -1),
) `- Y4 \2 g/ o* w& K - ),
+ ~- ?* A6 F. P* j7 p - );4 H- b/ ~/ ?& G* J" @) n
- $this->database->$table->aggregate($cond);
/ g( ]6 T! e7 t. Z+ b - }
0 x* A* K! l3 @8 @4 C4 x o - /**
9 M! q0 e% E! D0 Y - * 删除数据
, ~; v2 \( u- t; U - * @param $table0 ]# Q& c9 l/ g& c H4 `( V6 I
- * @param $where/ e; S2 {' h2 _" \9 h" G3 c! S* j
- * @return array|bool- Q( c6 v9 ~8 O0 l: D) y& P
- */
( ^9 L, F* \2 H( G* d9 J - public function toDelete($table, $where) {
' |; v0 o) a( Y- n- s$ W2 d# k ? - $re = $this->database->$table->remove($where);" S/ X F1 {" x+ w% \8 Q. R* s% ^
- return $re;9 S0 p& h c9 G
- }8 r- k/ ]% Q3 j2 z x
- /**' n' c. S! s3 ^$ x
- * 插入数据$ G/ N: G: K) s1 _
- * @param $table5 ]! n1 b! p) A, s+ ~7 N' P
- * @param $data
8 O1 |* M. \" s N - * @return array|bool5 T8 K0 Z, h2 ? q
- */
, E# z4 d' x- H. V4 Y - public function toInsert($table, $data) {7 _+ C- Y r" D& D
- $re = $this->database->$table->insert($data);
6 N/ g4 Y$ q, x( G0 | - return $re;( k* ]% A) V3 U) Y. q' Q
- }
' q/ R3 Y3 a0 ]7 X/ B! C - /**6 ]7 e2 ] S0 I
- * 更新数据
# \6 l- h. k: ?+ @6 W - * @param $table$ G' v1 ]3 }- i& a
- * @param $where0 ~& b% O; |; z; W0 c5 h
- * @param $data& q1 o/ V) [- [$ Y6 t
- * @return bool8 f6 A5 V% E" \4 z6 K5 D# C
- */
5 W# B2 N$ m- t - public function toUpdate($table, $where, $data) {
- H8 m: h4 ?' N - $re = $this->database->$table->update($where, array('$set' => $data));
" |( k+ `, ?7 a2 U; `% [2 ^4 R5 ~9 k - return $re;5 u# {; W; ^6 u8 u
- }, z2 v6 C n/ a, W- p
- /**
2 B9 o+ \. K: ]4 Y& h - * 获取唯一数据" v, `, Y5 Y+ v0 p5 v. H' M3 n
- * @param $table0 j# H2 f0 v" P+ R
- * @param $key0 m4 m5 Q" T5 R5 T4 H
- * @return array
4 [7 a2 |: H5 h, v) X - */
# x: C: H; A2 N$ ^+ ~ y- G& m - public function distinctData($table, $key, $query = array()) {, B8 d3 H6 M1 }! f8 d& j0 y: r
- if (!empty($query)) {: c. m% D; ~: K
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 q) k# Y s- [' [2 n
- } else {# {, I- r- ^. ^
- $where = array('distinct' => $table, 'key' => $key);6 Y8 t. J" W4 c9 q" v
- }, i% Q4 W U+ }1 l! S" {
- $data = $this->database->command($where);) N* n4 x( |( G6 \% I1 M6 Q8 D
- return $data['values'];
% J; s+ E; ^0 X2 V$ m1 y5 t - }
% q& n7 T( M) M% N" { - }
4 `, W: U3 A; @4 ?7 G( B& \ I2 o" a - ?>
复制代码
6 R1 g; _- Y2 w, v4 ^
. v! X- J, C% a# h8 r4 K |