本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。# B6 l8 B: U( k! C6 l
模式自由。# X; Z/ X2 o' }
支持动态查询。
/ j- z) k9 e8 T& f4 ?( o! h支持完全索引,包含内部对象。& X$ Y0 {' v6 D! m
支持查询。
( F8 K# C( x3 x, g. I支持复制和故障恢复。. G& S9 }: ]# _& g
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 w( }2 W* b+ {) m4 v/ S自动处理碎片,以支持云计算层次的扩展性
`1 Y3 z* P3 U2 H支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
, V: N3 M7 e! ? X, z文件存储格式为BSON(一种JSON的扩展)3 f8 _/ i) j3 W; s+ m7 z" P
可通过网络访问 所谓“面向集合”(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数据库的数据库操作类源码如下,仅供参考。 - <?php2 E6 Y6 J$ P( l; |
- /**
9 d! i) m: k2 Y" x3 f - * PHP操作mongodb数据库操作类
5 T4 I8 }6 V: F - */
! I9 K3 A- I) [# }8 g _ - class Database {
; t- _% W2 e# V/ P* g6 ^' m - protected $database = '';
6 a1 I) F8 `0 ] R3 r) x6 w, b - protected $mo;
6 v4 W" }" b: B% b& t7 X - /**5 p# R3 u1 k: ]; A4 F1 @
- * 构造方法: w( H+ c0 w6 |4 y" ^0 r
- */% `' v- `) q2 f) W
- public function __construct() {. ? ?- Z* Q$ Y+ }7 _, z0 }5 v: B
- $server = DBSERVER;
+ ]1 J5 I) G3 r0 X - $user = DBUSER;
6 k7 b' f0 s3 _+ K H" v6 h% X - $password = DBPASS;" L. c/ |( v1 p3 O- ]
- $port = DBPORT;8 r( r5 Q. Q7 L4 L
- $database = DBNAME;
6 Q3 i! ]+ H/ w8 G% q9 f - $mongo = $this->getInstance($server, $user, $password, $port);3 n! e. Q s& `1 H: `; Q
- $this->database = $mongo->$database;
8 [! f( m2 u3 F5 H* H - }
: N! w2 x0 M) j2 R9 B - /**% D$ H. \% g2 ]( v
- * 数据库单例方法
, {+ ]- d7 R. c, V+ v2 _3 ~ - * @param $server- Z4 w6 {6 P' _, @+ D; c5 {: d
- * @param $user
' t. |3 {3 s3 q* V/ ` - * @param $password- Q8 p2 s' [- T) ^& } C; C
- * @param $port8 F" b! @$ E+ r. y& R1 N
- * @return Mongo# v% |9 h+ P) {+ W# c3 ^0 S
- */6 V. e: ^& y1 T; o
- public function getInstance($server, $user, $password, $port) {
' j: f+ J8 B. H/ K- v - if (isset($this->mo)) {/ a% _) j& ]. c' X% z& @
- return $this->mo;
. ]+ y: E' } A - } else {
1 X a, K, P( p( R - if (!empty($server)) {( Y. i7 q1 w: w
- if (!empty($port)) { `% b: J( A, O8 [: m- p
- if (!empty($user) && !empty($password)) {
5 w h' v& J ]2 R. v; a7 o, O: M0 [$ J - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
+ y: \: T. \' E* D - } else {
! s9 @1 G( p' W+ i2 c - $this->mo = new Mongo("mongodb://{$server}:{$port}");
7 q: N3 z8 i9 v4 d4 @ | - }
% i" q+ P7 O' S# t - } else {
u# Z* K4 Z& Y$ c - $this->mo = new Mongo("mongodb://{$server}");) o5 e" P, j- q! d: ] X: S; i- n0 i
- }
5 U( |6 U% F* ^- s# c3 W, S/ F/ \ - } else {
* J. ~ W R8 }6 s# ? - $this->mo = new Mongo();6 \! a' g! l" y& A
- }$ Q P! S0 S: ^8 G
- return $this->mo;- R5 b/ e1 K2 U. y' @
- }
! D j6 T* Q. G Z - }
$ B: M ]3 V. d/ c9 ], B% }* K) m# w1 ]# h - /*** U, M) e9 R1 l8 {6 w4 l! S
- * 查询表中所有数据; N# T$ Y# }6 V6 V7 {& K
- * @param $table
% G1 d( h6 D2 J9 N5 m" E0 v - * @param array $where
8 O3 R: t0 O, E4 `! j# o - * @param array $sort0 _* p1 v* M$ [7 J1 {9 u
- * @param string $limit
6 `* D) C" m) \+ b - * @param string $skip
* i8 z+ B8 \, w1 } o; x - * @return array|int
6 Z4 T+ W- v3 g+ i& M - */& y1 c+ t" H: k$ R# r) @- Z' b) f
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
, M! u/ Y0 ?9 T% g g( q6 O - if (!empty($where)) {+ F! X) v0 @ c- ?. q" ~* ?
- $data = $this->database->$table->find($where);7 N" R- o: j- m
- } else {% ]3 C" P" ?0 F
- $data = $this->database->$table->find();
6 t8 S2 [% F- ?% a" { - }) L& f1 B- \! S0 Z
- if (!empty($sort)) {
3 l3 z3 J3 T/ D% h# E! ^' @ - $data = $data->sort($sort);
( @9 u* v2 I( x7 @: G9 a - }$ i+ E, x7 j% ~# T' k
- if (!empty($limit)) {
) ?- h3 e3 J$ t: o5 }2 t - $data = $data->limit($limit);
( q9 Y ^5 P! h! p4 H - }
/ b: b4 d1 L2 O4 G+ G! F - if (!empty($skip)) {- t' j' o, V+ C; `; S8 X) f( h
- $data = $data->skip($skip);
1 k& |; K$ i+ \( S3 F- x8 S2 E - }2 n; \: m6 _3 }
- $newData = array();
' N- U: q2 V2 }. |# n3 @ - while ($data->hasNext()) {
! y; q7 J, {7 V+ S' k9 M' p1 b/ c' J - $newData[] = $data->getNext();. N8 q d5 {4 ^( l
- }' Z) H2 p- ~- ~7 _( o3 q8 H
- if (count($newData) == 0) {
* l+ I6 ~2 n& ?; L* J% d - return 0;
; K9 Q. V+ L+ j- V( p7 S8 j - }$ ^ w ?0 J; s# I1 B, P' [
- return $newData;' \& A: ]" }% }
- }
- }* m8 O9 H$ f7 ^ - /**
7 I8 ]- D3 L: o0 G/ K% { - * 查询指定一条数据4 S+ O9 f; Y5 t9 M! i) `
- * @param $table
9 `) @& a* l4 R - * @param array $where
, O% _- ^7 D, z" }- @! |/ P, A. { - * @return int
* ~2 q, b! D5 V6 } - */
2 ~, `% k0 ], Q% }5 [: c; k# ~ - public function getOne($table, $where = array()) {5 A. N/ q m5 _' G) ^0 z5 x0 v
- if (!empty($where)) {$ }% \+ r5 R0 y# v
- $data = $this->database->$table->findOne($where);
; C) m% w8 h3 ^$ S. P- f- \, J I0 Z - } else {- e/ q4 Y5 q+ G+ X
- $data = $this->database->$table->findOne();
* _* ]. H* w/ j, ^2 [ - }
+ t/ @2 t3 Y- p6 Z( L - return $data;
6 w# x/ P D& g - }/ Z! u" ?6 v( [8 T+ P! |) |7 Q
- /**
" ]9 I$ c: h6 A' n4 b+ U# s - * 统计个数4 x) F6 v0 g Q5 J# V3 H
- * @param $table
; W" d3 k5 Z& y5 ] - * @param array $where7 U' F, O c, U( ]
- * @return mixed
2 S) u: z& y- u3 h$ i - */
: ]& j; W' t& s# m/ z0 }4 F) D - public function getCount($table, $where = array()) {
( |. b# T0 P" |* }- }1 ~ - if (!empty($where)) {# y- ]$ @- q: r9 i
- $data = $this->database->$table->find($where)->count();- }9 w/ q, E2 a& Q; u* o
- } else {! V1 }) A: u6 L
- $data = $this->database->$table->find()->count();: s' l5 j. c* @: m( g `0 W l
- }
, M% ?' W9 F2 j$ A4 V2 W3 y - return $data;4 ~1 Q; U; l/ P7 w" e- y1 K
- }
9 s$ O: k' ?3 y, a& z. Z - /**% C! b* ?. a3 T0 V0 s% Q5 y
- * 直接执行mongo命令
* o0 v0 F# N0 ~ F - * @param $sql7 O, g6 B; v0 A# ` _
- * @return array
% B2 c* p f F1 ~( `. t5 o - */) |4 f8 m2 ~1 B- {7 N) i. w
- public function toExcute($sql) {* U ~0 O& K) A9 Q
- $result = $this->database->execute($sql);/ w% q* A( ^6 y5 J B, V3 j
- return $result;7 Z+ n: B, B9 ^4 r
- }/ q l, g1 i1 D! s+ ~8 A
- /**
% [% J6 ] N# Q% W+ ] - * 分组统计个数
X" X) a; ^" h9 m4 s - * @param $table+ I& b2 a0 F& j2 _# X7 {# F
- * @param $where
# b# W8 n! i; f5 d. d - * @param $field
2 `2 X! D) l3 N K/ ?4 }4 z& d - */0 p0 }' `* T" M% ~9 Z3 [& `0 _
- public function groupCount($table, $where, $field) {6 G& L3 ?# G* L! n+ C& H6 [2 r8 i
- $cond = array(
8 d3 t3 S- D3 V# B) u( _% a$ W* v - array(
4 g" y" d+ S. [ Q - '$match' => $where," V: I7 L$ W- V, q
- ),$ i# S3 l% {9 d: P& D. F4 t) \
- array(& C% h8 w) N* ?$ F: }
- '$group' => array(% ~/ I, E0 e; Q1 U! I- O
- '_id' => ', d9 m: _+ K$ L9 @( Y. \1 n% z9 H& H
- 3 _( o' S" E- g4 F5 {+ @
- . $field,% U5 ]& [1 ^" c0 K0 W4 m6 x- V
- 'count' => array('$sum' => 1),
* I* r3 p" U2 h/ i6 @ - ),3 i- ?/ S" Q* S3 y. R& }9 v8 _
- ),. [' b9 D3 e6 q, `
- array(
& n4 E6 Z7 D* T2 x4 ~ - '$sort' => array("count" => -1),
1 [7 ` U& v3 _ - ),
9 C$ H& A6 `1 N% I% S: v2 @8 X A( } - );
2 v* z F4 K3 h9 x2 m! L2 H - $this->database->$table->aggregate($cond);) N7 @0 j, B' K
- }
2 n& ^4 n; _9 t& ~# o- n - /**- y: b# y$ }% d( x4 r
- * 删除数据2 v% Y3 C) ~" D4 E3 s5 c. j
- * @param $table
6 O& f% R. O0 v+ p4 z: a* O - * @param $where" k& h: @4 F" s: u) ~7 t4 s
- * @return array|bool
% l. p6 I F4 C( h$ O0 ~0 B* [ - */
8 j, N! ^' _. A" @1 W7 g - public function toDelete($table, $where) {
: d4 l' N! P& i - $re = $this->database->$table->remove($where);2 q6 d0 v3 U7 k! [4 E
- return $re;0 \+ M" |& S: y) Z5 D9 J
- }3 @/ p9 ~$ P1 ]$ @
- /**) b7 m. c" g. o
- * 插入数据
+ C3 }2 |3 ]! m: h* S - * @param $table
) D A* v" r& z$ N - * @param $data1 i! |# o) I, q( y6 q7 W( Z" u
- * @return array|bool
! @) P8 R$ B% M3 B' |" J2 s - */
, x- @. W/ t8 u+ i8 B) i - public function toInsert($table, $data) {
9 M) L& J+ @, T" C n - $re = $this->database->$table->insert($data);/ h0 H Q$ R' j$ U
- return $re;
4 q3 F2 S! u. c) G) i" {9 O: B - }( H5 w' Q) L, e% V
- /**! U6 T, F2 T; }5 w) w# D; b( B
- * 更新数据/ a0 [4 a1 O' h; D
- * @param $table
* z7 W- w3 O3 Z+ q( q - * @param $where
& @/ d& ~( ~3 P& j2 H; A: h - * @param $data& p+ u7 N" {2 e2 f. q5 r
- * @return bool9 d( M+ j7 S. l' h- g! ?6 R
- */
4 Y9 B F% D6 p4 M! R, D+ a7 o - public function toUpdate($table, $where, $data) {
4 W% B0 ~ t- E$ ?7 d8 C - $re = $this->database->$table->update($where, array('$set' => $data));
+ G- D/ x, L: e - return $re;# i( A1 f' A! } D5 h
- }
1 K3 O% y- S" v4 _8 V u4 B Q$ o$ D6 l - /**
" t+ C4 O$ {+ l. k5 ` - * 获取唯一数据
8 j: d J- z' @" V2 X7 t% g - * @param $table# Z, T( d$ y' D9 X
- * @param $key0 D; }% Q' ~ A) ]' q0 v
- * @return array
0 |; e4 M' X' i - */
& T5 S2 k- K/ {, i: U! ~7 \ - public function distinctData($table, $key, $query = array()) {$ E( u9 p/ o* ~5 n0 f( n) W5 ^3 d
- if (!empty($query)) {
2 D t, \. m& S, t2 W y - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 H- ^$ E. P9 n5 H
- } else {
8 Y6 B; S" h8 c8 j - $where = array('distinct' => $table, 'key' => $key);
& }# U1 G" n' K |! _( y8 | - }2 k3 K" G* W% ]+ T* Q. j! Q- \
- $data = $this->database->command($where);
n4 a, d; n- U - return $data['values'];
& g0 A4 o( l% Y' O4 b4 } - }! P$ e0 N- }2 {6 g5 ]
- }
6 U' Z d3 m( y ~4 ~ - ?>
复制代码 @; p: O: M, d5 \6 H
- K9 j, g9 `* y" Q3 V" h7 Y4 q
|