本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
4 L5 j( {1 v& a6 q$ h模式自由。) q( a3 E o: W
支持动态查询。+ L/ {9 O6 w1 k/ C' A: p, C6 @ z
支持完全索引,包含内部对象。6 ]3 T) H# X- M
支持查询。
. o! D5 x& x1 T- ]支持复制和故障恢复。, j% G$ I+ c6 m* y3 w5 f
使用高效的二进制数据存储,包括大型对象(如视频等)。9 ~ ?' ]& x) e& H8 v, A( W! X
自动处理碎片,以支持云计算层次的扩展性$ Y4 f, W N" y' V$ t0 g9 s2 F
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。4 @7 L( @+ w# \ h
文件存储格式为BSON(一种JSON的扩展); O; Q" @! z9 C3 s% H
可通过网络访问 所谓“面向集合”(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
3 Q2 S/ h& d+ l5 ~# G - /**1 Z5 E8 Y2 W' V9 j9 [) ]
- * PHP操作mongodb数据库操作类
$ O- ?3 h0 ^3 p( L2 G9 u" x$ D - */) v' d% s- B% r( q
- class Database {, Y: C! o9 F/ A7 p0 R& R
- protected $database = '';
& N; R% b) Z/ O9 L) V9 p - protected $mo;9 \2 d% B' R2 n5 }7 m
- /**, M, h# e- X `) J9 j% d
- * 构造方法
9 Y, g; ~$ Y# P9 e# w2 B$ K ?- R - */
0 e- M5 y |9 J+ y - public function __construct() {3 t5 C9 s+ [' R0 [. ^6 X2 R
- $server = DBSERVER;
% h% v2 g" @6 d- s8 H+ P: }1 H A - $user = DBUSER;" E' Y* d7 W9 C; z
- $password = DBPASS;+ l' c. v) H. C3 K0 H
- $port = DBPORT;: ~4 b8 F' U' Q
- $database = DBNAME;5 d' ^: B3 X- ^$ F f' ]
- $mongo = $this->getInstance($server, $user, $password, $port);, r" p/ F, T" F, y! @. C
- $this->database = $mongo->$database;/ t; c5 K/ G; q1 d3 z" K2 P" k: \
- }
: ~. J' _9 k& n( W$ x$ Q - /**
/ M7 e8 {% }8 X, c {/ x - * 数据库单例方法
" R% F( h! n/ ^ - * @param $server! n1 D. h& @9 \; s o) {0 _
- * @param $user" H; K8 X. Z, _' j( b
- * @param $password/ R/ p! K. y: t9 p
- * @param $port
& ~& m6 _" P, c5 n+ j6 x- ^$ ^ - * @return Mongo
; ^# W W& B/ B) U - *// h3 h [3 n4 r j/ C i; X9 I
- public function getInstance($server, $user, $password, $port) {: e) j8 s+ K6 _6 \3 U$ Q
- if (isset($this->mo)) {
& u4 V7 R2 s N - return $this->mo;/ [1 z/ G2 c% C5 r( S% N0 {
- } else {+ @) u1 ~6 P9 y9 E
- if (!empty($server)) {$ n' }8 B! F; ~- `9 {3 L
- if (!empty($port)) {, c8 f9 @; w" k6 M8 o; ^0 `3 D
- if (!empty($user) && !empty($password)) {
& @, q4 `: u& d7 f1 ? - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
1 E. ]5 L( M$ j0 \ - } else {
4 A# @/ C$ U1 e" z - $this->mo = new Mongo("mongodb://{$server}:{$port}");
$ k0 c5 K8 m$ w+ O) P4 L5 L8 W - } ?4 t/ C- z" s' x# s. `) J
- } else {
3 s' Q- n$ x& R/ _ - $this->mo = new Mongo("mongodb://{$server}");
# i5 J5 U6 \; q - }
/ {; v' N2 ?- m' v1 D% S - } else {0 Q! T5 D# t( X2 l A
- $this->mo = new Mongo();* e6 ?8 T9 j9 \
- }
5 n; [( e- g7 h U, c- `" N( x - return $this->mo; Z) B5 F9 }8 U4 U2 {7 Q
- }* ^7 ^" e( D1 v+ Q( `
- }
- m4 W |- s$ d$ N/ y1 I - /**3 l, r r. l8 n/ v# D H% y
- * 查询表中所有数据
' t; |0 Y" C0 l+ b0 W" C$ m6 i0 s. u0 h - * @param $table
, ~0 e& E! U; q) d - * @param array $where
* ?! p5 c, i* k* j - * @param array $sort8 O3 C3 O- N ]; e
- * @param string $limit3 m& ~ }% d8 F5 Q5 {; B, X# ^
- * @param string $skip
2 N+ E, P/ D3 e# F; L2 i* }- i - * @return array|int" z% h% A" a4 B
- */& m8 k+ F3 C. U* l- x
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
q T/ Q1 b1 t - if (!empty($where)) {; \% K+ b$ t0 L
- $data = $this->database->$table->find($where);/ w* K: s4 o' `8 z4 A9 m: Q. ~9 D
- } else {
( R4 @& t; C/ h# V/ g1 { - $data = $this->database->$table->find();
" B* H) O- d j9 D) I2 Y! ` - }
3 F7 b' ]# a" o# ?9 Z8 ?3 _ - if (!empty($sort)) {9 e0 @ m# e% s% w
- $data = $data->sort($sort);) c% O6 a( B/ O
- }
/ x8 ~- c6 f8 C$ F - if (!empty($limit)) {
# c, e0 h4 y. g4 r j; ^8 | - $data = $data->limit($limit);, D( @9 |- Z! T( _. F* M
- }
g4 J/ w& m1 D( F6 x9 A0 `% @ - if (!empty($skip)) {: ~# f. V* k S( f
- $data = $data->skip($skip);! i6 }: F: v- ?- ~6 B4 o3 B1 T
- }, L, H0 p+ F) p |7 H6 G' T
- $newData = array();
0 m& O% d* V- P4 B" m1 N" J x - while ($data->hasNext()) {
- B( Q5 j( i& @7 l. ?( ^& y - $newData[] = $data->getNext();
; B# x( r: W. L, ^, ^) T9 T - }
! ?8 C% o; K: N" b7 c - if (count($newData) == 0) { Z* x5 n# Q3 i1 L2 z: @
- return 0;' M4 h$ d7 {: o
- }0 C& p3 M" n& ?3 H
- return $newData;1 r# v3 e' | m
- }6 p1 ?6 `; L& G: O5 f0 m8 C9 X" p
- /**0 F; W# ~$ A$ a# Z0 t1 f& y- u
- * 查询指定一条数据2 T# @4 a8 K. a7 B# }
- * @param $table0 c: b1 n4 w7 S- K+ |6 c9 p
- * @param array $where9 I k, @4 ^5 [# P4 X6 I3 c
- * @return int& v1 l- h; b* O, n. i6 G3 y4 e& x
- */. e1 s+ y; ^2 _0 {5 f; n# Z! ]1 _
- public function getOne($table, $where = array()) {5 N7 f" Y# ~; |6 T% P1 }4 o
- if (!empty($where)) {. M9 c8 A* u: v* P9 x) e, z' ?
- $data = $this->database->$table->findOne($where);
) }- q( N" Q. V' B - } else {8 X3 s" U' Y' y& o
- $data = $this->database->$table->findOne();
" y6 f# C. e) r9 w - }
( e% ^, F0 {0 M2 I - return $data;+ H. e' ^7 l. [4 k
- }
3 F7 d3 t1 G6 O8 A5 w - /**- z/ R- v/ k' T: ?' ^
- * 统计个数
) v* c$ S+ X T z/ F - * @param $table* L* y% R4 L `5 C# w
- * @param array $where0 h) b1 H6 ]$ e' i# C
- * @return mixed; K0 y" v: M+ ^( e! X2 J
- */
! A: T/ w8 _, S4 q1 [4 n - public function getCount($table, $where = array()) {+ j$ c6 D# _0 T/ B8 E. T6 o) y
- if (!empty($where)) {/ ~9 ]+ {& A# [: X$ W) ^; U" Q. o0 H
- $data = $this->database->$table->find($where)->count();
6 |- W/ E0 w; j, a/ [ - } else {, d, h0 s$ @5 Z X9 x4 l, c
- $data = $this->database->$table->find()->count();
5 g3 o* q \& X( q# Z( R; [ - }
: \; e' d: E0 T' Q7 v - return $data;, p9 K, O7 u" i+ I- z
- }) R4 m9 ?2 F- ^/ ]6 g. [
- /**
' t: b' H( Y2 _( ~/ f/ D* E - * 直接执行mongo命令4 ~! o* l0 b* i* u+ N+ g
- * @param $sql8 w/ v! u5 r5 L: A; p
- * @return array, h( |. q) d2 H6 R- w6 s
- */; v3 S/ b1 f, X7 w* S) {
- public function toExcute($sql) {+ ~) N6 V3 k1 q& C* j+ a! k9 Q
- $result = $this->database->execute($sql);8 c: p8 S; F5 A4 w) H& ~
- return $result;
! I$ e6 e# O4 c - }& Q i' I+ Q$ Z+ H& g, r! C: a
- /**2 n' o' I. @0 ]4 B
- * 分组统计个数9 b% ?: }9 B. A; v
- * @param $table, L% W! J2 i9 S4 a1 k
- * @param $where) e" f. S) z3 v( k1 l& f
- * @param $field1 E& ?, L+ ~+ h/ N0 Q2 i
- */6 p6 R' ]: ^4 K, e
- public function groupCount($table, $where, $field) {
* a& ~, w8 A/ n8 g7 r# `; | - $cond = array(
; ^* `6 T7 @/ B8 h$ \3 i) G/ ]6 P - array(8 I9 e/ h$ E8 _- z( W
- '$match' => $where,3 Q& ]9 A0 i# x5 @. M+ Z8 N# p) m; k
- ),
3 o" K& J8 A3 P - array( c; W+ {0 }1 H. Q( @5 ]9 y1 @
- '$group' => array($ n' U! r- g) a: U0 \9 P6 |% E
- '_id' => '
" x+ [2 h3 R: h C) f! |; y
1 i4 U' E! H8 x6 g1 e6 K7 g, h6 \# e- . $field,/ y0 m/ m- \3 y6 L% i
- 'count' => array('$sum' => 1),9 }' p2 X- f* y
- ),
+ H. F- }8 n+ @/ ]' `8 k - ),
4 d5 s0 z8 ]0 {" p Y - array(
7 }; V& ]& i9 P& K6 S# o - '$sort' => array("count" => -1),
$ D# _' o9 A" U- } - ),
0 T; f# n8 h8 S3 l - );
# k4 e5 f& M c# G - $this->database->$table->aggregate($cond);
! @( t3 d; ~: W9 r/ j$ \ - }
; ]' Z9 e9 y! b - /**
7 {1 }+ \* |0 d8 } B - * 删除数据
}" _' _ N! p$ c - * @param $table
: \7 Q$ R; y7 r0 f# H - * @param $where
0 Z! K4 U2 r! s5 D }1 k4 w: e - * @return array|bool
; H6 t" k. j6 C2 n! Y$ g0 |# c - */
. _) ^2 W1 ?3 c: } F - public function toDelete($table, $where) {
2 N: q" g: L: z0 c* v. \- c4 |$ k9 D+ W - $re = $this->database->$table->remove($where);
0 B: q* ]9 `. Z/ _ - return $re;# [- l! @0 \: }0 W4 x
- }0 C$ g: D8 q9 O v! [9 e) y
- /**
' C, g0 R* Z( Q# w6 C - * 插入数据1 z1 q k9 l/ s% m: a" w/ r
- * @param $table3 p9 }$ c2 f; p) U: r7 w) E
- * @param $data
2 a+ |9 n/ f% n0 ?7 c - * @return array|bool
$ b% H# H5 }+ ^/ ^ - */; i; y' G( _; J3 F! H8 L
- public function toInsert($table, $data) {
' E7 l2 W0 }4 B& l6 ` - $re = $this->database->$table->insert($data);
; x% D' n4 l3 |8 W - return $re;8 U2 Z! s3 K* {+ x8 Z" k+ M
- }0 s7 A3 W; X, v( B" X! J |0 q
- /**
) |; ~" B4 T) n! B1 Y5 b3 ^. ^ - * 更新数据
2 q+ [7 G3 ]) A, i8 Q6 t: \ - * @param $table
0 a8 @1 f4 q' S! F2 Y - * @param $where
9 i. \* O. `8 k% e" m9 @, T - * @param $data: t, ^9 e: ~: p9 Y( l2 g
- * @return bool
4 e5 A. d% s; ~9 h: e - */1 j" l( u6 P2 w @# R( W( r, k
- public function toUpdate($table, $where, $data) {) V0 W% u1 h! n4 M! z5 W1 T5 e" e! E
- $re = $this->database->$table->update($where, array('$set' => $data));
L5 |, e$ ~$ z- k/ M. O - return $re;6 z6 d5 |+ X7 C) k, c
- }/ m# S( ~) E4 \# J3 W
- /**4 M/ z- o0 A+ Q- E2 U6 g/ A1 m
- * 获取唯一数据
3 {8 D2 c9 H, Z# I - * @param $table$ X" I# K& r% N* I4 s. D- ?
- * @param $key
% Q+ n) D% [& w, v" E - * @return array
: j2 h: \) b* u6 x4 U - */
' N2 x% T4 v% w' @3 r - public function distinctData($table, $key, $query = array()) {
) N6 t6 a& U2 O - if (!empty($query)) {) ]& g8 w" N! t, H# d" k& K4 @5 X
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);4 g Y# ]: X) ~; h: b5 F
- } else {
- \" _& M+ b% O - $where = array('distinct' => $table, 'key' => $key);
& d: k# ^# a; F' n4 c - }
; q. L1 S: z- M - $data = $this->database->command($where);
6 N8 [, J9 F; G - return $data['values'];$ x) U; [4 c+ s; s, ^
- }! F: L+ _: N' [- S
- }
. \( v6 z+ j9 y. g6 A5 i, Y - ?>
复制代码
- m5 v. }1 R6 J# q+ p* Z8 l
5 a9 n& o/ `- M. }3 l |