|
本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。. \% [, }! G) I$ n
模式自由。
9 d8 f# y$ l" N# F( Q+ }1 ?支持动态查询。% i/ x; k1 J4 D4 G' T# ~9 r
支持完全索引,包含内部对象。
; i+ {3 y7 w' b4 ^) {: }& U支持查询。
. L/ c8 q+ X* J+ M支持复制和故障恢复。7 g8 U' l: ^5 {8 J# h/ w, s
使用高效的二进制数据存储,包括大型对象(如视频等)。
B. F1 C, f! R自动处理碎片,以支持云计算层次的扩展性# f8 r9 U0 z. u2 v# D
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
& E4 t2 s, d4 _ ]7 D B文件存储格式为BSON(一种JSON的扩展)( q ^/ B4 w' U1 d4 t; N
可通过网络访问 所谓“面向集合”(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 b* E$ C* u; n: l0 F) q - /**
. C% g" q5 t5 ~6 R! f - * PHP操作mongodb数据库操作类8 G+ l4 L# e# h& ~& N
- */
( s# }) w. h5 S5 K2 G - class Database {0 O% Z0 F- H. m: j) u- {
- protected $database = '';9 \4 I4 M$ D; s/ x0 Y. M5 i
- protected $mo;
$ U9 K& Q# K) e9 a - /**
; a7 {5 v: r9 u - * 构造方法5 ?6 e4 k( I: \# b- p
- */, G) a1 E3 P" a( l
- public function __construct() {8 ]2 ^$ C8 {0 x* o$ R3 v
- $server = DBSERVER;
' J2 Z' [) v+ ~ { N1 y1 ], R - $user = DBUSER;
6 X+ d2 l2 ~5 _# x! S" ^8 u - $password = DBPASS;
3 p8 K$ j, N5 y) g - $port = DBPORT;! I" H: ?5 B( j/ p( \
- $database = DBNAME;/ G3 a+ R* X! n$ T; i4 S' k
- $mongo = $this->getInstance($server, $user, $password, $port);
( L/ z. U" w" G& n ]* I - $this->database = $mongo->$database;
- c$ n: p# D) S o6 y9 N, r - }; c' Z. z1 r3 K
- /**. ?- K: ^4 B8 ^$ z6 q N
- * 数据库单例方法; w) L, W# E8 ]: V- i' B' e; a
- * @param $server
V3 w0 e, j' j! W - * @param $user8 e6 |3 k1 W& l7 T1 d
- * @param $password. O* s2 i* _ l2 y1 f* h! E) u
- * @param $port9 e! c0 L; {; r+ x) S
- * @return Mongo
3 n! [. t3 b+ |, W5 ?/ h - */& `* P9 n. u; h% j+ o% S
- public function getInstance($server, $user, $password, $port) {
7 j0 V# n; q* o" g5 r' d - if (isset($this->mo)) {: Y6 f% s& y/ ?: Q
- return $this->mo;
5 h9 S p& [1 J - } else {
! l6 Q$ U/ f8 V. F - if (!empty($server)) {
* I" C" B8 p: D - if (!empty($port)) {! G% X& e9 f+ J6 I: l) x, h
- if (!empty($user) && !empty($password)) {
- q- ` C; d/ |9 I. Y4 a - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, r% O9 c: _# j
- } else {
. i9 ~: c o8 B! @- G) K7 [. L p' \ - $this->mo = new Mongo("mongodb://{$server}:{$port}");
) [/ R6 X* k! { _( {% {( E2 ~ - }
% h2 F. P" x+ G) I: p - } else {* `5 ]& o" ?, R/ B) ~& ?4 [
- $this->mo = new Mongo("mongodb://{$server}");
) U. f C% K- z, d+ t4 V K e5 a& L - }/ T; C2 [& x% D
- } else {
, E( ] F6 ^- U& i$ h& v. } - $this->mo = new Mongo();/ `( e' H; |3 F. T
- }% [3 l; y9 ]' R, a# W
- return $this->mo;2 n) h0 u7 b6 u2 ~& i% Y8 l' h
- }* B6 i/ o- w* {5 c
- }
" x; }# V- g+ f" Z- M - /**$ O+ a5 M8 ~( e3 X# f$ W
- * 查询表中所有数据
: @+ ~0 R) ~* y9 N3 C - * @param $table
) U$ o7 s8 G$ D - * @param array $where
) ^# c7 s: g; {: I* R* ?. Q - * @param array $sort/ Z! }9 Z" d- @
- * @param string $limit" m% R# j7 | ]; h: p: O) {' F1 X
- * @param string $skip0 U _. k. Z3 Q
- * @return array|int
9 i) e& i' p& J4 x4 u - */- a* G) l: c2 C% Y
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {0 [3 q. H3 t# }! f G& J
- if (!empty($where)) {+ \- n! U6 ] p- \+ [( P
- $data = $this->database->$table->find($where);
3 d; G- ?+ G2 @, s+ M% ^' g - } else {
- x1 o) d! o4 z - $data = $this->database->$table->find();
; T7 r! f6 [! g" M0 t - }
: V/ \' T% K, Q5 N - if (!empty($sort)) {. v# |# h- I% [6 W
- $data = $data->sort($sort);
/ K- m' a% w2 \* q( e - }
; V5 j+ ]2 P+ n: A0 D - if (!empty($limit)) {
6 e1 b* j* l$ |) a' m" E - $data = $data->limit($limit);
8 r2 ]+ g: V3 m# N% w$ B - }% b+ Z- s' \( |
- if (!empty($skip)) {
k: Z' J( I. _$ S - $data = $data->skip($skip);, @, }6 }# ~' w0 ~7 c0 I; T
- }3 S5 n# a4 ]6 {
- $newData = array();
& v$ p! }) p4 v: K$ { - while ($data->hasNext()) {: s+ N1 B( W8 m; j% }# T% L: m
- $newData[] = $data->getNext();
$ b( K9 F. J2 `# N - }
, \$ g$ l0 n. W9 { - if (count($newData) == 0) {8 P# J* c' o2 N# O2 t* l
- return 0;& z& F$ N5 l$ J8 S+ P5 ]' [
- }
8 k4 c$ [/ {* q7 h7 j - return $newData;: O3 d& a6 B8 m" ?
- }
& _# B. z* D; S' n! x - /**
3 h9 y0 H5 G+ |/ T+ i2 J$ a1 P1 ]& X - * 查询指定一条数据
F9 C( k) W7 C' b3 I - * @param $table& `0 _5 h' j/ U4 h
- * @param array $where
; q6 P! V; l4 |8 B - * @return int
- t/ }4 X# k6 |0 p! o8 ^; L! o7 ]5 s - */
7 r3 L4 \; L' ~* Q/ Y; @- | - public function getOne($table, $where = array()) {
3 n) L) w) c$ r: O. a; j/ P - if (!empty($where)) {/ Q# z. u3 l! g9 d+ x) N
- $data = $this->database->$table->findOne($where);7 {& V$ k8 i8 D3 g
- } else {
, m% E/ b6 z# p - $data = $this->database->$table->findOne(); O7 @* t+ I1 Q/ p+ n2 j% p
- } H1 ^! x# Y3 f6 U! H$ b- o1 M
- return $data; p- c& G/ g# H0 v
- }
7 M) i# c! D2 {6 u' H - /**
& t' |+ o! w/ ~- C" x( m1 p - * 统计个数: W: q9 W( |8 a$ P% Z) I9 _
- * @param $table5 f: e& r# u( w; G: }4 N
- * @param array $where) ^' o1 d0 a+ Q# N; [4 v6 R
- * @return mixed
" y* ]" @4 p5 m+ R; B6 o7 N - */4 [; T) c8 H7 N6 F- g& R
- public function getCount($table, $where = array()) {( _" H! U5 a! d* t/ R
- if (!empty($where)) {
5 x* T& o3 d+ c# e% D - $data = $this->database->$table->find($where)->count();/ b! D7 E2 z7 Q7 u/ K3 Y) I- ~: o
- } else {0 P1 B7 b9 @; | X' c# R# O
- $data = $this->database->$table->find()->count();) W( U" p4 s% I# S/ l( y" S: W: B9 T
- }
; K7 `" ^1 L4 [+ {$ h5 ]: E: | - return $data;
1 x- }" c6 r& b5 }% S - }
. J" O) }0 w; v; X, z0 g - /**+ r+ M/ W {9 X: Y/ d! W
- * 直接执行mongo命令
# W" k/ s. n% F; K, j7 | - * @param $sql/ s2 N# J- {( O' B+ h1 H4 y
- * @return array K0 \/ h5 e. j" p s, N
- */% ^3 P. F* r! w7 L& j
- public function toExcute($sql) {7 d" J0 x5 a5 g3 T) i q) e- T7 ^
- $result = $this->database->execute($sql);9 b, H: t8 ^) L' @2 f4 r# ^3 C
- return $result;- z) X5 f9 E% L K, E; r P
- }, h5 p/ P& x, C) M: P" W
- /**5 R3 {$ u* i( y- q0 E/ j
- * 分组统计个数
2 u `+ V6 y0 p. e7 J3 h' y2 s - * @param $table
5 j' f {+ t7 x2 I5 D/ H) Y6 X' t - * @param $where8 o: F5 Q/ Z. i I5 J5 d
- * @param $field5 D) e0 i0 x3 y; g2 u5 m
- */" c' z4 ~3 p$ Q/ r+ M7 X( r$ E
- public function groupCount($table, $where, $field) {
3 p8 e @0 R) \3 M! Z8 [ - $cond = array(" b+ \1 j3 E: x' @
- array(3 _9 V" ]1 \& C7 R$ |1 B' i
- '$match' => $where,! y; X* M- G" x2 m4 {8 g
- ),/ y4 ~, P, f8 R c
- array(. \0 S* o- D7 r- O+ Z7 ~
- '$group' => array(
8 T2 E& i) u- Q# U# ]- D - '_id' => ' s+ l v r: Y* C, ?
- M3 t) U1 x; I1 E+ N n: @' m" R/ a- . $field,+ X! Q7 C- _$ H' q) A# g
- 'count' => array('$sum' => 1),( }; e/ O- [6 n0 D# o e
- ),
. s0 M/ Y- p: Y# { - ),; G. ~1 i5 x6 {8 j, \2 L
- array(
9 W3 L5 [/ F z$ [! `5 j# ~+ y - '$sort' => array("count" => -1),# m$ N0 x* w" e6 P. W0 ]8 [
- ),+ w2 F- B9 M7 ?- y% N% r
- );
6 i9 i, \$ C" E3 F4 j - $this->database->$table->aggregate($cond);& ]( A+ ~9 Y5 }1 w; X' J
- }$ q& p9 n& X4 B5 L& Z2 q
- /**
$ W4 W8 c) l& o - * 删除数据9 B$ Q( D! k8 e k4 _( m, z
- * @param $table
! ^5 J* [$ Q* Y9 o) B, _9 \/ e - * @param $where) m2 Z' q9 C5 t: @. t
- * @return array|bool$ _1 C: Z; k) g9 C
- */
" x! |! D$ D9 |* {8 d - public function toDelete($table, $where) {8 m0 ]( _+ }+ q
- $re = $this->database->$table->remove($where);
, W) A& o+ D) x' N5 @ - return $re;' B ?6 N: d4 X1 l7 w
- }
, y1 D. P; F4 s" k1 h+ n% E - /**4 J" l9 G, Q) {2 ]" w7 K
- * 插入数据8 S- _' g# f7 p# Q! J" A
- * @param $table
& G$ R; Q: M2 h4 o3 Y# N - * @param $data
# }9 ]! [/ |$ A - * @return array|bool b' `8 y+ }1 A7 @! C
- */
- X) ?4 n r7 d& q% ~5 h8 D2 I - public function toInsert($table, $data) {
5 l! ^2 c. @/ Q9 u - $re = $this->database->$table->insert($data);1 ~1 |: T5 R1 L7 B) E# O3 v0 a
- return $re;
! d& z t. a+ G( S. P3 R+ x - }
2 _7 f5 Y) q( x* O2 f - /**" @# z: o, H; A' {, X, R
- * 更新数据
2 z: Y) f8 M4 [6 G6 P1 Z0 L - * @param $table/ O: s) s+ D1 z k
- * @param $where, a8 r: e3 |2 H. a) T
- * @param $data* b+ u3 L! t; P g+ r; r1 j
- * @return bool
: h7 B2 u2 |+ y6 `% h. A4 } - */ ~9 e0 j5 F! W- E3 D: D4 G
- public function toUpdate($table, $where, $data) {
3 K4 c: l; [: U: L! B1 N# j5 |2 L5 E - $re = $this->database->$table->update($where, array('$set' => $data));
; {1 j P5 D! E: O - return $re;4 V, ~# a& X$ H& W$ Z) g
- }
' T0 G; ]# b* {3 @; u( o - /**
* w* d) z9 ^9 m9 O: v) w# T - * 获取唯一数据
3 n2 U' G4 f! d - * @param $table* u/ d7 }1 k; q
- * @param $key
) B7 m9 N' J. c; z/ o# K& r' ? - * @return array
/ ]1 A" f! Y* O6 c9 x! v - */
8 @8 _7 k$ d- ]& @ - public function distinctData($table, $key, $query = array()) {
' `8 I' F: z Q$ p* m1 i - if (!empty($query)) {. _" B$ u" j& k+ i+ E( V
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);: g. }8 x2 r6 j& E) w1 t5 l
- } else {
+ R t2 V' _! r% Q5 [* y - $where = array('distinct' => $table, 'key' => $key);
2 a+ ?. R. T7 _" ^. j" f - }
& p/ e4 D2 x4 `3 o, g - $data = $this->database->command($where);* _0 k6 p4 V7 n% B
- return $data['values'];7 \% ?/ m& t2 |. i
- }' n# @2 ]! p$ Y6 B
- }! d7 n; z. S# s! d3 l* z+ h) C9 j
- ?>
复制代码 ; E( p7 \! O8 [ _) n3 J
3 ?6 { Y- Q. l2 c9 v
|