本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
! F% @8 F8 u! [3 ^) z8 e) \& \3 W模式自由。 K3 r/ f+ V# Q" r5 c# ?
支持动态查询。
% e# @! w v/ h7 Y% C+ i6 N) w支持完全索引,包含内部对象。
. z+ Q; J! d. h) [支持查询。# b' w, ]/ R5 K8 H+ f
支持复制和故障恢复。
6 \1 e. N: U! v+ H0 R使用高效的二进制数据存储,包括大型对象(如视频等)。& M* N% e) O9 L, |
自动处理碎片,以支持云计算层次的扩展性: q l5 V1 c$ N
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。; Y7 M0 n* S' \" G
文件存储格式为BSON(一种JSON的扩展)
5 q. f5 ^" E2 g, T. [, 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. P( ~) m6 f5 X5 Y
- /**( f U ~# `+ ~& v) I
- * PHP操作mongodb数据库操作类7 e( G) k- H6 J( N' b% o
- */. G. ^* `( {$ z$ p
- class Database {
5 F: l5 _/ t! E, C - protected $database = '';+ }6 R1 g' b% O+ k& a: A- R1 d
- protected $mo;2 J) z/ G! {8 P+ p& C/ R, j1 `
- /**
* U! Y' i, g9 C1 `0 q" w9 d - * 构造方法. l$ X7 A( k9 M8 \" J3 R, K# u2 y
- */
0 q% t) \6 f& W. y& w# E - public function __construct() {7 A1 u/ Q- \7 u/ ]
- $server = DBSERVER;
+ [. U" L" w+ L+ j$ u' ~4 A - $user = DBUSER;
2 I# Z* \' n4 k; N: Q5 Z" ` - $password = DBPASS;& \; u- F: h5 J! j4 p
- $port = DBPORT;
+ g3 W3 \. N1 A" A9 Y - $database = DBNAME;
7 K" n/ M: }, F/ R' Y5 O/ x; B3 W - $mongo = $this->getInstance($server, $user, $password, $port);3 D, R$ r0 B) d; b, n
- $this->database = $mongo->$database;) a0 a* X+ f0 p4 d( A
- }
4 B3 {+ [* r. ]9 n4 B - /**
- U/ F6 k& M7 Q! } - * 数据库单例方法, v* P+ _8 V" G9 O5 N3 Q- t6 @
- * @param $server% h8 p2 r/ p' i1 j I
- * @param $user
* a& |0 v# Q8 L; \ - * @param $password3 e4 B5 L1 T; ]" z! s- `9 p" t0 i
- * @param $port: l- H/ r- \* E6 e: U3 W7 m
- * @return Mongo) h' ]" l) e! \# p
- */$ ]7 B$ `9 j5 W' b
- public function getInstance($server, $user, $password, $port) {% K' f# x, Q7 }. j) h8 B0 B
- if (isset($this->mo)) {
# h8 ~) Z1 X' o0 w# x - return $this->mo;
3 X! I% b `+ _; l* s) _ - } else {
' N( T: K/ y& ~9 k+ `' ] - if (!empty($server)) {1 Q7 S& Z& A$ {, M$ X" w
- if (!empty($port)) {# R* @5 p; k% n$ q/ @
- if (!empty($user) && !empty($password)) {
4 ^: k& Z* Z" A, y - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");7 w# I) I1 U* D1 Y4 m& b, j, l" p Q
- } else {
[3 z& V6 l5 E* b9 ` - $this->mo = new Mongo("mongodb://{$server}:{$port}");% z# K* p9 [% u+ m6 ]$ B+ L
- }- d' u* l* Z" L0 I
- } else { ~5 y" S7 U+ j: S% Y; B. l; H
- $this->mo = new Mongo("mongodb://{$server}");
, ]% D* B& f4 W% d- o3 ^ - }
) m. H6 C4 J3 i8 V' t - } else {8 _( Y/ P; v( f5 D2 ?1 d
- $this->mo = new Mongo();
q0 U6 j0 ]; ?3 @/ O2 u3 P - }
& r/ c% [; t- l8 w& B - return $this->mo;9 Q; t% f$ B* y9 ?6 L
- }
5 r5 k# g8 I# Z( J% c1 R& N, G - }
4 {9 g& ]; k& r& k. o - /**9 h/ X( o, ~/ m% e$ Z" B- ]6 P
- * 查询表中所有数据
! o5 e5 C; c5 ?1 j) t2 k6 D& T+ r - * @param $table. o0 f3 W* i# }- d& M9 ?
- * @param array $where2 }+ j$ J/ w+ S" ]6 f
- * @param array $sort
# ?9 y) q2 X i8 v5 s0 { - * @param string $limit
% q) v9 I; n* |5 J - * @param string $skip
% S% ^7 Y# z1 M- d$ n5 l - * @return array|int- b. P% F2 i' y6 C! n5 V9 u
- */9 k7 V7 `( X5 S' K8 _# j0 I( h
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
' U" K7 T3 }1 S - if (!empty($where)) {* u3 K# ]+ d0 U1 u0 O1 j; A5 X
- $data = $this->database->$table->find($where);8 P1 U! g9 u5 }" O
- } else {
- I6 [7 n2 w5 O& t& A7 V - $data = $this->database->$table->find();
! S, T8 a4 ]( [/ B& l$ M - }
1 l& }, s" Q. }, ?/ v' q - if (!empty($sort)) {
$ ?: T }3 A1 } - $data = $data->sort($sort);9 q, n( a5 l+ y- @# C8 L+ @( D
- }- L: z1 T- h' \
- if (!empty($limit)) {+ h+ E: _1 Z- b& M1 v. I9 `: n
- $data = $data->limit($limit);
% w: J7 e9 i6 n. V% H& { - }
" O+ l) U" b& V! a! b - if (!empty($skip)) {
8 y, f# @2 \' }5 B - $data = $data->skip($skip);2 |" p! C$ M3 l$ t
- }
. T+ G( ~( H/ G+ O% M - $newData = array();) Q! v6 U' e6 t- C8 P$ v. `+ v
- while ($data->hasNext()) {
: K c7 }4 L1 l3 r8 d - $newData[] = $data->getNext();- m [4 z" Q b6 K" p
- }8 @9 K7 N2 a" f+ C h
- if (count($newData) == 0) {9 [0 p4 s# x5 U. r4 F% U
- return 0;
1 g& R8 w; P9 A4 P - }
$ H, S& J* ?/ |% D; `9 ]' s g- Q - return $newData;3 v$ f9 J6 `' W. ?
- }
, r( U, n3 O; \5 n: a6 S+ P8 ? - /**
* D i7 v9 r, q& _% Q - * 查询指定一条数据
; F1 N5 r2 p S - * @param $table5 {' l0 [! C# b0 t
- * @param array $where3 Q0 ?0 Y1 o5 ~ K6 s
- * @return int& G1 `& p+ ^+ b' {6 ^* S1 }) x2 a
- */
# {# I+ d4 @" p2 H& L - public function getOne($table, $where = array()) {
P, L' g* w k; F/ Q - if (!empty($where)) {. X- E( k$ r/ T- o0 J: I' a
- $data = $this->database->$table->findOne($where);( k7 N* ~3 ]0 K$ {
- } else {) t6 [% t8 u k; C; n+ a
- $data = $this->database->$table->findOne();
* q/ V8 u& g' h# d( S# p5 l8 ^9 | - }
: a. j1 R9 ~/ | - return $data;
: K/ t- e- E+ q- i5 P! {3 ` - }0 w2 }4 e( B& k3 {
- /**
" U1 A5 M& g1 r! \. E - * 统计个数$ h& r$ @$ k$ q; c1 E9 S# n
- * @param $table0 T8 G. q5 ~+ ?: I" ^; ~, i2 }
- * @param array $where
( K$ x; m9 a( {( h. m w) w3 U - * @return mixed; q, i) Y$ x, z% h+ F
- */) H4 y) y* q. P7 }
- public function getCount($table, $where = array()) {$ d W5 P/ D4 Q, ~7 _- a7 e" L
- if (!empty($where)) {
. |1 Q. ?. f0 U* \ - $data = $this->database->$table->find($where)->count();& n: B) f* @8 T
- } else {) d3 {/ k. d" |% X6 {
- $data = $this->database->$table->find()->count();
) R5 U& y6 Z0 v6 H# | - }: e9 ~% n/ u. P2 U
- return $data;
& B7 \. Z8 \9 @7 a3 ~8 d - }
- d9 V, l) `8 r( s& b - /**) e8 T3 A8 Z2 u9 v& [
- * 直接执行mongo命令
* W, S! i% j" b" A3 ?) Q' }4 m - * @param $sql# n- H- |# w$ }
- * @return array
1 p+ U1 t/ ~! k- m# h7 J; G! u, r* D1 F - */
6 g: F% u7 G5 C7 V8 H$ W" n - public function toExcute($sql) {+ I. m" E( N. Z9 l
- $result = $this->database->execute($sql);- y$ V1 G* J* s
- return $result;7 Z" V! ^7 Z" c9 T
- }
) `0 g0 `. R. J - /**6 j, b5 B3 {9 b. e' S. \
- * 分组统计个数
( h0 d7 _* N7 |/ e4 K# m* r - * @param $table# Z: p5 m3 ]) A8 W, ?4 @
- * @param $where& u* `8 I4 E9 \& p
- * @param $field
+ N7 V' I6 d5 M" }" A' j' F, D. A - */! k: H# _; d& b% L: ?# m: }
- public function groupCount($table, $where, $field) {
4 `2 d2 T0 S: ^. i$ A - $cond = array(/ ^ T3 n! g6 E2 l$ J- D$ P
- array(
8 p9 n5 S" Y0 V& I - '$match' => $where,
% }# S9 |* l3 M9 u7 M7 E8 A9 F/ l - ),
* L, G8 m( y8 E4 z# L5 S- w: f+ q - array(
$ I* p% E8 o; s5 l - '$group' => array(
* b/ m, v+ d& c! C - '_id' => '" Y# H7 i- G* Z- N/ B/ }
9 U. y) e7 M6 `4 |6 w, F% i- . $field,
0 h# c" P' h+ l+ @: ]7 [/ c - 'count' => array('$sum' => 1),) c/ X' `! N0 G1 o7 T
- ),; B" Q8 r1 G }/ `8 b( \: s
- ),
- h4 ], q+ a/ d! d8 o1 I - array(
: q" X7 n& x2 G- a* _# G - '$sort' => array("count" => -1),
]3 k& {% t- G- f6 X s - ),
4 X- R& \7 n6 {; a- |0 C - );" X: H, V: k, t4 E. s0 f
- $this->database->$table->aggregate($cond);
R! S+ J( l2 I% I" |! x0 G! q - }
d) I, f8 f8 ` - /**
- F/ z8 T, V3 B8 H$ N! V+ v+ e - * 删除数据* X8 v7 }& X0 D$ ?% p
- * @param $table9 L' W8 U0 o- c# R& i8 ~* f8 R0 Q V
- * @param $where+ G7 ~' e M# i) L" w! ]6 U/ V
- * @return array|bool$ R: e% }/ z( T
- */4 Z' @) R) D; i, l! K
- public function toDelete($table, $where) {
& ]- N7 T# I& D u! F) P- q - $re = $this->database->$table->remove($where);5 h7 c- E+ d4 u0 l* G
- return $re;
; }7 v2 W4 n! P; \; t - }/ ^( t& p, q* b2 J1 v1 {
- /**% G" X0 o3 b: E; n' ]/ `
- * 插入数据5 \! m: l6 Z$ e
- * @param $table
3 M4 r& b* r9 z$ A( G+ U - * @param $data
9 p0 f% X4 A/ ?- u5 ~ - * @return array|bool
; O5 @+ F: f. U" o7 k" b# b' x - */7 K2 S' H2 {6 H! q
- public function toInsert($table, $data) {0 G h# y- {! R( ^
- $re = $this->database->$table->insert($data);* i y4 w- a6 n
- return $re;
) w+ a5 b0 u1 b9 b! i- Y" J, J" s - }
% @" R/ E+ W8 `2 u# ~( Y - /**5 L: p& Q, _% N& ?- D
- * 更新数据
% @3 |; `* n1 ]8 v, y$ G+ F - * @param $table1 E% q! f2 |3 Y# X6 ~7 D
- * @param $where$ a( A3 R& g0 D0 W
- * @param $data
& G% s. @* @! s: N0 t' @: ? - * @return bool( v4 F* N) u3 ]- p8 C; |
- */# p" N* m7 `* x5 @
- public function toUpdate($table, $where, $data) {
! z' ]; l! F" X, X1 O - $re = $this->database->$table->update($where, array('$set' => $data));
1 G2 y6 a9 z3 q - return $re;
+ [( K, B! n& D - } l+ L, y( @* o
- /**8 M+ ^3 o5 B2 [ A$ u6 a) f3 {
- * 获取唯一数据
# R- b- V, T( R1 j" a$ H' o p h - * @param $table
- G* G0 p3 i! l( K6 o8 t - * @param $key
2 F& M# d% G& f! D7 _ - * @return array
* Y* `$ V+ M: _2 ?7 u! F" x' E - */+ J) G5 H p1 z- K" `4 m
- public function distinctData($table, $key, $query = array()) {) H. {9 B9 l$ B4 v h
- if (!empty($query)) {
: M9 k* y( C4 E) A8 N - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
K" p: {+ a, x* R* f - } else {
& M: E1 I. f/ T3 o- I - $where = array('distinct' => $table, 'key' => $key);# m$ J- Q8 n7 I! y6 F6 O. L5 }& N
- }9 t" l! I! q7 |' Q& R
- $data = $this->database->command($where);
, w$ ]+ @4 r. ]5 v4 O - return $data['values'];2 |- S ~( B2 }
- }
; H2 P7 P/ q, d9 `- ~( b- H$ R1 { - }% q" o- L# E, }9 G/ [
- ?>
复制代码
3 Y# t2 ^. r( g. g: i7 i
) `) Q" V* U$ C% r% d |