|
本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
" ~! ~' y1 t$ @% Y8 e模式自由。4 G; @2 @, ^9 r7 G
支持动态查询。
9 ?5 B% W, \ V. X% T5 B支持完全索引,包含内部对象。
9 i$ e: k" J# [6 K1 ~3 [支持查询。$ @9 p8 T: o& p- w8 [$ |
支持复制和故障恢复。8 h# b$ y7 d8 m) V
使用高效的二进制数据存储,包括大型对象(如视频等)。
) N( {1 K: q6 V7 |1 n) G; C自动处理碎片,以支持云计算层次的扩展性7 X, M4 ^& c6 b& B: O
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
H, O; K7 B4 k! V( f文件存储格式为BSON(一种JSON的扩展)% d3 R, t7 L8 k6 `
可通过网络访问 所谓“面向集合”(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
) @1 _5 _( r9 _" u$ N# h# u - /**; X$ e- B a" Z) X5 q
- * PHP操作mongodb数据库操作类
# {: T/ @) `8 f: c1 a - */
7 C5 ]! B/ g6 `# D' P; {" B - class Database {* p& _+ e& f. D: k1 E. s# q) |
- protected $database = '';
: Z) L& D) Q7 |, O- p - protected $mo;
+ w. O) |* N- f I8 ~ - /**
& x- x. M/ g1 k+ \ - * 构造方法
, U* K* r3 p; F3 ]7 f - */$ z0 o: q8 c$ j4 ^0 a6 h
- public function __construct() {3 _. i' U. O: X# U; \3 {
- $server = DBSERVER;
" k! X/ T0 i2 f: A% P2 ^ - $user = DBUSER;1 z) q& V# f" @# p
- $password = DBPASS;
" [& _6 p! U, D- ^ - $port = DBPORT;2 H t: h. t$ X. \$ p
- $database = DBNAME;
/ o5 \7 F% y4 M2 S - $mongo = $this->getInstance($server, $user, $password, $port);
' T" V) U5 u% z) i - $this->database = $mongo->$database;' x- ~' F- Z4 @; u8 R8 i
- }
3 V( Y) r, y' [* ?% T% _ - /**+ S3 H3 |( y5 i& G8 m8 P
- * 数据库单例方法, C" ?2 Z5 V: i( _3 m/ p5 d
- * @param $server
7 M* X# v. C6 p! R$ i - * @param $user9 v" E. K( ^1 t$ f* i: |$ t
- * @param $password
& k! c$ I E+ s& C - * @param $port
7 @. a+ T1 x @- k- H - * @return Mongo
: j6 |4 Q: f w4 P2 q# M/ A S& z - */
" H6 \/ K( ~1 j4 ] - public function getInstance($server, $user, $password, $port) {
" a) G$ }$ Q" I1 E/ [( s& ` - if (isset($this->mo)) {
5 m3 ?4 g/ \# T/ a - return $this->mo;/ z) }! e* @3 g( d
- } else {9 N; @7 h3 x/ m o( d
- if (!empty($server)) {
0 `5 L1 F p% _7 L* Z, B - if (!empty($port)) {$ x$ ` Z( }" N# [! N! S
- if (!empty($user) && !empty($password)) {
. X( {, L& v5 G, L D } - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");: E0 H7 X# b0 g7 s" V$ N0 n5 p8 k
- } else {
" N% b8 |4 R: q0 R - $this->mo = new Mongo("mongodb://{$server}:{$port}");
H, o- q1 e% a: H! w$ ~ - }
, I4 C6 l0 j. [% d T% x- r3 y( q - } else {
_! H6 e2 G; h* f4 p3 ^ - $this->mo = new Mongo("mongodb://{$server}");
1 I0 ~$ n% v7 P; s' O+ R3 s v - }
( }# T1 H& H3 I" t8 l* y% v - } else {
, Y. x6 X5 R7 @$ h& y - $this->mo = new Mongo();
4 R5 U, i( ?3 V - }5 w4 H0 y! }7 z+ p5 p: g: ~" o
- return $this->mo;
3 b( ]+ {; I) X$ d! e - }
9 [% i; `0 X. s" h4 Y - }
$ Y8 E4 k# O% p0 O X' k+ B - /*** _3 D& y/ B- ~# w% M5 ~; }- q
- * 查询表中所有数据: Z4 { j2 c# ]( E* `7 v6 [! ]
- * @param $table
9 g0 P1 ^9 T' U1 {- B - * @param array $where; r6 \: X6 J0 m' f' y6 L9 {! x' l
- * @param array $sort+ j: y1 R5 K* K9 a$ f
- * @param string $limit
, A ^8 C+ y3 W - * @param string $skip) r/ _) J7 |% @; W4 ?
- * @return array|int
( A" o4 F u( S' J - */
' n- U3 ^/ [( Z. y - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
" D+ V2 Y# A4 v( s! f - if (!empty($where)) {: s0 d! L: q/ I8 c) N
- $data = $this->database->$table->find($where);
1 m5 i1 ^7 i& S$ ]' M9 b! g1 n - } else {
# D+ i! p, d* V3 M0 e$ z - $data = $this->database->$table->find();, l. u' B( n, U* }) ?4 a3 b' `
- }" `7 y. r1 U8 ?
- if (!empty($sort)) { p: `, B- B1 Q' j8 a
- $data = $data->sort($sort);: ]' m5 s( j$ c3 l S
- }
9 w. N! U& Q }- ~/ d3 R* v - if (!empty($limit)) {2 G$ O0 b% A8 C( k6 D
- $data = $data->limit($limit);
. W4 l8 [' y, ^8 q - }9 V% ]; k9 [' v0 W/ u j
- if (!empty($skip)) {
+ z* P- M! F( D - $data = $data->skip($skip);
V" Y6 h9 y4 h - }5 Q# X! C9 J! a0 q1 r
- $newData = array();) [$ m& `! v, M: [# |( G2 ?( F
- while ($data->hasNext()) {
) b" ]' [0 |4 `! ~1 r } - $newData[] = $data->getNext();
0 d+ M8 a# [& J3 d& `* n5 Y% z - }
, x) z$ l4 z* G2 L% b - if (count($newData) == 0) {3 e2 X( u% o% z- C
- return 0;: Z# m9 F: `. D% h+ Q
- }
' K9 t0 r- c8 r% n. ~ - return $newData;
9 x8 u0 g4 P/ ]) }* v9 D$ ? - }. b7 r9 S# ~8 I- |, A0 `
- /**
- d, k& p$ I. b+ U9 t8 [ - * 查询指定一条数据3 C a! }5 M# U: d3 G+ E
- * @param $table
$ ]7 N" t @) F4 }" L/ A - * @param array $where
( Q: p' M8 M! I9 g7 O5 L - * @return int; d9 T A' w: W2 I) H! q( R1 E
- */, e9 M- f9 Y6 p
- public function getOne($table, $where = array()) {
+ m+ w; E' C5 Y: k2 m( D8 v8 A - if (!empty($where)) {
8 @, ~. o Y+ F1 v' |4 }% { - $data = $this->database->$table->findOne($where);
5 r5 x; ?+ s* Q. V& m: I2 ? - } else {
: g4 z( p9 G$ b( v - $data = $this->database->$table->findOne();
7 t$ E& i& l7 t6 A9 ?6 d; b& |, i - }1 ?9 x, L8 d3 u7 R: r4 j
- return $data;
3 }: R( _2 W3 j! U& G# v - }
* W# R4 D) s* w- A4 F8 c4 U/ Q! B - /**
- x. }4 z! U1 B8 D - * 统计个数1 `% p8 I, Y7 t
- * @param $table! s7 ]$ l; I7 |7 o% L" J
- * @param array $where
# Y& \. f$ N9 | @ - * @return mixed* E0 a% r5 d; I' X. N* ], X
- */: i- G' m- }8 U. W
- public function getCount($table, $where = array()) {* t. x2 }+ G* E& ]' [4 |- |
- if (!empty($where)) {" t1 v+ y' d# V) @1 r& u. i
- $data = $this->database->$table->find($where)->count();
$ K: P5 E, v9 p# e; x( t% c% I - } else {
1 E0 _9 D- A+ f* |$ x$ } - $data = $this->database->$table->find()->count();
, W) Z# d. g; [ - }
% P5 A& B; g8 _ - return $data;) v) f4 a: R: d; m$ p/ U
- }
) v( P5 A6 s3 Y& z* W, w' Q; O; Z- H* f - /**# G& |/ }% H6 W
- * 直接执行mongo命令
! ^& P" e0 U5 X8 o - * @param $sql
, I S( P+ e. W( b: B3 u. t - * @return array
& z* D. T9 ]6 t0 t2 k7 A2 ~. d - */+ T8 R: E m8 `" C
- public function toExcute($sql) {; a9 G$ A9 ~ e0 \
- $result = $this->database->execute($sql);$ F1 a) g; B) b$ ^% d' \
- return $result;
8 n' S2 `$ [7 u. S/ { - }6 N, [0 L7 y* ~! \) C) K
- /** x& p3 s9 B, w( b% P& B) `8 W
- * 分组统计个数
3 A, {, b( c. [& a/ Y) [6 J0 N - * @param $table
% w: F8 j& k, Q) [- e. k, e - * @param $where
; ?" {1 n& S2 v, `8 D - * @param $field* t0 s# a; U6 Q U h7 J1 ^
- */9 Q e, {1 c) U2 N+ @5 j
- public function groupCount($table, $where, $field) {
/ N& P2 ]. W5 | |1 e- b" T5 x - $cond = array(
8 o' D( j0 \! {; j( z - array(
# \; O" P' ^- b! i- f+ H/ {1 H - '$match' => $where,5 L4 [6 ?6 k: f! M2 L
- ),
* a& p* t' y7 u# j - array(
, b' c9 G/ o" t - '$group' => array(
& e8 p9 |- r6 f2 v: ^ \7 E - '_id' => '! |; c B) M c E \: N
( g0 I: k( f* w- _* V- . $field,2 x/ Z8 o2 Q8 W/ r; a, e
- 'count' => array('$sum' => 1),8 N H% W" Q' K- Z
- ),
# C1 b: k! a; K5 D0 p - ),! x$ V7 ]0 ?! }' N0 d) p0 C! ?/ B
- array(
b+ Q$ @: C5 @& I$ v$ H! F - '$sort' => array("count" => -1),
7 d7 {5 `. u; U! h$ ^ - ),: \: a# @$ y2 I+ ]: D5 z' E& i0 `
- );# I" b3 j% Q! E
- $this->database->$table->aggregate($cond);
/ q$ k: [8 q; e9 U( R - }
6 g2 [4 J( U) M! I, p" }( j2 g( P$ J - /**
6 Q4 E# j3 L/ r3 X - * 删除数据
8 X0 b) b/ i; Q/ o - * @param $table
, S" S4 f/ p; O4 E+ ~7 {8 w - * @param $where2 N% o, K+ J- p- b! B
- * @return array|bool1 @# U6 @8 E( J1 k
- */& O$ m3 {2 E5 E$ C
- public function toDelete($table, $where) {+ e! X8 W- l/ _# b3 o9 r5 G
- $re = $this->database->$table->remove($where);3 u, j$ Q( x0 W) d* a; Y. I0 u% E
- return $re;1 s) P# i) C* d8 l% j7 u
- }. W% R& A0 I+ W% A; k
- /**
8 { E$ N' B( T8 h" p - * 插入数据: `# w1 g1 F3 h' _' X! }' A, s+ I
- * @param $table' i, n! Y, |4 p* \/ w( }. W
- * @param $data% ^; e2 D/ m# r! e1 U4 I! o# y/ |* i
- * @return array|bool
8 N! V; g( o4 X7 W7 U - */0 `, @4 |7 t3 P7 b5 [
- public function toInsert($table, $data) {4 g- _% Z8 Z; P* h9 [% G
- $re = $this->database->$table->insert($data);
7 t5 P0 q0 D6 `6 v. H" `% \. s* N. ?+ P - return $re;
{2 M4 B( u3 q1 ?7 L - }
% Z3 R( v8 K2 @6 P) D8 G - /**
; V- @! H) H4 M' a$ x" n0 t - * 更新数据/ R2 C: Y6 m2 Q- }3 l
- * @param $table
- G1 y$ J2 j: s4 g - * @param $where
2 C! }- Y% ^# A% o - * @param $data4 J6 m6 p% U) M f7 r
- * @return bool/ n! b; y: G0 U
- */
/ r6 g6 U) d; A C4 E1 r7 s - public function toUpdate($table, $where, $data) {
" p" {2 g( _) m% y8 k3 e, x& v% } - $re = $this->database->$table->update($where, array('$set' => $data));
Q5 Y0 v! ^9 U+ b - return $re;
- V6 t0 _2 Y' X - }6 K* z$ r& N& N/ u
- /**7 G& D& c M8 M( c# M
- * 获取唯一数据
* R5 w0 A) F- O& c0 b - * @param $table0 K! @4 p/ {; B9 `7 j, y
- * @param $key# X+ g# n& b9 e+ o
- * @return array' z7 C3 D, ]- Y* ?2 i' `
- */$ `6 r5 \: \: l
- public function distinctData($table, $key, $query = array()) {% o( i" z5 ]0 ~( F3 ^7 n/ {' L
- if (!empty($query)) {
( i+ A9 J) D A' z. C, w" n# B - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);, N! O( q2 v! x ^5 c0 a
- } else {' }. {! u- {4 t% K
- $where = array('distinct' => $table, 'key' => $key);
3 D$ X0 c5 ~1 _1 f7 q7 t; x - }$ J. c' S* c1 P' O
- $data = $this->database->command($where);: b6 s( f4 S7 \8 }# a% c8 n6 W
- return $data['values'];
$ \ D" z* T. n2 _" M' ` - }$ y9 D8 {: b4 u" J5 \: Q
- }! F" `- e* o5 E) Z2 l' n
- ?>
复制代码
! U, ?. c: N% H8 ?- ?5 _4 n! a1 b# t f& C d
|