本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
' X$ U. o' a- n模式自由。& D$ R& h5 b9 O/ U. _
支持动态查询。& T" t& V+ C* U2 g# V
支持完全索引,包含内部对象。1 g: S/ w0 B2 E! y8 ^0 C6 i
支持查询。1 v6 A5 W/ g. p9 I. i
支持复制和故障恢复。
" X, S4 p0 b( {+ Q# N# H使用高效的二进制数据存储,包括大型对象(如视频等)。
; C/ L5 |2 k/ _; `自动处理碎片,以支持云计算层次的扩展性8 i" M5 C0 e+ ~2 N/ \
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。7 X/ d$ f$ B2 u8 r. @( u
文件存储格式为BSON(一种JSON的扩展)
8 s% a/ N/ g1 |: Z) v可通过网络访问 所谓“面向集合”(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
9 f) ]+ i4 e, N - /**
1 v4 S" k( \ l. P% D - * PHP操作mongodb数据库操作类$ K. E/ x7 C* o2 T. }2 c2 g
- */
- ]1 C! x) _+ t - class Database {* {; Y6 b' N3 }$ j
- protected $database = '';/ o# |0 s5 g; X7 K
- protected $mo;
7 J( q8 u8 k$ _9 E; S - /**- Y2 A0 W1 W9 T& M7 a8 o2 T
- * 构造方法4 V/ L( R9 M) g4 X
- */! r* Z4 [1 n& r8 C
- public function __construct() {1 R/ t- Q7 {( q7 ^- G6 N- y
- $server = DBSERVER;8 M2 f& k, C# ? H
- $user = DBUSER;
* S! B% W1 Z# H" | - $password = DBPASS;
# `; F% p2 `3 g, G - $port = DBPORT;
( x7 A7 c* ?8 s( l - $database = DBNAME;
, e( ^3 I# N4 U' m# ^ - $mongo = $this->getInstance($server, $user, $password, $port);
& s" @% P1 \+ m9 y$ r1 u' W - $this->database = $mongo->$database;
! O7 Q3 p* y1 |7 p- t. K% H - }
+ L, ?- A! I0 K+ U - /**
9 N8 `: _' z, K* }) l& O- d - * 数据库单例方法5 A; [% w8 H( @' |
- * @param $server
, L) \8 @) C) U8 o$ y4 ^* l& e - * @param $user3 M/ ~ I9 x8 {. t) `1 j$ n' | V
- * @param $password
; f: H7 J/ r0 K - * @param $port
- L7 y# \9 i& T3 b( X* @ - * @return Mongo
, w" }0 N9 s7 ]! Q( {1 z - */4 z4 ?- D2 e8 `
- public function getInstance($server, $user, $password, $port) {
$ m! Z0 H! F0 \( G" z+ M0 a - if (isset($this->mo)) {
: b& x {) c( R% S - return $this->mo;/ v! Y ?, Q$ W$ ~* ?1 n* J0 K, m! z' I
- } else {# {1 j% T) F" Y' `3 |, d
- if (!empty($server)) {+ w! r" c7 d6 n2 M! N2 H
- if (!empty($port)) {
" [) k) n, Q* }+ q- `; R1 H - if (!empty($user) && !empty($password)) {
" F& P3 ^& |* B, M1 T* v - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");( P: n' n6 X% ?, C, R" F* i
- } else {7 \0 i' z% o, n4 U" b6 |4 h
- $this->mo = new Mongo("mongodb://{$server}:{$port}");
k2 v! L: G+ z H - }
0 v0 Y* ~) u$ `4 S+ M - } else {. E* \- S8 M W: I1 d! K
- $this->mo = new Mongo("mongodb://{$server}");
3 n+ ^6 H/ P6 B! E - }
) ^3 y/ [" |( U& |8 Z - } else {
% Y% \) R4 v+ h& Y - $this->mo = new Mongo();
7 z' q3 x2 A7 X. E" S - }
" J& @+ v4 _! h) k2 ^ - return $this->mo;
3 a# E* f, r. j* ^ - }
& V& T, w3 s8 O8 ]5 |7 Q - }
; L) ?/ t; Z; x- b - /**
, o! Z/ p( i. e# I. } - * 查询表中所有数据
- ] f8 a0 X) J. u' x9 l/ h - * @param $table
! a8 E$ k z- w, \9 }$ m - * @param array $where
- O2 ]1 c6 F* x) v- i+ N1 h1 L - * @param array $sort
! F- q5 Q o/ F( E - * @param string $limit
( d: A+ a0 M! }" f4 Y! C - * @param string $skip1 i. A7 P* X( L- E
- * @return array|int) [; |/ v2 y1 U4 L$ A! D
- */
3 a2 B; p6 d2 p$ A( n - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {1 ^1 M* C5 h0 `1 f( ~* r N. ^
- if (!empty($where)) {5 s8 z9 Q8 P+ n7 _3 }
- $data = $this->database->$table->find($where);# H- v1 ]. A& W. k, w4 r
- } else {
. m$ f v; z+ `1 V1 h8 I - $data = $this->database->$table->find();
) v" M5 d s! @& L% O - }% F, q' D- M ~/ e) @4 C, f- N& g
- if (!empty($sort)) {! T6 Y, e& \( e$ q. q) g
- $data = $data->sort($sort);/ \" q9 ]) Y) I* G* X
- }
+ A) n" E( A$ \* @# U6 J - if (!empty($limit)) {
. G' M) w9 c3 |5 r# t# V - $data = $data->limit($limit);) X' V% h0 ]0 w, K5 J% Y _/ e
- }! g+ y9 [4 e+ Z( N4 e2 K: s, i
- if (!empty($skip)) {1 G& F, m" n- a& E3 \/ O1 u) V" J4 L
- $data = $data->skip($skip);1 m7 W4 i, U c% q5 `8 m
- }
3 g1 q. F3 a* U$ O; {* D! H u - $newData = array();
; _9 ?3 D% ~4 k( x - while ($data->hasNext()) {* H5 ~9 j3 t) K/ R7 H
- $newData[] = $data->getNext();& ?. z6 J! U ^1 L1 j
- }
9 u3 z3 S: A7 _ - if (count($newData) == 0) {
7 _8 B$ B8 t9 X9 T - return 0;
1 Q: M% k8 L% F8 ~; ~ - }4 W1 d# v( E% c+ ]; X/ p# }" y
- return $newData;
! U; |+ S% K" v% x" a+ [ - }
, { }) f& R, R - /**. P8 _: [1 K4 d# G- i) s) K
- * 查询指定一条数据
3 q1 X7 ~: t" z9 t3 a6 }. t! B* H8 c3 ` - * @param $table
% Q/ { `$ R( g8 R- P - * @param array $where! Q6 G @5 E& Z
- * @return int
% |- a8 f# ~% h9 t* G - */
( e( @/ d; \2 l# {, v6 _+ C4 | - public function getOne($table, $where = array()) {4 G: S6 K. @) U, h3 C
- if (!empty($where)) {
1 I3 P8 h% D! s0 I( f - $data = $this->database->$table->findOne($where);$ w) F5 e6 v3 q8 w; H* e, C
- } else {
3 q! k) G8 S O0 y- q& v - $data = $this->database->$table->findOne();
. ~! N: v0 v8 t/ ^* r - }
% Y- K j; b$ U$ U, T - return $data;! h# y. G( w6 N* j
- }
; E7 R8 o# E' v: q - /*** _2 C% Q. _+ \, F- p) w9 v
- * 统计个数$ k' \& e' j" j8 Z% M
- * @param $table1 z& I+ I$ G U" ? r) P6 z
- * @param array $where
; ^7 a6 c, h( i; r4 V+ g m - * @return mixed) J, d, m! w- m" b. j' w J; v
- */7 ? q* u3 l" ]2 Z( Z
- public function getCount($table, $where = array()) {
5 s* Q* E6 ~2 I9 N7 R& Y+ P - if (!empty($where)) {
& X N4 B; u6 y5 O. ?7 \- d! t - $data = $this->database->$table->find($where)->count();9 b8 N f. O3 E$ y: z) c
- } else {* K* \6 x2 ], }
- $data = $this->database->$table->find()->count();
+ ^, y% ?/ m; v } - }
3 q1 I4 B: k" o- m4 d - return $data;
1 v0 D8 w% x, t8 d) {1 m" [& @6 [ - }* k; K/ M& P9 K" z
- /**+ R" {- c. z5 D7 y5 L
- * 直接执行mongo命令
3 z+ o5 L' Z! x4 s% Y4 r: b - * @param $sql
* e s" L" v2 c! U# K( { - * @return array6 {. P4 w M; W2 w
- */ C/ j6 |; L P2 m+ b
- public function toExcute($sql) {# t& Q# M, s U+ J6 |+ @2 j# ?
- $result = $this->database->execute($sql);
( s6 y6 |: K7 C2 T - return $result;# t3 q0 ~% C6 T/ n
- }
$ ^/ v8 |2 d! p1 G; e - /**3 \& B8 c3 o$ w3 J
- * 分组统计个数
& z( S: }" b. Q# O/ ~ - * @param $table
! {3 F/ M& B2 U' a" N, s* e - * @param $where2 R2 u$ c2 [- c) y6 n
- * @param $field
" f [3 {4 Q( P2 J! x; Z - */; G" K1 q) S8 s5 C
- public function groupCount($table, $where, $field) {
+ J0 y( [8 d, z+ ]0 r- n - $cond = array(; R+ G5 p7 r: d( L ]+ d
- array(
( a; c1 v" |! ]3 E - '$match' => $where,
}4 d0 d6 A/ Z3 V W+ w/ }; Y; b - ),' F# y" p9 n6 d( ^( U8 e# Q
- array(: V1 ]: [( h+ x
- '$group' => array(2 k+ [- N$ P; J/ x
- '_id' => '
3 |: |% }! [3 Q* s3 h3 e' d% \
E3 r) l* \5 Z! v) n9 O- . $field,: Q, d) M5 `- W0 G$ Z2 w7 y
- 'count' => array('$sum' => 1),( M1 i: W1 q% P* S' P& g
- ),# y0 u4 d1 x! j) c7 p/ @) M2 B
- ),3 h& {: ]; o5 Q7 Q- w
- array(* w6 @! _% j) p0 G2 F8 o5 H
- '$sort' => array("count" => -1),; R) B5 ?8 v7 W! X# v- w# a/ g1 U
- ),
5 w) `. T& W S' j9 j - );& o4 t+ O# s& x. V4 B
- $this->database->$table->aggregate($cond);
0 v! s$ q+ }7 b - }2 M. \; R( T" e; i5 p% Y7 _
- /**
- M' T- l n/ D, x; c/ p - * 删除数据" j7 n) k f; r2 u( W! a# d) ^
- * @param $table
; S+ ?. T# P2 @( a* b2 f2 M - * @param $where
. _0 P. v! r/ u( [ - * @return array|bool) c4 A& b4 t! U: N% X6 k. g
- */
0 i5 ^7 c+ ^% a6 W* \3 a& T - public function toDelete($table, $where) {
[' z% `# v% c( s) H4 Y- B - $re = $this->database->$table->remove($where);( K% T: d1 K6 f3 s, O% [' h
- return $re;
2 r+ S: _5 H; U; T' h2 s - }
3 {3 u$ Q: E# P7 i8 P' w - /**
/ n( m8 p$ k& X - * 插入数据
5 @' C1 f) P$ B1 K# c - * @param $table
# @, m8 y% k+ {3 p: H - * @param $data8 T( k& s0 m: U
- * @return array|bool, H4 q/ p7 R* ]+ K8 }* Q
- */" \* A$ |3 m, _- B8 |2 ]1 a
- public function toInsert($table, $data) {* M m* \9 n; {
- $re = $this->database->$table->insert($data);
" `5 B/ z7 e$ S - return $re;6 o3 I/ l; t! u9 m. z0 [' D/ D2 S
- }
/ T7 |0 \" r5 _* a - /**
6 e! o- Y- a* S/ k - * 更新数据
- B" Q4 \8 a4 Z; F) n - * @param $table
6 W0 Y# u7 i. D# a - * @param $where$ T" P, g" @' ]* a
- * @param $data4 c) ^6 U$ `9 w w) x2 s
- * @return bool
. I$ n0 @2 c6 P6 K: E7 V* `) L/ D - */
- |; A2 `, J: J. q) ` - public function toUpdate($table, $where, $data) {) @; N2 `& V/ ^5 Y+ r' @
- $re = $this->database->$table->update($where, array('$set' => $data));
; R+ B+ B( k1 K$ d - return $re;
- t) N* d n9 k# Z - }2 [9 T; ?0 b0 u+ C
- /**
4 I+ i* T, g$ u# o2 t& j - * 获取唯一数据6 ?' P6 e' Q# b; D
- * @param $table! [* ?, O& _& z2 e& a& _
- * @param $key$ g3 Y! A: T) Z4 z) I- V' Q1 H7 D! F0 R
- * @return array
* N; K& f( R% S3 \( e# I/ X& _ - */4 b( Z: ]( U1 g. `
- public function distinctData($table, $key, $query = array()) {; l2 Z3 F4 i1 ^1 T
- if (!empty($query)) {9 I+ k: ^' S! g! R; w
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);/ d8 j) n2 d( X
- } else {
9 H% t5 [: B; l0 B# d3 m - $where = array('distinct' => $table, 'key' => $key);
$ T& X* _+ |7 v( Z5 Q2 \ - }
; g& A0 [2 o4 X9 @ - $data = $this->database->command($where);
% G! I8 u/ O& [ - return $data['values'];5 T. D" p4 i0 j. ?4 S* ~; u7 C4 Q
- }
- G( Q( M6 W! p2 p# _ - }' _- A: L4 `1 v/ i/ f
- ?>
复制代码
" _4 G2 q8 z" h; B" g; m6 R, G6 A3 G8 O8 D9 k, y# Q
|