本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
9 ^' V& O% B. D E模式自由。 B3 j3 O, C+ U. Q
支持动态查询。
' t" o5 J2 m# F, f- X6 Q2 V支持完全索引,包含内部对象。
0 l2 K. g# { W" T) K支持查询。
, @& b" J1 N# O! {% i! b* k8 X7 O- }支持复制和故障恢复。
% G2 b$ P, l+ F: a使用高效的二进制数据存储,包括大型对象(如视频等)。! y) _1 d5 X) R: ~
自动处理碎片,以支持云计算层次的扩展性3 s. ]+ X7 m- }) @2 L1 J
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。7 U: A/ t& w% I
文件存储格式为BSON(一种JSON的扩展)+ T4 s: m! B# l3 z% x) C O: ]5 D
可通过网络访问 所谓“面向集合”(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+ L4 E% D/ [- {9 ^1 X8 r" a$ [
- /**
. U" M( n. h3 b1 G+ j; \5 Y) p - * PHP操作mongodb数据库操作类
/ q }6 D9 a( H: C5 Y! U6 F6 d - */
9 U3 Y% F+ V6 W' g! L3 Q* t/ } - class Database {
& M0 k4 x8 |* n- ]! U - protected $database = '';
; T, R( u, H3 Z - protected $mo;2 u5 `6 t. U9 i1 F9 p: P& C
- /**) ^% m. E+ u6 \6 M1 `; V+ e. z
- * 构造方法! Z+ [' T+ D1 j
- *// R/ I3 u* z) |' z
- public function __construct() {
0 W2 @/ h( n/ g - $server = DBSERVER;; _" K6 C4 C8 b% m6 `( k/ \ ?: ~
- $user = DBUSER;% Q- F6 Y% I. d# X' l
- $password = DBPASS;
* |) p4 W4 {8 P, k/ v - $port = DBPORT;
& `1 c" z6 L. F, Q! V - $database = DBNAME;
5 {8 E9 g$ `9 k: u - $mongo = $this->getInstance($server, $user, $password, $port);
' a4 @, Y" c8 \1 K K* a- k - $this->database = $mongo->$database;3 V+ l! p# d: J) l9 H7 v
- }, p7 e) Z; K; Q7 }0 _! K
- /**+ _( ?6 e' b, K5 @7 v- b
- * 数据库单例方法
3 H) G, i; ~' J; i5 x - * @param $server3 p# E! D1 x2 F6 J3 B5 R% f
- * @param $user' h' ~# e7 ?; Z. O/ @5 D r" N7 Y
- * @param $password
4 i4 d* p X* K3 @3 e+ R, h - * @param $port0 i$ X6 _4 C# _7 `/ v
- * @return Mongo6 q& a- K1 X/ |) G) [/ V1 B3 m
- */' U% w5 {; p% ~" a: i3 H
- public function getInstance($server, $user, $password, $port) {4 J* ]( j. n+ y j0 \
- if (isset($this->mo)) {
$ q! R* }. D4 k' B3 Q - return $this->mo;" a$ V+ h6 V) O9 }& D) {; Y
- } else {! j7 ]0 L3 K, A( q% O) O" s7 m" w
- if (!empty($server)) {0 \5 T: y+ `% W2 B' C
- if (!empty($port)) {
) F9 O, `3 @" K9 @ - if (!empty($user) && !empty($password)) {5 E8 W4 h9 |! ~9 i2 N+ t/ J; N1 U" N
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");9 S* R' A; t( h# n, g' M
- } else {
0 M1 o! U9 y" W+ } - $this->mo = new Mongo("mongodb://{$server}:{$port}");
2 ~+ x4 ?. t$ @; n) \ - }; n* n) T% U: h7 h
- } else {
F/ f1 e9 N& @! l# g" p; a, p9 C - $this->mo = new Mongo("mongodb://{$server}");
: F- I# E/ w S6 G5 G1 a+ f: J - }
0 L; E b5 l3 l( d9 y8 H+ \ - } else {
0 ]6 n+ g3 P0 Z2 E8 v6 g - $this->mo = new Mongo();
R% l8 a" ? f) |+ V - }9 W, ~5 T! O) j1 a
- return $this->mo;% ~" i8 A/ \6 X6 n! X
- }! m; }" w. j. B, g
- }4 W. E2 Q( u% d& K& |5 p
- /**
' n! O# [8 B3 y* S9 ]; o4 e* q: A5 T - * 查询表中所有数据5 W. C( M/ F) o3 o( R+ [) k
- * @param $table$ A( ?) D0 D4 ^, [+ V0 ]
- * @param array $where5 h( P+ a4 O- D% }/ g, G# e; M2 f
- * @param array $sort
) D: ]- m+ M! ^; r. R0 W7 h - * @param string $limit
# Y$ n7 v! I) y3 w) g - * @param string $skip: `. X- q( A4 H9 v0 Z( ^
- * @return array|int) @; `! O% ?# f2 @
- */
6 A( R9 Q$ ]. L) y& H - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {1 R6 \3 D* N8 n W, a
- if (!empty($where)) {/ A; x9 R/ t/ d3 R7 e3 |% ~, ]: x7 }
- $data = $this->database->$table->find($where);
& e V: w, E" s# l0 _: i - } else {
/ u7 Y: e2 O! x7 q0 J! Q - $data = $this->database->$table->find();& K m8 a% n/ G7 r9 o3 j1 x2 F6 H
- }
9 t& e8 D. Q: Y8 j0 A$ n, Y1 { - if (!empty($sort)) {
. L/ ^+ T7 K, f* M, p: a - $data = $data->sort($sort);# |- V& y3 @) O& H4 Q3 i8 q
- } P) j. P; p/ N. P# m- g' @% H) b
- if (!empty($limit)) {
" u G7 }* Y3 o1 J S - $data = $data->limit($limit);
: q4 z5 Q0 t9 R7 E1 K; x0 L9 z - }* q, ~% P. M! j; L9 I
- if (!empty($skip)) {8 z2 e5 l. X& F9 J
- $data = $data->skip($skip);
; Z$ ^' B, ^; w - }
' E1 |, ^; z; U6 C& A) L - $newData = array();% |( H, s4 z* V, s% p7 m' x1 }
- while ($data->hasNext()) {
/ z* l" z9 ^) \; J0 D: `5 R$ y - $newData[] = $data->getNext();" A- O. q" J8 n1 u4 Z3 }
- }$ B6 X0 ^2 g: W; z7 v" f8 }( D/ @
- if (count($newData) == 0) {
f* ^+ `: R$ d/ D$ {0 L! p- b - return 0;" j' w1 {* B& W
- }
6 j" U8 X7 |( Y8 V - return $newData;5 q% C! s: R4 ^* F- W0 S) {4 P
- }5 w6 V- c. N# c6 m9 J- E
- /**% ?4 K% L. o7 `' V' W7 ]
- * 查询指定一条数据" u5 d- w% A, f+ @1 }
- * @param $table1 Q$ O# s5 W/ ]) U, B
- * @param array $where( v+ Y( b% C9 O! f) z$ u L
- * @return int
9 ]7 F: D9 i- T - */3 Z2 p" o$ ?; Q; E! ]: k
- public function getOne($table, $where = array()) {
: q' ^6 H0 b$ ?: @! C$ L- t: u ] - if (!empty($where)) {
/ a8 y4 q/ q: p! L2 ] - $data = $this->database->$table->findOne($where);. B3 e1 l+ Q/ W3 l" s- {3 |
- } else {
$ Y! c- F" x# |+ P1 j% v - $data = $this->database->$table->findOne();( y2 x, d8 X3 V2 `
- }
; T, S' t, C* q- m - return $data;
4 F) {+ p/ U R G5 f% v - }
9 Q$ q3 W8 ?" W! n - /**5 X+ L, F& D! q; B" z- |
- * 统计个数
- |/ f! ?) I! |8 R - * @param $table6 w2 \7 J' g9 h5 M# D% h
- * @param array $where
$ `7 Q; P+ _6 Q5 d - * @return mixed
2 r. n, n: G4 u3 `, P& h - */( W+ s! K3 P1 o
- public function getCount($table, $where = array()) {) e2 p6 k3 s+ v3 f! T) I7 W
- if (!empty($where)) {
* _! w' b/ `' {5 @+ M! ` - $data = $this->database->$table->find($where)->count();
$ O6 h$ S* q t - } else {6 a% R* s- S* H- U: i0 d
- $data = $this->database->$table->find()->count();- {: Z6 |. t& F) I2 l
- }
3 ~+ z; w# f$ B - return $data;8 D# l! t. Y2 Y9 y# y6 E
- } _0 D9 y# ?/ V! m/ r2 s
- /**. b! X# X: C# Y# l# Z
- * 直接执行mongo命令
" |5 R, \( }( G# Y - * @param $sql
! h# B: d( c: ?% G ? - * @return array& ]4 ^; @: R. ^5 l
- */
% }& M( _0 {1 G) @ - public function toExcute($sql) {
I: `1 D& L3 d2 y( s3 G - $result = $this->database->execute($sql);4 Z% l3 S' d# }, F5 U
- return $result;
9 M. K7 [$ F( H# Y1 h - }
5 x1 v- y/ M( @+ r' O - /**# ^9 D- R* f" r0 B W
- * 分组统计个数1 Y. g& d1 X! E( b, B6 Z- p4 n1 M3 W
- * @param $table
# H2 S+ l( s' f3 X$ ~2 B - * @param $where4 g/ {4 y1 S7 d6 @1 ^& J) |
- * @param $field M. j% g- N6 ~
- */3 a# M) L8 V+ }5 k( M
- public function groupCount($table, $where, $field) {* l0 a) R3 v, o( F. ~( I
- $cond = array(+ j7 \" g( |+ [2 a; L% `3 q& r$ m
- array(( Y# F* @% T% D( ^9 m! X
- '$match' => $where,' T9 u6 _) L7 H2 i
- ),
4 L0 x$ Q; o3 @; E! b7 i7 o4 ?/ h - array(+ N: L. n/ G5 R" l
- '$group' => array(8 ]" j( Q7 x' k2 [! M" p# y
- '_id' => '' e, L1 ]2 t7 `, {+ o1 I
- 5 b9 a$ D( i7 l
- . $field,$ M# l( [+ Q: X0 r0 F7 i
- 'count' => array('$sum' => 1),
. C# i+ a; X V/ X - ),
: b& t4 G' c: U+ M- i - ),9 q: `7 Q% L! n; a0 Y
- array(" x% B* u4 K* ]1 g
- '$sort' => array("count" => -1),# P2 W! U* I; w {) b
- ),
! s# g( B8 F- e# [$ O - );+ r3 D3 I. Q/ a7 w
- $this->database->$table->aggregate($cond);8 g3 S$ g7 Z" @, n9 c4 B: ~
- }
* |/ O2 f- \: D2 u& ]$ `" F - /**
( g" |# t. J. L' k - * 删除数据
9 [0 E7 u$ m4 q) p) S- N4 G - * @param $table3 C4 M, T5 t8 ^7 J$ A8 f
- * @param $where
! R; \ S! \ D2 \. Q - * @return array|bool
; k/ _7 Q# L3 j& j) A7 j - */
+ y9 H3 W! ^( v Q- e' s - public function toDelete($table, $where) {0 W5 C% ~. d& c% `$ q+ y
- $re = $this->database->$table->remove($where);; S. X* }, Q. \
- return $re;% P8 n- q. q& ?9 u) g; T
- }
* A7 j8 `7 X/ y& w - /**7 l! w- d* k: M& d! r4 Q
- * 插入数据0 W2 T* ~6 M3 K8 V$ e
- * @param $table
, Z7 I) e2 T7 p. ?: R2 c+ S- e V - * @param $data+ N( c+ d5 k' \' }
- * @return array|bool2 L, x5 S% I( A0 ?
- */, s8 x/ o* H- o
- public function toInsert($table, $data) { l8 u/ N5 \4 f2 A
- $re = $this->database->$table->insert($data);
- ^6 Y! J8 J! j8 \ - return $re;% f+ A2 x- O& J7 f: e# R+ n
- }* s( ]; `5 |/ |6 d6 }
- /**
3 r( M& L$ b( z) ?0 A' r - * 更新数据 h, L9 |# Z# S- h
- * @param $table/ E4 G* |" |9 n
- * @param $where; o3 y, R- R9 G
- * @param $data' n8 q% O. w- y
- * @return bool# B# W# e6 `. I# e a: m2 Z
- */
6 T& r1 g O! i( R3 [ - public function toUpdate($table, $where, $data) {2 Q1 V; G+ W4 ^ z+ h
- $re = $this->database->$table->update($where, array('$set' => $data));5 M/ \0 W: o9 A
- return $re;1 m' a! Z R/ f, R2 x
- }
& u4 t% `6 o& @% d$ t - /**/ n5 S5 J& [) x% k. t9 U; W( i% p- o& c! _" H
- * 获取唯一数据
0 ~9 x; N# H+ Y, g; ~+ G - * @param $table2 \0 \: t) u% w& ~& W8 C. A3 m
- * @param $key/ V+ C6 h; Z0 |5 ~2 b& @- D
- * @return array1 C* l& B0 y# r% t% d( F5 e3 p) H
- */
- ]" q; u) |0 O3 p5 F# T5 ^ - public function distinctData($table, $key, $query = array()) {7 |) W9 V) y" b1 W. f) `- q
- if (!empty($query)) {7 Q5 }: M. B2 A8 y9 u3 d! L! U! A
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
) X. _. p- ^- O - } else {
/ C, r3 L6 J; G8 ^ ?3 f - $where = array('distinct' => $table, 'key' => $key);
( Y: e8 F1 e4 m9 M - }' |7 Y* ]1 Q1 D7 O" y
- $data = $this->database->command($where);8 r2 O1 X" W) F* x x/ A$ Z( |
- return $data['values'];
- @. \ L$ d9 Z9 y - }/ ]; ^ r) S) P) |+ e2 I
- }4 L" T4 I6 a! j; x
- ?>
复制代码 : c) s4 u, s$ S( b" @
% Z0 z9 b0 J y" ^ |