本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
% \/ J& V4 N1 J( |9 |; f模式自由。
4 c1 {* n$ Q) d! H" Z支持动态查询。
; p( o1 V) ~' e+ o. q支持完全索引,包含内部对象。 _. y& L. E2 N9 C, N
支持查询。4 ~$ D+ t3 h* _6 _0 Y7 i2 R& \
支持复制和故障恢复。. d' H7 z. O1 K7 |8 g7 ?% o
使用高效的二进制数据存储,包括大型对象(如视频等)。
/ q0 W8 f! [+ c6 n( l3 O: N自动处理碎片,以支持云计算层次的扩展性
7 T" m, v6 H) T+ L" Q支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
1 }3 A: W2 h8 _0 A; m! e文件存储格式为BSON(一种JSON的扩展)
, u/ W2 V- e+ f可通过网络访问 所谓“面向集合”(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数据库的数据库操作类源码如下,仅供参考。 - <?php5 z% ~4 _, p' U7 J
- /**- {" n6 p9 n) _+ f
- * PHP操作mongodb数据库操作类
! g& \! C/ [9 Z \% @2 T - */
4 J# s6 X7 n* z+ g& ~ - class Database {+ X5 Q9 V6 F4 c( d8 s7 D
- protected $database = '';/ s7 u7 }( k* h9 R& \
- protected $mo;
. R8 K' d' P1 j" N - /**! R# O& X L6 O1 h* C
- * 构造方法' h6 o4 P6 f( Y) ~4 E) R4 h. {9 Z; G
- */; i4 A+ f1 r' K0 v
- public function __construct() {# Z6 V$ T6 A4 |) J
- $server = DBSERVER;
: L( O9 s- h% Q8 W$ E: `- r- c' T% ^ - $user = DBUSER;
! r/ M0 C+ d! e2 Y% ?' r - $password = DBPASS;
9 d2 K, l, L6 C& ]; h+ _/ U - $port = DBPORT;
6 B: H+ }7 b- B/ _" y - $database = DBNAME;! U( ^, x' D# G5 Q" B' l9 S$ d
- $mongo = $this->getInstance($server, $user, $password, $port);
, {- a6 R: \* c3 e+ w' ^1 ~6 \" _ - $this->database = $mongo->$database;
7 G/ K5 }6 S2 |4 k+ o" {' E - }+ }, `, V6 J. g; t
- /**1 z; J4 W7 _7 n: ^
- * 数据库单例方法
0 F. L. o' J- w4 u- g - * @param $server/ p6 x6 P0 ^; S1 h. `$ c) m" t) g
- * @param $user) i3 E( m Z. P! e9 t6 V1 T
- * @param $password
& {+ l( u( e* C. y8 E4 S6 c* S - * @param $port& j+ c$ h& K3 |% g0 r5 O- p9 u, ]
- * @return Mongo
# j$ f: m# u/ d! i8 ~& S) S% _+ p0 w - */
4 ^8 l( ]; D+ d& h" j0 V - public function getInstance($server, $user, $password, $port) {' P: M- \4 c% y! c, C+ F
- if (isset($this->mo)) {4 p7 L9 ?) M3 h5 `5 F0 R3 `8 e
- return $this->mo;
+ D% `0 V7 i; t& q: Y9 E - } else {
# Q4 t' g- m4 j3 f- [ - if (!empty($server)) {
5 F; K2 H- y' \8 W2 } - if (!empty($port)) {
, j% k0 v# ]: @; v- ]# V - if (!empty($user) && !empty($password)) {7 S& p/ x) |8 w$ M) b! z4 E/ V
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
$ o/ P" A c" o- P! K R4 ^ - } else {
) `& G2 T6 ?4 S! F' R( _: S - $this->mo = new Mongo("mongodb://{$server}:{$port}");
}$ b! I# Z+ U3 z/ j - }1 d' Y9 I( a9 u5 O: [
- } else {4 P6 c8 H3 Q9 m6 K
- $this->mo = new Mongo("mongodb://{$server}");2 w, ]0 S4 e l' `8 i
- }" G4 S$ x3 v0 m- i$ r* l: T
- } else {
2 l% ]" g. l5 M$ M$ F3 V4 _" L - $this->mo = new Mongo();, B7 ^- v: b3 y) }+ |9 Z0 I
- }
# ~! w3 F% r/ o' P! \) e; r - return $this->mo;
Z" u$ N9 D3 Q$ r* a- u - }
* N$ E. `; K+ u, {/ ]/ a' l0 J - }6 S6 R& ]+ P8 s/ k" ^
- /**, L" f3 @' w5 Q* B
- * 查询表中所有数据$ `) `. e; Y! @, j+ @2 l
- * @param $table! g8 B ~& v. I3 d: G1 X
- * @param array $where
7 _0 b% Z7 F+ ?- S - * @param array $sort
6 w1 s# _3 B O" A - * @param string $limit e- @2 _1 J1 l0 l4 y! {+ X! \) F
- * @param string $skip: U; T5 n" b/ q0 p$ Z+ }
- * @return array|int
3 I( U4 g* _. @ - */
* S) g7 m8 d Z: h% P z( u( | g - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
/ W) \2 Q! m; U' e- N - if (!empty($where)) {
/ V% T/ \0 r, m" a6 a: I/ A - $data = $this->database->$table->find($where);
+ U) N- g8 R: X2 j; m5 r - } else {
) N. [$ N6 ^" Y: v$ c$ X' K, ` - $data = $this->database->$table->find();
* H* L# j, s: W" j/ |% @ - }
; ~* Z C4 [$ f: ]! J/ I& F' p - if (!empty($sort)) {
8 ?6 @: K* E) \* I9 j8 ? - $data = $data->sort($sort);
% B$ U0 j7 Y! K- c* u - }+ Q$ u' m% m- ?+ ?; n8 R9 B: ^
- if (!empty($limit)) {: n+ L8 N" m+ e0 Y* F& J
- $data = $data->limit($limit);
& ]' @8 C& O. m' m5 @ - }4 w# `: u) {1 l
- if (!empty($skip)) {
, b. z: x5 o* i1 g" g& n - $data = $data->skip($skip);
! k$ F& r6 L& _8 C% T T! o - }
3 K4 s2 k/ ]: T( R$ ~1 V, X2 J - $newData = array();
4 O+ Y4 Q8 F7 G' C- u - while ($data->hasNext()) {
, x6 `1 ^! s4 d! v - $newData[] = $data->getNext();
$ B- F- ~9 ?# q0 X. W+ ^# | - }
2 r( m1 v9 T8 ], D* E - if (count($newData) == 0) {
8 L- u. v0 |' ?1 [. Y - return 0;
, b0 F4 I& p6 R ` - }
/ @. v0 J; q0 g7 x( u; r& A2 L$ l5 | - return $newData;
" x. G! `& ?4 Y5 d - }
' N3 ~7 B) ^ _; r+ c6 v - /**, P& \8 x0 y' x+ H
- * 查询指定一条数据6 }( f$ G' n7 c7 G& T) ~* C2 }
- * @param $table, o% y% X) X0 Y' F! |
- * @param array $where
9 M7 S4 Y A% h4 Z: o) h - * @return int9 g9 O# M8 X7 N# u+ R. F/ V# j
- */
, c ?1 Z7 n1 K/ _7 v, S0 ] - public function getOne($table, $where = array()) {
2 y; [; r J9 U5 f7 [ - if (!empty($where)) {8 q- Z& U% L; v7 B8 V
- $data = $this->database->$table->findOne($where);+ j0 n/ T. M/ K3 }% a) }/ G3 i
- } else {
$ Q: t& h8 t/ K/ C- w$ F, m - $data = $this->database->$table->findOne();. N T6 N' k9 z! [; r* C
- }' [3 a( y+ O- s4 }$ l+ V; R5 n
- return $data;+ |4 s# o- k) y% D" ]0 ~) H
- }
5 ~1 u0 o% O7 N4 P7 P0 K2 G - /**
& E1 C7 m. ~6 g2 Q - * 统计个数
! M E8 U4 T) \, d) s7 j5 ~; G - * @param $table
; K% ?3 Q% T- ^0 ^ z+ z - * @param array $where, K0 p' N$ t ~% B$ P3 Y
- * @return mixed# @! T1 E- F# c. K, v& J
- */0 H/ M4 L2 B) w
- public function getCount($table, $where = array()) {
6 ~% }% w9 \9 V9 e - if (!empty($where)) {
3 p+ Y& x; j$ W' d - $data = $this->database->$table->find($where)->count();6 n: z/ w7 S |7 [
- } else {2 E; [) ~; a7 R7 m) C
- $data = $this->database->$table->find()->count();% E- o! b2 X* }, n/ X+ P
- }9 G6 [. ^/ d. Y- _
- return $data;" }9 M9 s5 B9 E/ w0 G+ }
- }2 o4 y4 i; `8 Q2 k, {7 q# o
- /**
0 H5 e9 P) X4 [* s5 f y4 h - * 直接执行mongo命令
/ A2 T2 w0 J* ?) E - * @param $sql
- t: {, g$ j, w9 B: q3 u2 d% F - * @return array8 [) |) H. ]) a1 B! J' x8 G4 k
- */3 p! e1 \8 T O' M( ^
- public function toExcute($sql) {
* v8 T1 a k6 T3 X2 g - $result = $this->database->execute($sql);, S7 |4 I0 H) I# ~- ~8 ?4 Y
- return $result;
: ~+ ]( a/ U7 F: u# ] j - }
; f- {9 b5 U {' N - /**' s9 N& X0 N1 q9 x, F) F$ e
- * 分组统计个数5 J; o5 u) B, ~& }% i7 x0 {* \! S, L
- * @param $table
. H# x( s4 o+ C! p1 P - * @param $where3 h0 Y) Q. t: X
- * @param $field
4 v: ]! v+ A9 j# @5 ] - */
; `, _, D/ C* j5 [ - public function groupCount($table, $where, $field) {
# x6 E5 Q2 a5 Y2 g7 I% U- }$ x - $cond = array(8 s: B, j6 Q, Y, q* H1 f
- array(. R- S [* R% x) E0 v, M) k! W
- '$match' => $where,
- h$ v `+ l& y' \9 b0 ` - ),) V8 h' k7 f. \' G% D/ x- d9 d
- array(
( ?) C e) N7 v - '$group' => array(
3 W& [8 h) G; W - '_id' => '( C6 n+ f" J) {4 K- V! W9 B3 `" e; ~
9 e, H3 ^" A# Y/ } e+ }- . $field,
# _$ \1 A; H7 ]* n - 'count' => array('$sum' => 1),
( n, |4 B6 H. a - ),& n4 }1 ]+ N, x; \
- ),& ~3 M# L. r0 p* M, E- c) W
- array(# J% p2 D" T" M7 X' g, |0 _' U
- '$sort' => array("count" => -1),4 [; X$ }: F5 s" R+ j
- ),
2 o' d7 e5 C5 L* k1 ~! a# _ - );
) t* q) b; R k$ {- F - $this->database->$table->aggregate($cond);4 R* w3 K) ?0 |! {9 A, w8 |
- }! z* }$ }/ u5 I- m. r0 b
- /**
. |6 `* Y% r$ A1 [. s - * 删除数据
l, G' D, {; }8 l/ P4 k - * @param $table
8 \& {) e- X& u7 A& } - * @param $where
% L+ y1 P/ c V7 |. m) V - * @return array|bool& Z7 f4 ?% |! w; P v
- */. f; p( ?* o- e6 k- R2 D7 t; y
- public function toDelete($table, $where) {4 b0 A! a* M) \ @. J+ @
- $re = $this->database->$table->remove($where);
0 j2 N3 K4 {1 s' P, [/ k - return $re;) i, Q1 r0 l! b
- }1 G5 ^) i% |. N
- /**" t1 G3 p) k6 ]7 Y+ K
- * 插入数据# W( L7 `. t( S0 e+ @5 Y
- * @param $table
% o ?" g" j' _$ C- i - * @param $data
; X8 c* I8 t* k/ d1 W - * @return array|bool
1 ]: {+ n! C8 j ~ - */
2 K* X4 R: T! R% t. t2 |3 c4 l4 P - public function toInsert($table, $data) {
* V! }9 |7 n% }- j$ i - $re = $this->database->$table->insert($data);: g7 h) a/ ^% s: e
- return $re;/ ?7 T4 e# S4 l( Y' C
- }
# p! h9 u1 v; [/ A1 y - /**
- T8 M( D4 a7 M9 ` - * 更新数据
$ S, Y. f- I2 O; N" `. u" B - * @param $table" \+ o" b! k: _4 a9 [
- * @param $where
8 w. D# Y- C: v) p4 a - * @param $data0 \# v! ~8 g8 Z' ~( b1 V3 a
- * @return bool
+ n! g4 m9 ~! ~0 n' @ - */6 c! P: h8 ]8 ~. W/ k
- public function toUpdate($table, $where, $data) {
H! H+ v- @: G4 k( W( ~0 K - $re = $this->database->$table->update($where, array('$set' => $data));, K% C/ q, T- Q9 p' ]- G' o4 t4 B
- return $re;9 Q8 b/ |( U* g$ C* f5 @
- }
/ e; Q, P3 g4 U: ?1 Q) E - /**; c) B; {, h i) I; ]
- * 获取唯一数据
+ A7 N9 |. h/ h0 e0 ^ ~ - * @param $table0 I$ u& r9 V5 R. o% W& n4 a
- * @param $key G. N# |5 t1 w9 U# l+ J5 P
- * @return array
9 ^" l2 k( g" V" H" M- I" e3 r - */
2 a; i2 Z2 S6 N8 Q* e6 e - public function distinctData($table, $key, $query = array()) {
: ^: d8 P" I& w3 y1 [ - if (!empty($query)) {
/ h% m3 Q) f6 P* U2 t - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);0 D8 i5 a( Y' M
- } else {' O: ?4 u) M+ M8 r
- $where = array('distinct' => $table, 'key' => $key);! J* W. i+ U3 W4 \6 m
- }
: J( y, }$ Q5 z, u7 C N - $data = $this->database->command($where);
6 e& j, |' _% a# e$ d - return $data['values'];4 N1 s, k0 I6 L+ e3 K
- }
# A$ B4 k. @9 W, L' D - }3 v6 j8 F+ A# }/ u" [7 N
- ?>
复制代码
$ L+ D4 {7 z4 K) s& L: ^7 B9 G, F
/ o" k! G q( l, T |