本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
& g T* ~; v$ [" U6 `模式自由。' p2 I9 \0 k) n
支持动态查询。9 P4 I; q- V9 S: ?2 D' S
支持完全索引,包含内部对象。, w% {: t4 T4 @( ?
支持查询。
9 U+ w% }' r+ k. p支持复制和故障恢复。1 M# X: y. q6 k% ?
使用高效的二进制数据存储,包括大型对象(如视频等)。1 X- U/ K2 V0 @+ Z! N
自动处理碎片,以支持云计算层次的扩展性 U, D1 H+ O6 r
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
5 k; t0 C$ c g( T6 i文件存储格式为BSON(一种JSON的扩展)
, \1 y5 V" v! p# v* i可通过网络访问 所谓“面向集合”(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
1 x" W9 K }' N# d2 F) ? - /**1 P0 z: d$ s E# w
- * PHP操作mongodb数据库操作类
( {* Q$ ]6 {6 M, t( ^) V2 A% h9 l! b - */
$ V$ o. |2 J/ E- Y: R @# p - class Database {0 w+ N( U% M4 c M0 l8 `5 Z' S* C
- protected $database = '';4 O7 l$ ?: f6 f
- protected $mo;) x I2 V9 F0 I7 @2 K) \' \4 U
- /**
3 \" z" L! w* A - * 构造方法
) f1 I4 K+ q; [( M! q - */
, t0 K# q9 Y/ [! F f6 X - public function __construct() {: K, F. o! u B& r2 M
- $server = DBSERVER;& h% o1 m9 k/ g6 ]2 f
- $user = DBUSER;
# v( u' G& ^/ Z - $password = DBPASS;- w- o4 b7 l8 g" t1 m( R$ Q) ]
- $port = DBPORT;
- m3 N$ [/ y+ B, E - $database = DBNAME;; P6 n, B- V i& n! C; J8 ^$ f
- $mongo = $this->getInstance($server, $user, $password, $port);9 d1 o( s1 K! k" P6 I
- $this->database = $mongo->$database;$ x* ^- D/ Y% {
- }
4 b* ^9 j& A" O1 r - /** @3 m& V2 Q; Q0 ]" g2 M: C
- * 数据库单例方法
p1 C P5 W+ {6 [8 P% e - * @param $server% p( \6 x0 C8 i* s0 n8 o1 ?9 G, p
- * @param $user- u6 r- |# d3 Y
- * @param $password$ c$ a+ C6 M; C8 Z0 c! e$ G7 i& R
- * @param $port
- \. S$ G, X3 O! v - * @return Mongo
$ c) W7 F. f0 m9 c - */& r; R1 |/ \/ V- E1 S' ?
- public function getInstance($server, $user, $password, $port) {8 E( \3 x9 Z/ Y, v) t# U$ \
- if (isset($this->mo)) {
3 o9 x/ M! f7 P" m% F - return $this->mo;
- i: O( E/ M7 D: U$ j - } else {* e2 g/ G9 b% y& y7 }- d4 a1 d5 z$ s
- if (!empty($server)) {
! w( i# y6 ^3 ^4 Z - if (!empty($port)) {4 v/ m% i/ o% n6 y5 k# w
- if (!empty($user) && !empty($password)) {
4 E x4 X; I; r! { - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");+ u+ O/ L2 L" L" w0 ~7 n* s
- } else {
u4 j+ B4 L3 m6 q3 _( \& W) S - $this->mo = new Mongo("mongodb://{$server}:{$port}");
; F$ B& k s- x, M3 T: Y3 Q - } Q+ ?6 ^3 _% @; j" X
- } else {
: k3 o3 n j, |" g8 w9 q - $this->mo = new Mongo("mongodb://{$server}");
" X0 w- o1 Z. Q l5 v! ^ - }% x3 |/ E9 \( l$ a( H
- } else {
! P; J5 ?7 w% x' g5 a. y - $this->mo = new Mongo();
" Y3 k3 v _) U3 r6 ^0 P - }4 P/ s* z: Y4 `6 k$ x
- return $this->mo;
) `9 }3 ~4 n/ L; c - }8 e# R1 G& n* @5 ?" I
- }
4 e& f1 D- z3 u2 P- ?/ p - /**: _* t2 S/ ], f2 k
- * 查询表中所有数据
/ K A% O( Z! i- J - * @param $table# [& C2 c) i2 w) ]$ h
- * @param array $where
4 |. o) L9 G- L2 d - * @param array $sort
( h* G) I/ o$ M$ R5 ?& H/ B+ ^ - * @param string $limit/ z4 `. Y) e5 u2 A- S8 [ i' s; @& P
- * @param string $skip
4 V# v2 L1 h7 `( ^" e - * @return array|int& h( S) q1 a' W
- */8 t7 ?! Q$ _* w' f2 \
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
) G4 t4 k8 J1 }% K5 `, K3 }7 D2 g - if (!empty($where)) {8 o; J f# z. `, j0 o
- $data = $this->database->$table->find($where);
' D* V/ D, r8 X4 u N - } else {2 t @: W: Z* k. U( W) \! Q$ u& b
- $data = $this->database->$table->find();
2 U, H; _2 v6 N- w: \6 X% A+ n* ~ - }7 w3 B9 n8 i2 I; `
- if (!empty($sort)) {* b) Z/ P' _0 _! f' _
- $data = $data->sort($sort);2 a6 a: O& L0 T* ^, V/ m
- }! p5 }( K! l$ F: y
- if (!empty($limit)) {/ v$ j Q9 f( L) ^' _! E, q9 A! `
- $data = $data->limit($limit);. H* W4 [1 Z8 R* f0 l& N- E$ p
- }
% }* A" q/ B7 A% W Z* _ - if (!empty($skip)) {
* t( S, Z9 F! `7 P. g* x+ o' Z& n8 r - $data = $data->skip($skip);
, y. }' I# y& l- [6 @" y/ g+ P - }
4 t! S# ~5 x( C5 X3 w. b# g - $newData = array();
7 x0 h4 j9 T" |9 g9 [% S - while ($data->hasNext()) {/ j# Z, _4 b5 V) u
- $newData[] = $data->getNext();
& t L: l2 C! d+ p - }8 \+ g6 H0 f! {9 H
- if (count($newData) == 0) {
8 ?8 i6 C+ ?& z& n - return 0;( Q& k# U4 ^0 Z9 |; R+ {
- }
) a4 ~- x' Q$ d: Y9 ]; ~ - return $newData;
9 ]0 f6 \" ~2 a& x% s - }+ l! W( r3 ^( p$ p
- /**
3 d- D/ S+ R( m3 C - * 查询指定一条数据
Z) ]* @$ l" w9 v; [- | - * @param $table4 m) I+ ?, f6 V
- * @param array $where; C. E/ i" l( H! x: G/ e, p
- * @return int3 U) n- t& {- V4 f% r) H
- */
+ \- p4 x$ o# B9 z2 `# \- n - public function getOne($table, $where = array()) {* U+ X+ \ b" t* }" E
- if (!empty($where)) {
1 f$ W M" F5 j3 w, I - $data = $this->database->$table->findOne($where);; I! m0 F; k9 F
- } else {# v% P! N- K$ l1 Y4 o* I
- $data = $this->database->$table->findOne();% u6 k {/ h3 W" ~' U1 Q( K+ T( o# C
- }
1 H6 s' i1 m8 N% l/ ?( J/ F - return $data;
& G6 p0 r6 M3 n) s, \ - }) l1 R/ D. T" ?& u2 j; D
- /**
+ U$ k5 x) i8 }; `) Y0 a/ d4 S - * 统计个数
: G$ q$ P2 m9 ^" ~; p& U - * @param $table
4 `% J5 U6 L% t2 h - * @param array $where
; X, k& v! \# i& y+ H/ w - * @return mixed! k* P7 l3 u7 y8 s5 }$ {: W r& f
- */
7 @7 O* _& Y) V, R8 X- K* C4 r- c' t - public function getCount($table, $where = array()) {
! y# G" w% e' X" B8 v: z& S' y - if (!empty($where)) {
* ^& G: ~; a! ^$ `6 z1 ~" d - $data = $this->database->$table->find($where)->count();
; t, T) _; c$ @" J3 p - } else {
( w: o; E8 w4 ~% I6 }( S - $data = $this->database->$table->find()->count();9 W) s9 k8 ?9 y4 X" S6 D7 R
- }
: w* I8 ?! H T+ `7 q2 r - return $data;
: Y* \, d+ \, b+ c - }' x1 x& @# e3 m, r$ D( O) o8 Z
- /*** Z: o) b* V9 R. Q# a; [
- * 直接执行mongo命令. J* b: v7 h; E
- * @param $sql5 j' D5 {4 E9 K: A
- * @return array# \ |% O( s: r0 w x0 M: \
- */
# e6 g3 q: X: z' }9 Q1 D - public function toExcute($sql) {0 H! U! M- u+ n8 W* E
- $result = $this->database->execute($sql);
' s% T5 N' c7 q( ^& O/ d! I - return $result;( ^9 o$ z* M0 C: @' ^
- }- \/ d: q$ F: ~4 W. c( ?
- /**
9 ?9 c* G& @% g5 o - * 分组统计个数
/ T2 c7 L+ A1 {9 \0 s. d3 p) J - * @param $table
9 m7 T- u2 j3 o - * @param $where
* w; {' `3 Z" ~! k. S2 p0 } - * @param $field
7 [2 p z( v5 q/ | - */
1 V1 K3 A9 k1 ^) J+ k - public function groupCount($table, $where, $field) {
! g. s4 n; Y3 \4 o$ M5 L- ` - $cond = array(' B( t0 W+ M+ g
- array(+ Z4 q+ M! _- w( a9 v8 {- l2 x
- '$match' => $where,$ h0 l' ?8 g* Z- S' D0 w* s+ x
- ),
6 z# ?$ ~ [! }, x8 _7 x" L8 v - array(2 z3 P+ l y' P) S
- '$group' => array($ i% w, m( `6 C
- '_id' => '
; G @3 {7 K h v# o
8 t. u+ ~5 M) l+ Y7 `" S4 u& W- . $field,
, z" T/ }7 e, z. C4 H - 'count' => array('$sum' => 1),
s6 j @% O' y D8 ?' T - ),
6 X! E4 t& |& U; ?" s. x - ),
% l' n9 R/ e. a& g1 x7 k - array(
, M; i' {1 U# }+ l* M - '$sort' => array("count" => -1),. C/ S* K: T& K, B' V0 f
- ),# \/ B. s4 c! v1 _ K
- );
* ^0 N) A G7 J- I - $this->database->$table->aggregate($cond);
, ?1 C! ]4 a, Y2 r4 I) X5 Y - }- i" p$ b7 N6 D: J; [9 \
- /**
, U( [* D4 j: C) M - * 删除数据1 R# |4 S* ^& J; l: ^$ f, S6 s
- * @param $table
$ K1 n0 G7 p- a8 L3 y - * @param $where
5 a# P6 A" f# b* U( J9 F - * @return array|bool
8 T0 c" `& k/ d - */
: N1 j' N) ~( \ ?; [ - public function toDelete($table, $where) {
: [) w; M# C( R - $re = $this->database->$table->remove($where);1 ?- X/ d/ C& m& t D' ]7 @
- return $re;1 ]1 i: v. F7 l) Q( k+ h
- }
/ Y H7 r: B8 T# n' T3 Y% D- i - /**0 z( R! t) A& @
- * 插入数据
5 \$ w( s) n) R: m' u& L6 ]/ m - * @param $table
- _" R8 R5 g. v j) V- B - * @param $data
5 B: Q3 d0 U6 y+ L - * @return array|bool: R. M2 H) u P- l. p
- */6 m8 D2 w6 f+ [& }% i, f% g+ v
- public function toInsert($table, $data) {$ X" o' M" S' t7 T
- $re = $this->database->$table->insert($data);# _! R* T& X) ?4 O2 n, _8 U
- return $re;- p1 U+ Q3 {, M9 X* T- T/ m* w
- }2 I2 h( u9 a+ x+ N
- /**' t+ l7 ^( [4 w" F; Q' g
- * 更新数据0 w1 x3 l0 r$ l* U( r
- * @param $table; R1 U( Q1 Q" l; ?/ n$ X
- * @param $where* S* \1 Y9 h$ u- y
- * @param $data Z) i! M% h9 B; e
- * @return bool# _& r) a# @ M& ~
- */
" \0 ?5 l! m4 H2 b7 } - public function toUpdate($table, $where, $data) {% p1 J4 R5 W5 h/ u5 _) |5 o/ V6 c
- $re = $this->database->$table->update($where, array('$set' => $data));! P( l8 t1 g3 o8 x: k/ F2 s
- return $re;2 Q6 q& Y2 `" E q5 u# X- _: _ s5 p
- }
+ h. j) V- X9 `, t& K+ H - /**
' u& L/ Q8 C+ p4 W& O - * 获取唯一数据
; g& R% U1 S3 T. x+ ]+ b) ` - * @param $table
7 t2 H: r$ m9 X3 U/ @( F, r7 Y7 [% q - * @param $key- v( |/ M% n$ Y" v
- * @return array
7 m6 x# I4 v% Z' W0 F - */% t' \ [- F" \
- public function distinctData($table, $key, $query = array()) {
; z& w* B9 }$ c1 S/ |) v - if (!empty($query)) {
0 a* w" c& ?. q1 i - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
. ]7 l1 Q; k) M. J; V - } else {
6 p+ X1 s' F" N5 c - $where = array('distinct' => $table, 'key' => $key);0 ?2 f/ b6 P9 P5 I- M
- }
- w" V, N- k6 L' \ - $data = $this->database->command($where);5 U. `6 w3 y; R
- return $data['values'];
! I8 F% z2 b4 i+ K/ H0 \6 _* d+ r - }
0 Q& a) c3 Q/ a q' r# t- h3 r - }
4 @2 T" t4 O1 |. Z - ?>
复制代码
" c6 k* W& b( t C" x
2 o4 |; L" G- g |