cncml手绘网
标题: PHP实现的mongoDB数据库操作类完整实例 [打印本页]
作者: admin 时间: 2019-3-9 02:49
标题: PHP实现的mongoDB数据库操作类完整实例
本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下:
最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。
众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。3 W9 N. D/ b, K4 Q
模式自由。: G. F* R, r$ u" @- d4 [3 T
支持动态查询。
2 A! k7 R. d% Q# E支持完全索引,包含内部对象。
; w7 W; I+ s0 n2 a3 n支持查询。
5 f& u s" y# q m2 {1 u支持复制和故障恢复。9 l' `+ K. I3 {4 b% ]4 i `
使用高效的二进制数据存储,包括大型对象(如视频等)。% |( f0 U2 d0 I4 v: ]
自动处理碎片,以支持云计算层次的扩展性
6 v- B6 T$ m: g' U; r% j支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
% g1 o% g( I, k) `! J9 e9 h/ K9 z文件存储格式为BSON(一种JSON的扩展)- D, N2 ?# C% I
可通过网络访问
所谓“面向集合”(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# G5 ~) M4 ?1 w6 ~2 u$ w1 T: I; h+ P
- /**
0 E( ]- a& X; o3 `, `+ l$ C - * PHP操作mongodb数据库操作类& _1 W0 R$ b7 {3 W T. U
- */
: H& D% f6 H7 k - class Database {
1 l7 G. C' N: Y% k+ X' O - protected $database = '';: L, M" V+ W) v a4 u& |8 j
- protected $mo;. g6 C5 F# R, L9 ]5 h$ u0 H8 z
- /**$ M9 ]7 O) R. u- \1 Q3 m
- * 构造方法6 m; N1 U# B9 E o
- */& K, Q+ O2 O3 y& g0 i
- public function __construct() {
; F% o2 P6 Q' E. j- {, C' o - $server = DBSERVER;* B7 ]( a$ i% H+ U' K, f8 B
- $user = DBUSER;
0 P7 H. I$ ~% m, z! O - $password = DBPASS;' f8 S* U7 E. r; G
- $port = DBPORT;
& n) {3 O! t9 `" \, G8 n" c3 b - $database = DBNAME;
, p% L3 N$ p4 @( U6 c - $mongo = $this->getInstance($server, $user, $password, $port);! R2 e6 S; j; u" D9 D& q7 I" |
- $this->database = $mongo->$database;
; P1 e) M D1 W, l) ~ - }& D i8 {4 D* e2 ?
- /**6 F# C6 q& G2 w
- * 数据库单例方法
; v7 L6 F P( Z; L) B. G - * @param $server
0 R( J+ @1 p8 f) [) _ - * @param $user: ~* d% _& y2 d; b/ ^
- * @param $password
8 G0 M# K: o C8 H - * @param $port
+ [9 z% f. E& \+ [ - * @return Mongo
& [1 [ p: A- R6 B# y - */
5 X( ^. Y- G9 }# b - public function getInstance($server, $user, $password, $port) {
- Z- M+ E/ C/ p8 r, ^' p - if (isset($this->mo)) {
/ d$ v& _5 F: o9 [( B9 c7 c - return $this->mo;
* B9 c& ?" H; W; b7 F4 Z - } else {
# C: D& ~ l& {* Q' ^ - if (!empty($server)) {
3 Z: C, p" f/ c2 z - if (!empty($port)) {) J9 D& }5 `0 \* n! S: c* W m
- if (!empty($user) && !empty($password)) {
8 t6 U( }8 Q1 E( l) \7 T - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");! }8 g+ H# L' a& ^. \; w
- } else {$ m; _4 b( R! Y& e; X$ o- \
- $this->mo = new Mongo("mongodb://{$server}:{$port}");9 g. u. g/ L, e9 f$ q
- }/ q2 ~9 [( b$ C S5 `1 s
- } else {
0 K) j, D3 e. S8 t- k - $this->mo = new Mongo("mongodb://{$server}");# d3 b* g" k' A: Z4 Y. c& o* H
- }2 v& A) y' s- U/ q1 Q9 n1 x9 T. g% B
- } else {( N6 ^" n5 A1 G; I8 _4 @
- $this->mo = new Mongo();
( T: P/ z1 S& M% _& m& J# _ Z1 x - }
* p- [) n2 a3 X8 Q - return $this->mo;9 u6 K4 A; r- W" ]
- }
6 c0 x z, \; w6 _ - }
7 m* c3 ~4 U m# [ - /**
9 W5 C) u/ w9 L! D+ Y, T. @' c - * 查询表中所有数据
, F/ {( J7 h, @, x0 T! [6 V8 { - * @param $table
; F, J8 V2 m. R2 w5 B - * @param array $where
: ]2 p9 v) u. `& l2 q3 u$ Q# Z - * @param array $sort
# l( {% K W) b( t: z - * @param string $limit
/ c* f3 W/ y3 w6 a% K3 P8 k) D - * @param string $skip
$ {# Y7 ]0 h! M: t8 j; x - * @return array|int
6 j& v% g! R/ }2 M6 [ - */
$ I4 Y! p# @% M' A - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {$ Y7 s, M3 x5 o% p! C6 p0 c
- if (!empty($where)) {
8 U; X# n" z7 p2 f& @$ s - $data = $this->database->$table->find($where);
- }" K5 v5 Y/ }! X7 r2 H1 T - } else {
! ]+ l( @! g" f& W& W - $data = $this->database->$table->find();; U p7 x+ D8 D/ M1 y4 J
- }5 r: m/ q( k: S3 M3 u
- if (!empty($sort)) {
* X. \, o3 G: s- f0 N R - $data = $data->sort($sort);
" ^) | c& x8 Z) A4 ?" m - }
+ b8 d1 U( w! F! p. _, H* I5 k - if (!empty($limit)) {) t( O+ n G& Y. q4 c
- $data = $data->limit($limit);/ R* j" u8 ?& ?) m- l
- }9 w$ }# N7 J# F
- if (!empty($skip)) {& w4 {( e/ v$ g4 Y# Q i
- $data = $data->skip($skip);9 ^. t4 P9 c g: S, e
- }& Y- o' e& E0 q% k" X- W4 Q$ h
- $newData = array();) z* B3 T* V- o( k. Y1 {
- while ($data->hasNext()) {
1 F# s( l. p5 M3 ?7 q- Z/ z" |1 \ - $newData[] = $data->getNext();3 e# M/ F* m3 r( v
- }, I& J2 [( f7 Z- d: X
- if (count($newData) == 0) {/ B$ S8 w( Y, U s) P
- return 0;
, Q8 Z/ q: C6 |. R& @ - }
8 s) l) z! V1 H8 A9 ^$ @ - return $newData;' p& x3 a7 {3 H1 @6 M9 |5 I
- }
+ D0 Q( @; N9 t8 `' P - /**
$ ^6 T# w. G/ W. _9 i% x - * 查询指定一条数据+ e1 ^% U- _9 O& [3 r
- * @param $table! t$ M. O2 X v$ j) h$ _" z" r$ T: h" F
- * @param array $where( W& a0 _. Y9 ]; M: z* o
- * @return int2 u% p, I6 Q+ F" C
- */
/ f8 A7 L. q, G, ~! ~ Y. _ - public function getOne($table, $where = array()) {
, t3 h a u1 J. q8 h - if (!empty($where)) {
' J" P+ l. N1 L6 t9 r* i. H1 H - $data = $this->database->$table->findOne($where);3 N7 K1 S4 u5 T$ n" _/ A/ R
- } else {4 [4 y7 B5 r0 l
- $data = $this->database->$table->findOne();, ^, X2 p* a3 W) W5 U: r& f7 S
- }8 p; p0 L' R4 K7 w: [
- return $data;
- M! R r; D \2 p# u0 k& r - }/ n" m+ S; M$ `
- /**: M3 n3 L( M0 c- l2 r2 t' d
- * 统计个数 X" s! ]: w9 c6 |1 T; }
- * @param $table" K8 T. y. Y X- K' n/ h
- * @param array $where
9 l$ x( @ Q( _; F" R. y - * @return mixed7 L7 H" C6 T( r: t# L
- */
6 P1 J; P" O! K - public function getCount($table, $where = array()) {2 o! `6 X* g+ x; N8 j
- if (!empty($where)) {$ o- q( x1 A' c- i
- $data = $this->database->$table->find($where)->count();1 `! r$ d* K* V$ C7 S
- } else {
# W5 `) ?9 K! H) k# Z - $data = $this->database->$table->find()->count();
8 D$ \, p T. b7 `3 X4 N - }
- D9 r% K* j9 q' r9 n5 ? - return $data;
' T. H A# l1 }7 g2 L - }
$ x- Z$ t2 F( B- e8 d: S - /**1 B: w, v/ O/ ~
- * 直接执行mongo命令
7 P) v, Q' J( r0 I% }. d - * @param $sql
2 [9 Z4 n8 d0 M. o9 r. t! T# ]5 } - * @return array. |, C5 l: {$ u% D1 s; P. S0 \
- */! D+ Y9 o1 g3 O. t s/ e
- public function toExcute($sql) {2 g' h& D1 e7 V2 u- G$ |
- $result = $this->database->execute($sql);3 U) h$ {# j" }" K& B) B* j D- K
- return $result;; E0 k% N$ M& q2 s! |
- }
7 {$ G5 V( U$ v3 z& ?. m, H# o - /**7 o. ~8 c0 a$ @) W5 @
- * 分组统计个数3 X7 D" X% _$ F: l
- * @param $table3 d. m/ }3 S5 I( l' G3 {
- * @param $where+ b7 H7 d& J9 `6 d- u) q" u
- * @param $field: c! z7 M1 v: K' ^" m1 j- S8 B
- */) i3 m4 X. X& P l% G6 E8 `
- public function groupCount($table, $where, $field) {
0 X7 d& h* `7 P. K% V - $cond = array(
7 ^! F( Z* w0 x% ] - array(% [7 X4 h X& `+ m- v" a
- '$match' => $where,
H, p7 u! B e7 f0 D9 o' _ - )," [5 G* |( s0 q8 @2 e: D
- array(
% |- z9 y5 n ?# z9 M! F( m+ O+ K [- Y - '$group' => array(
' x2 s S& c- ?% ]0 v - '_id' => '
6 ?( K, |* Z% u
! C/ C. o( }; p5 ~3 P: n7 ]- . $field,
" F7 I2 C: |9 ? - 'count' => array('$sum' => 1),) Q& s* f7 h- t
- ),
1 H B2 d4 y0 p- Y5 A - ),
8 Q. f. N$ l& E% ^) n - array(* ]3 y& `& u! T" Q8 @5 T
- '$sort' => array("count" => -1),
( y- X% z, x% l" Z9 X - ),
B+ l4 |. q; b& I - );; p; D8 X& K6 k
- $this->database->$table->aggregate($cond);
$ f) n0 P. o3 [3 e% _0 T - }
8 m) `2 @( C9 M - /**3 A. _9 s6 X, o, F9 b
- * 删除数据
# H# n0 f' t/ h% W- N1 s3 s: ^* r2 u - * @param $table( ^% H; n' m, X! T$ K
- * @param $where0 \, G' P+ B O+ V* ?7 q
- * @return array|bool
5 F2 i& T5 D7 g- E3 E - */
" p1 d: K$ s9 \2 S - public function toDelete($table, $where) { S: }( @* C& f! y1 v+ s
- $re = $this->database->$table->remove($where);8 @$ z: ?( w# w
- return $re;
; d$ |3 \: x8 ?! i4 m* \ - }6 ^9 ]7 T/ _9 |1 F( e
- /**2 z9 v( x6 v5 a# ?5 u6 x
- * 插入数据
% k0 a6 G2 n6 O) S9 w - * @param $table
* j( N& N: k! N. A0 s - * @param $data
" O% U e9 y- i" g - * @return array|bool
, @" ?/ d' {/ O9 S9 U+ C! f1 Q - */
7 P. d2 J* ?( F4 h R - public function toInsert($table, $data) {& R9 \, p. `5 o R$ J( A8 e
- $re = $this->database->$table->insert($data);( m. a1 K9 f+ I7 `1 ~
- return $re;
' P, U/ q1 t% U( m; }7 R5 r - }2 r4 s- H; j: [3 P9 \% O' O0 r
- /**/ B' l9 o( }( B# {* r
- * 更新数据
8 h. z* v/ t* M# u - * @param $table
& D6 v/ j7 a. T, T( n - * @param $where! J. L7 b5 I/ B& ^2 s3 ?; m2 s; x
- * @param $data4 W) z$ W6 c$ }: s: X
- * @return bool
s1 t" B- |" `5 n5 ] - */* J0 u0 o: e' {( e* y# {& B
- public function toUpdate($table, $where, $data) {5 d1 B0 x% ?& t, J
- $re = $this->database->$table->update($where, array('$set' => $data));
: e, F) H8 `) O - return $re;
) q) N5 X- |, X H; {$ d( x& U - }5 x" e! E2 k$ X
- /**
5 x' b3 g- v& m. D - * 获取唯一数据( K# F3 u- ^: O: J, l: m9 v
- * @param $table* O4 j/ u! |* ?$ m- T
- * @param $key8 N* M( V. h$ j8 R- A1 u/ [& \
- * @return array- [' t/ X5 T. H& x* \
- */
- j' L7 a6 O; a8 J! ?: D - public function distinctData($table, $key, $query = array()) {" S0 k" J4 b: }' s9 S
- if (!empty($query)) {
* }1 V* v; r; x$ B9 `$ | - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
1 I- m1 B% x% |2 e3 ~! B# W5 } - } else {
5 |# j5 Z) `! h - $where = array('distinct' => $table, 'key' => $key);
) k) Z1 @# \7 ^4 D - }
, w" [5 j9 `* k6 H! T0 a, R1 n5 j; | - $data = $this->database->command($where);; i+ r( E9 c9 z, X& R- U
- return $data['values'];
4 J/ H& t9 _6 M2 C2 i6 |9 N - }
) ~) d# q& p: T: J! x. O5 ] - }1 o2 z6 p; [) `, |- }6 k/ }
- ?>
复制代码
* }, V R! X c5 Z+ {" m' f( ~, I1 T
% Q4 d" |, X. b& [
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |