|
本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
+ ^0 y1 j, E- a2 P模式自由。4 z4 l# Y9 i8 S4 m2 X, c
支持动态查询。
3 F# y. L3 O9 g$ ^2 o支持完全索引,包含内部对象。
. s1 s4 G: Q$ E' S支持查询。
) Z5 `0 E! z* `支持复制和故障恢复。& ~4 V5 F4 A% S: g
使用高效的二进制数据存储,包括大型对象(如视频等)。
( b: e; |0 X3 i7 |4 A自动处理碎片,以支持云计算层次的扩展性1 B9 }. d+ K3 ?/ i
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
$ o, `% X3 \6 K4 r, x6 S文件存储格式为BSON(一种JSON的扩展)8 }+ c }% N8 C" H4 u
可通过网络访问 所谓“面向集合”(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
& q2 D. h+ t# W) G9 x5 T - /**- i' s: C2 P/ S, l5 Q
- * PHP操作mongodb数据库操作类
, W' z; c: g7 H! R( Z9 r - */
$ B' r1 X0 H4 }/ g7 w - class Database {/ a4 k0 z2 M/ G% a2 O" f0 N
- protected $database = '';8 S9 [2 E& A. \; s4 e" `+ R
- protected $mo;# j: Z0 F1 J$ i) @1 G
- /**6 D) w& ]: S: E* ^* T; ~3 \
- * 构造方法1 p- s! V {5 k, f2 q" b2 T, F
- */) z/ x# |' r/ |6 o
- public function __construct() {
/ R( B' U+ b3 e: f - $server = DBSERVER;( A% t( v- H2 ~! V
- $user = DBUSER;
* b7 ^# M% \4 }6 N- _- y - $password = DBPASS;8 H9 a0 U0 ~% _' Z: s
- $port = DBPORT;( ^# j5 U* C/ r$ M
- $database = DBNAME;$ x6 [3 v& G6 L" j
- $mongo = $this->getInstance($server, $user, $password, $port);
) X' ~* r4 p2 q9 B0 U - $this->database = $mongo->$database;
) g( _1 w' X% i! J - }& D }2 Q. a2 i
- /**+ K% @2 S9 `3 Q& R( w# |
- * 数据库单例方法7 p0 H8 g4 M! s5 f
- * @param $server3 Q0 {1 ?6 u7 b. `$ R
- * @param $user
* D$ r! E3 d1 o, w2 z- e - * @param $password( z7 a4 Y6 @+ p) W4 E
- * @param $port: d2 D& D4 \- B) {8 e1 h
- * @return Mongo& ` F! k1 ]7 c6 {* B% O! n6 m
- */
+ e$ C5 s: L j$ ?9 @ - public function getInstance($server, $user, $password, $port) {
q4 p/ W; r7 d: } - if (isset($this->mo)) {
" ]- Z! L5 O, b. P! l. o - return $this->mo;/ Q& U/ S# ~4 `5 c; _
- } else {* U' \2 R/ ~% t1 _" u5 B; E w
- if (!empty($server)) {
" g$ }; l2 y. ^: A - if (!empty($port)) {
! j; U% @9 M( e, ^7 Z4 J - if (!empty($user) && !empty($password)) {" u+ B+ H3 r4 R$ B! v- l8 A
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
' y6 U% t. e% d - } else {. V4 L1 l! ~. A( `9 H0 l9 N" B
- $this->mo = new Mongo("mongodb://{$server}:{$port}");
- F2 B2 v) g1 v - }
( }1 ]( }) [: J; i- V- I- w - } else {6 X: h' h7 ~6 }- `
- $this->mo = new Mongo("mongodb://{$server}");4 M- k8 |4 _3 T4 P* a/ W
- }
* J1 x* i: ^9 c! k8 ]! { - } else {
$ N$ x3 s* C, O9 `- r - $this->mo = new Mongo();# J- |) q! z* ^. x' I
- }% F/ O% ~" k& O7 e1 p7 S4 c
- return $this->mo;6 F# Y" s* b3 O' L5 A
- }
! V R) f7 _8 A3 W8 ~( { - }! H1 ~: [3 ?5 v1 F" h) G
- /**# I' I5 l* i! ~; W
- * 查询表中所有数据
! j) v% X0 q7 O - * @param $table/ C6 t3 |4 C/ c& G
- * @param array $where1 L; }8 d( T) Q1 _
- * @param array $sort
6 Q. P0 M: j+ o" y# n - * @param string $limit6 L" ?; G7 F( a* j1 G/ M
- * @param string $skip* i& [% B* b- C) q' B/ X2 P5 }
- * @return array|int
2 k" O" Q' H0 U - */
' Y+ J; h% H" u" a y7 p6 f i - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {0 P. u7 g0 X/ O( r0 n' T }" M4 o$ K
- if (!empty($where)) {
7 c4 B7 F$ S5 l8 D% z# w1 x - $data = $this->database->$table->find($where);
3 I: \* [5 x% c' t - } else {+ |. K, u: A- @: Y' K' E
- $data = $this->database->$table->find();
- N2 M* G- k) E; y; R/ f5 g; \ - }
8 w% A" q ~! J% i( x7 G( d - if (!empty($sort)) {# \. ]/ Z8 Z% K; O
- $data = $data->sort($sort);% L1 p: Y8 u" T( k5 s6 R
- }( n4 p- }3 Q" ] C
- if (!empty($limit)) {. v# N: i, s r+ B7 F+ g
- $data = $data->limit($limit);
7 c& w. J( J, I8 ~ - }
) u' q2 Q1 `& c+ b# ^6 O - if (!empty($skip)) {
: z6 V1 R* T3 w2 @% ~ - $data = $data->skip($skip);3 i& D& Q2 K1 {3 _+ x
- }% ^1 X: ~( G* M& q- n
- $newData = array();
! K ~# A1 |' d% M - while ($data->hasNext()) {3 l7 d" ^8 {; K ~1 R9 `
- $newData[] = $data->getNext();9 T9 B1 n' Y5 C4 a! E* t
- }0 {1 r+ W/ {/ C
- if (count($newData) == 0) {5 E. }3 s* z4 l4 {; Z. f3 Y. [6 A
- return 0;
) ] x# |& n, [4 _" Y$ e7 J! M - }
8 G7 j9 E* M) X7 ^ - return $newData;' s$ ?' V6 m" M3 i( P0 V" L2 t- n
- }. N. x* W5 E0 [) K1 s! ~8 s7 c
- /**
- g$ s; x6 l/ T6 \$ ~$ E! D2 C - * 查询指定一条数据
9 ^4 t8 A% L/ C: y - * @param $table4 n) h. [1 W1 [5 i" B/ C: j
- * @param array $where& |6 D% f2 B. B* u# M c
- * @return int
' W' k/ ~0 Q. A. P7 P' m, e - */. J( m( N$ r+ l/ K H
- public function getOne($table, $where = array()) {" {* k3 {9 J y6 A1 s1 M
- if (!empty($where)) {
9 @( a" [5 F% W2 _ - $data = $this->database->$table->findOne($where);4 L- X( a" z) V% E6 P( y
- } else {# ?( y' D$ L4 Y
- $data = $this->database->$table->findOne();
- N5 d( I; U" u5 q) Q - }
0 I- W S M. c% O. c& \ - return $data;3 p3 m, z/ Z# }8 r& b6 J4 |) ~
- }
6 ^4 M( r2 l% r$ T* K - /**+ E. s/ i2 v s* @0 ~
- * 统计个数* |; [( L* {+ q( q
- * @param $table
3 i, h/ N! L D7 q0 o1 H* n3 d9 C& E. T" q - * @param array $where
; M t, W" I- b/ Z/ J7 C5 _9 X - * @return mixed
; n& A8 R+ V! z+ f8 V {/ O - */
4 \! Z2 z H) n$ S, G - public function getCount($table, $where = array()) {8 N" r' V* W' Y, ?3 k8 F
- if (!empty($where)) {
+ S0 ?7 m# Y; v [, w& ^- R - $data = $this->database->$table->find($where)->count();; K1 A& e( e; s/ ?" M3 r+ P
- } else {
& |* S4 G" S- N* x* |+ ^ n - $data = $this->database->$table->find()->count();( }; G/ }% T5 n5 f
- }
% h$ H6 r1 p' @7 `+ y - return $data;
: x1 k5 e9 g1 c) x0 `2 y% C2 } - }
) z6 Z; Z: }+ p1 n+ m - /**1 E' F5 f4 J" x: S
- * 直接执行mongo命令
9 S7 X+ E# X; I! A5 R1 g6 y - * @param $sql3 H- v( c& s3 Q6 o) x7 E& c
- * @return array- B$ p- a% Y, w- G+ s# X) c
- */
' J8 f, I4 F* R( J& R0 E! c - public function toExcute($sql) {5 ~/ G7 i4 [+ B L+ T2 f" x
- $result = $this->database->execute($sql);
5 n) n! k. e& m1 [/ c \% d - return $result;
" W1 g5 ~3 j4 ^( E - }$ G- ?; o% f+ e0 f5 Z6 Q) W
- /**. W; [9 M7 ~, c% x0 o
- * 分组统计个数
! z7 f& m4 M# d9 C& A4 O - * @param $table. R0 y% o3 a( i, q# k- P, g
- * @param $where
' Y& p* x# `# @ - * @param $field% h* Q+ |( } d# `- m- I* {, r
- *// q5 Y4 f' o* U F* k/ z& X
- public function groupCount($table, $where, $field) {
4 i) t- Q# _) j - $cond = array(% o) I, ?) }9 v7 |$ p6 m
- array(, |7 L' t; I* G$ p
- '$match' => $where,
; B. Q% h8 v4 L/ r+ z) Q - ),
0 \9 j; L+ Z/ |7 r1 u, d - array(
' G: K& F% s2 h& A3 e9 f - '$group' => array(* n$ j2 s7 p& P; w
- '_id' => ': M5 J; R7 V7 T- z* ]# ?, C
- 6 P! I% k5 V3 \1 m- N
- . $field,
, O ^: Q G5 d; Q! Y N. o - 'count' => array('$sum' => 1),
( A: L5 @6 B* }' o9 b0 R - ),0 M4 h5 A+ \6 t! g# f9 J: U1 A: U, a! @
- ),6 Q8 L2 W) a9 E/ }4 Y- x5 k
- array(5 j! ]# R" Z0 `) p/ E% }& r* A
- '$sort' => array("count" => -1),6 m/ A. Y8 `' r9 U4 V" g
- ),
4 Z1 U6 d! f. }- K - );
- d" c F* C6 q! n" X' l - $this->database->$table->aggregate($cond);
3 ~1 ~5 \9 q! u" ?# a - }
, b) ]5 C5 E7 o - /**- T- X" O* q4 G1 O' c4 U4 S. R0 d+ N
- * 删除数据
2 w9 i* n7 n+ @7 s ^ - * @param $table
; }# k% y& F/ Y2 _" p! l' P& d - * @param $where% G- Q! K5 [% I+ a( {, x4 F* [
- * @return array|bool
: R' P6 w( O: D - */+ n4 N, y( I9 e
- public function toDelete($table, $where) {
& | {6 g. ]) l" D' k3 S - $re = $this->database->$table->remove($where);
/ h& t5 T6 ?) Z0 o& j# E# s - return $re;
: z& I+ w5 l0 s6 Q- S" l& j+ Z - }
& w( i$ u; `5 H+ T' L) Q A - /**8 S) F& }3 ?) Y- a
- * 插入数据
8 d9 M% T3 N3 B; ^# l - * @param $table
4 p$ M: y+ I1 b- Z - * @param $data4 U8 ^7 V& @- Z9 q
- * @return array|bool
# ?6 _ f4 ^5 H4 y - */
, |& c. z. M N3 n$ i( w- M1 c - public function toInsert($table, $data) {
3 Q# U" f9 G& s# U1 \ - $re = $this->database->$table->insert($data);: a# y$ z' N* V! K0 @3 n* U
- return $re;
+ A. t* c" P. m - }( o$ Q5 b7 {# |- g( ^& s
- /**! A. C/ l' T8 ]0 Y1 g" n
- * 更新数据 ]6 h# D( \6 F. M8 Z
- * @param $table
0 U! |1 T$ Y: b* S& ~4 g - * @param $where
; K: B; L* k( w9 w - * @param $data
" T5 q) R" }* t3 K# b9 K3 Y# H) L. { - * @return bool* d+ l! w# D1 X) C& G
- */
% p; o: W; f4 B8 R0 }: L5 ~ - public function toUpdate($table, $where, $data) {
; o3 ~# I# ^5 ]! M1 h$ ?8 o - $re = $this->database->$table->update($where, array('$set' => $data));
5 [# j1 j B5 b# n2 O0 d1 J2 i3 [ - return $re;
5 b+ u! Z0 ?1 q% a5 m- [ - }/ R3 t: i4 v% H% G. a# }! t2 y
- /**
/ d P+ q0 h* B - * 获取唯一数据
- n; b5 W! ]' N: Q/ X6 V - * @param $table( [! s) k/ E. B, h7 U& C4 c6 S5 A f
- * @param $key
& b. r$ A+ L6 E# V - * @return array
0 j) u% }7 E X+ w - */6 g& f! N0 _4 y3 L5 w
- public function distinctData($table, $key, $query = array()) {$ K* h% ?0 J, S0 A9 R
- if (!empty($query)) {$ i1 D4 S" A. c/ l% Z
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);: @. @( Y% c2 U4 B5 }/ v7 r6 a) p
- } else {
1 s8 O) Z3 r) E" j7 \0 o% t - $where = array('distinct' => $table, 'key' => $key);1 ~" M: d# E8 h; G5 k+ [. p ^% o
- }
* r3 S3 s% }1 R* Y/ ^1 w* k; w - $data = $this->database->command($where);
( z+ A V5 u* H% r - return $data['values'];
4 R; ]+ k; K* k5 p5 d4 _4 _ - }
" s6 S5 r) J1 [% a - }
) y2 p$ o) u% l! M o0 E) K5 n - ?>
复制代码 , H& J U: W! j m, \% o
( Z) D+ g9 v4 I2 K9 @* Y
|