本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。8 H9 r3 f# @) N# n
模式自由。
2 r3 W) M r' T4 J; j# S6 f, g支持动态查询。8 H. ~" v5 l! ~
支持完全索引,包含内部对象。
4 l6 R0 ?6 e7 [3 h$ Q支持查询。: C0 N% A' {3 b s. l/ C
支持复制和故障恢复。- c! J: O+ S/ Z: t
使用高效的二进制数据存储,包括大型对象(如视频等)。
! j, U. S# {- e: O自动处理碎片,以支持云计算层次的扩展性# U0 ^$ S+ J0 o' L
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。* _" r& @$ H/ v
文件存储格式为BSON(一种JSON的扩展)
: H4 q! c5 l# C; 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
9 D4 V3 {3 d7 q# |7 g# F - /**
" p. ?+ P3 s2 X6 i& ~) n8 U - * PHP操作mongodb数据库操作类
% |0 [4 @& p; f+ @+ U4 ~/ e9 W/ E4 L - */
/ S5 Z" ]3 r5 i - class Database {
7 P; W" u+ T3 ^. t# c2 ?" C - protected $database = '';
; P; v# D) h4 U, ] - protected $mo;
) X5 H7 z8 R' l: N! T6 p - /**
- z- Y, H+ \' g! S - * 构造方法9 Q. I+ p( ?3 d
- */
7 G8 j. T+ b8 G - public function __construct() { O# I( T; e/ g
- $server = DBSERVER;
) o% w6 B$ K+ s( k - $user = DBUSER;
; e! z5 a) n) w p! b8 D3 `. G - $password = DBPASS;
' S& G( o; f/ F- L$ [, i - $port = DBPORT;/ @" |" S* t; C/ \/ [! u
- $database = DBNAME;7 o. ]& J& L6 @# P6 ? Z
- $mongo = $this->getInstance($server, $user, $password, $port);8 }* {. @" r/ |' \0 n. A2 ] ^
- $this->database = $mongo->$database;2 F% u! ?) t, O% u7 y) }( ~% _
- }9 ~& K% o P" E4 B% z
- /**& s! O8 o C0 z* [- \" h, b
- * 数据库单例方法
8 ]0 \: S: M* P: S3 B - * @param $server6 q# \# A+ N3 [7 |8 O Q6 V
- * @param $user
5 t8 r/ N. n/ a* Q% T. [ - * @param $password
7 a |0 r9 `" }8 |( J! p - * @param $port
/ K) q" x9 Y: Q. w _" j( ^; } - * @return Mongo" m7 }* v M; N( O7 O8 L
- */9 b! b! S% N7 j9 j# c9 | n# t# w _9 X
- public function getInstance($server, $user, $password, $port) {( l0 q" {2 M* Z4 h; h( Z, [$ d& Z! @3 H
- if (isset($this->mo)) {) Z, M$ Q: J2 P# j
- return $this->mo;
% W! a7 n& a4 X7 B3 j/ X; q - } else {3 @/ s' s0 f% W+ E5 K) a
- if (!empty($server)) {2 o" l1 U1 ?* t! D& x( y# W- B
- if (!empty($port)) {; f1 r( r( l3 I( m0 C
- if (!empty($user) && !empty($password)) {
: Y1 I0 K2 E! L" y - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
: R( t/ o3 U6 v+ r8 z2 K - } else {! w p! _2 B6 A( i6 ^
- $this->mo = new Mongo("mongodb://{$server}:{$port}");
8 i5 G1 _1 ~5 g z& k5 ^ - }: d' ?& ^8 c: n0 o s, _( @6 d
- } else {
4 r1 z( u7 h7 P; \ - $this->mo = new Mongo("mongodb://{$server}");
1 ~( V, w i0 m8 V - }! i. |) h: `2 l8 m& g4 R7 @
- } else {' k- m6 U8 V; D2 E, n! R- { ?
- $this->mo = new Mongo();
6 A9 X$ S2 o' i. d0 f" w - }
: `6 s) E8 ?7 i- o9 Y - return $this->mo;
$ ~% m; V: v% N" _, [2 v8 x: e - }: k% d1 e* D' J& o
- }
2 P5 C* V2 L2 T& @! }: C' ~ - /**
7 [; D9 H) T5 F- A# _, r2 K - * 查询表中所有数据5 G: F1 c4 z) F- I. s2 c# M1 U+ X
- * @param $table
* e8 z+ t, n$ @ - * @param array $where
9 e8 N4 Y. K+ K9 M7 C - * @param array $sort
0 Y7 Q& u; `7 [( f+ W' N/ v( t - * @param string $limit1 q# _) J- m; G4 O i+ _
- * @param string $skip
2 Q8 R% ?7 M/ d* {( ?* G5 ^ - * @return array|int
; G% f+ ^) k3 q, p+ N - */) i E3 }" C: _' o( Q3 L4 I/ W- L
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
/ u4 C- v& O9 H+ h - if (!empty($where)) {
/ N9 |+ e( y {" _ - $data = $this->database->$table->find($where);
+ G4 o; y, _5 g, o( Y - } else {3 D$ o- ?- D2 W
- $data = $this->database->$table->find();
$ F6 q4 `7 ?' H$ U - }
! M, r$ K7 h% V - if (!empty($sort)) {1 B+ N1 m5 Q1 c6 }- b/ m( m7 e
- $data = $data->sort($sort);
4 R9 c7 \ E" F" D/ w8 h5 [9 a5 j - }7 H3 c" [ @4 n. N' o" \# ]
- if (!empty($limit)) {; j' f9 A) F+ b0 @
- $data = $data->limit($limit); |0 p4 m6 Y: O
- }
+ K' \) P) F+ ~ - if (!empty($skip)) {( e9 s4 ?, t& Z& S+ j" U
- $data = $data->skip($skip);2 l' i% j8 i" [8 D1 X8 n- v, s" X: Y
- }
4 L7 D. |9 j( k1 }) ?. c8 ] - $newData = array();
% | j- G0 {4 E1 f( _9 L - while ($data->hasNext()) {
, T& q; C( D2 M7 }6 E1 y5 K0 _4 K2 h - $newData[] = $data->getNext();
& x8 f& X; t7 @2 x' F9 w - }
$ ?' X2 g: |( R1 w - if (count($newData) == 0) {! Q$ J# q$ ?8 B( a' `
- return 0;
( y1 w. T9 u1 f - }1 _5 a, `1 H c
- return $newData;4 [' f$ N8 k: \; l/ Q* S8 G7 l' t
- }; `/ m n4 g4 r3 h7 B- x
- /**
* x2 E" A) |4 ?. d- z6 T F) [ n - * 查询指定一条数据4 R4 E, c- D& b+ u
- * @param $table
2 k( m1 f. u# V - * @param array $where
4 b6 h; _4 B7 O ]3 I+ Y o0 x - * @return int
( g7 }0 a. J) ]2 ?9 C( Z - */
6 K3 t" j& j9 D. \ - public function getOne($table, $where = array()) {- K1 U0 M- P2 T! ~3 D0 f
- if (!empty($where)) {! R) |' B1 V$ c( P
- $data = $this->database->$table->findOne($where);
, P) Y! K) a, O" U y. ^ - } else {* l' G5 ?5 z9 l! c7 H5 c g
- $data = $this->database->$table->findOne(); y2 B9 q/ z% y7 p5 P; ~
- }
1 N8 y1 b* p8 d - return $data;/ p+ V: D& Z- X
- }9 d$ m8 }5 Y0 h; ^- b2 K
- /**! ]4 y1 C$ {- D4 n
- * 统计个数
4 [& b% a; [6 R. e: C - * @param $table1 V" e' R2 G; r1 b
- * @param array $where
4 O4 L/ q4 H) @) p8 i" `: X8 _9 s - * @return mixed
- c$ p3 T* ]+ f - */. h. Y8 a, g" ]5 _: [$ _& Z/ @ I
- public function getCount($table, $where = array()) {
4 u& @! W: }& U# W) F& S - if (!empty($where)) {
2 H1 U2 U' W% J) Q - $data = $this->database->$table->find($where)->count();
~6 _' L- |: s# J: X; z' z* \ - } else {
$ R$ b2 i' D9 M+ F# [% k& ? - $data = $this->database->$table->find()->count();
$ k# x& O, o3 M3 T: j9 T5 K - }
8 k$ N7 M: m6 b" _; w - return $data;5 V j" B- s8 I+ f
- }* |3 {/ Z' [. x6 c7 ?
- /**
' \+ T* f1 E: L$ `, N" K! f' c - * 直接执行mongo命令) J# N0 X5 X$ l) |) m
- * @param $sql. M! U$ z; ^# y4 J/ W, M% ?" Z1 N! p
- * @return array4 v# r& H% \9 l Y
- */4 o, e+ a N5 R4 D9 ]0 S
- public function toExcute($sql) {
, R3 G" ?1 z) R0 F4 _ - $result = $this->database->execute($sql);: l( m6 ^: {" i# y6 s
- return $result;
" G" l" h+ }7 V, D, K9 A$ R6 H - }, B% ]. f1 U- L( n5 t$ ~1 J
- /**
4 B; h0 n9 l! _ - * 分组统计个数' h: C5 n% N! U$ }8 M
- * @param $table
9 |. f5 g% T2 @- g/ U& b - * @param $where
g' o- w5 V i4 N: X4 X$ y - * @param $field
9 E/ u( ^0 p! z) m - */
% D) {7 X! o$ W4 L& e - public function groupCount($table, $where, $field) {( J, z. i2 Z2 I7 c
- $cond = array(2 [* G, [# u- d; A3 E' A
- array(
' H7 K. z! `1 p0 z - '$match' => $where,- P( C# j& N6 q4 G+ T" K0 n
- ),( I0 D, r6 @6 ?) Z
- array(
( g) {+ a! f9 @6 k - '$group' => array(
. v: ^, K) l) S" l8 e; { - '_id' => '
# B7 m8 n" Y- T3 r. L5 r. T4 M0 G - 9 a" I7 `, l$ B1 I! N- o/ `
- . $field,* o1 v0 E8 D9 I! ^
- 'count' => array('$sum' => 1),
8 u3 M2 `) E4 X - ),( o+ a; X+ A' b$ y
- ),& R- O! }- n- `) O9 f; Q
- array(
) p9 c% I$ N" q# B( `( J - '$sort' => array("count" => -1)," i' g2 `+ }" m; z) K9 \+ W; K
- ),
6 B" f9 t) B/ b' @! F7 u4 L - );* a4 M% p# T8 \& _
- $this->database->$table->aggregate($cond);, f, L* B) ]9 O& r
- }% D9 L7 t3 E6 N$ y) x# M
- /**
6 R- `5 T/ C5 F! \& i# H" V - * 删除数据% o, ]/ v9 X1 Z8 ] L7 v
- * @param $table
7 {4 I$ Z) G" ` - * @param $where
. d( B) B2 e* a; \! l - * @return array|bool
# w o6 w {+ J5 e - */
- n3 d4 ?6 l7 F - public function toDelete($table, $where) {$ T% V, [/ C. b y4 V# _$ p
- $re = $this->database->$table->remove($where);0 h: Z3 F- W0 [
- return $re;: L, G6 g. T& l+ B
- }
6 Y! H! Q7 M9 _) R, A" u( b$ h" t - /** x+ i. H4 s" p* T. u) E
- * 插入数据
, i. y% Y c- j% s' E. b, Y" W8 ?; @ - * @param $table: B: Y: I& \' d2 j& \
- * @param $data* \# T8 l: Y& U! A" `
- * @return array|bool
- C9 }) @3 W. u/ x% ]0 E7 _. ]1 B0 [ - */
0 f/ d7 s9 `4 R- c6 B( { - public function toInsert($table, $data) {$ |1 i* t: ^4 S# n& j2 }7 N5 g
- $re = $this->database->$table->insert($data);3 X1 ~' R) w* A. Y0 w1 u4 o
- return $re;3 v, I, E R( y
- }
" T5 R! k; U8 Y7 I. f5 }4 Y - /**
" u8 S3 _( l. Y8 ~ - * 更新数据
/ i; N% |1 I& ]$ t( { - * @param $table
3 k/ o) x2 i5 r9 c( B" F* j - * @param $where
) ] j! P p5 { L - * @param $data: X" [- ~* A- E1 f2 b
- * @return bool
, r; R: c; w) ] - */0 Y1 I" N, p$ \% p6 H4 E
- public function toUpdate($table, $where, $data) {: T1 e" C4 M7 ]
- $re = $this->database->$table->update($where, array('$set' => $data));0 _6 U+ Z# [0 ^; p' X
- return $re;' B; e( n% L1 i4 z) H
- }- y e: {/ N7 a0 O- _1 ^0 j
- /**& `0 h$ n, @2 W# f- p. S9 j3 b
- * 获取唯一数据* L/ G* f8 r* [. {7 A+ p
- * @param $table0 I. H* R1 X3 u! v( ?7 |
- * @param $key* i' ~2 U9 K, l, P# V$ I
- * @return array
P8 e- I" j4 I - */
/ e. U& l7 C8 Y5 O1 x+ O/ I - public function distinctData($table, $key, $query = array()) {' ^6 O$ P2 R* |* q9 D
- if (!empty($query)) {
2 |0 S z& v. K3 R2 [9 B/ H - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
. x6 r; ?6 R0 b, {6 D- _3 _ - } else {
" T2 r6 Z4 ^7 f% J/ `! W: R - $where = array('distinct' => $table, 'key' => $key);7 z8 ?) A5 i7 A5 o$ u
- }& V! H6 {$ V( Q8 j
- $data = $this->database->command($where);4 t' R: o( f5 H8 v/ M- x
- return $data['values'];
4 p5 R/ h% g$ s) [1 m; v5 c - }
, j. \ j0 ^: H' m; ~" v - }9 O4 t7 T( c* N6 Q
- ?>
复制代码
( ?. M( k- M7 R$ }* H9 Z0 I& ?- V0 y3 {0 W0 x
|