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最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。
2 j' O! G$ l( F M) K& F& C7 p1 l# h2 c模式自由。% _& b* }5 u0 h& O4 R- c
支持动态查询。
6 }* x$ R. K6 _3 ^! f* m( G1 l支持完全索引,包含内部对象。
- H) M4 `. N) @) K5 x: n' Q6 Q( d$ Z支持查询。# b1 e- @, j9 |4 K$ l! E* v& s
支持复制和故障恢复。; |# Y' ~4 r9 |/ C3 D
使用高效的二进制数据存储,包括大型对象(如视频等)。! S% G4 K# e6 [, K
自动处理碎片,以支持云计算层次的扩展性4 e. p! a; S: k1 k5 V. v
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
) b# p% N' |, t' l" K% q文件存储格式为BSON(一种JSON的扩展)
) _1 E& A8 x) { G/ ?. U7 X可通过网络访问
所谓“面向集合”(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
' [# }( d+ K9 w8 Z. p) B6 [ - /**& u. r0 v+ T& J- D1 ~' b$ t
- * PHP操作mongodb数据库操作类
3 k, d; I) ` M7 Q& u - */
' V( q2 H# c8 |3 v- N9 J - class Database {
. t1 k8 D8 D3 _' @( ~0 z: T - protected $database = '';3 h6 C1 @1 n: W4 J$ ~& f
- protected $mo;" p. U6 g2 y, l* z* s" U/ f
- /**. F6 ^+ T" D5 F: S. m. ` Z, ]
- * 构造方法
5 {! ^- e8 A, B$ G6 b0 t* v - */
4 ~% U5 Z. ]! ~+ u5 `) H0 D - public function __construct() {. |1 J, p! g, ~+ J7 o0 b. N
- $server = DBSERVER;
9 M4 L3 M' \0 e0 }( z' U - $user = DBUSER;
b. ]& t" x' R" P# C - $password = DBPASS;" x# u+ x6 M6 }6 S8 [" ], A
- $port = DBPORT;
3 p; f5 w; g" l2 U1 u I; j9 ]/ V7 |3 ` - $database = DBNAME;6 A, l1 p4 j5 w# O" ^% D U- g
- $mongo = $this->getInstance($server, $user, $password, $port);7 b, J( i; F) B# ]
- $this->database = $mongo->$database;
" r0 k$ I. B, n5 F - }' }3 N" E9 Z/ @8 f* R6 Z
- /**2 F* s: f& [* D
- * 数据库单例方法
[! B: h- i5 p1 U1 G( v$ K - * @param $server
8 Y% e& |/ o1 e9 M$ M9 @( L - * @param $user$ w4 |; w W1 \, @( I2 l. s9 s
- * @param $password
# c8 B: s5 o9 |6 `5 L - * @param $port
; t" H. ^+ V% _5 j# B0 y3 @ - * @return Mongo
3 _ p) O- c0 }5 i6 |+ l. _) A; p9 c- a% ~ - */
. F! _/ g& R0 Q - public function getInstance($server, $user, $password, $port) {* L2 h$ D1 t& f' E
- if (isset($this->mo)) {7 e" E& X& x! y Q; T+ z2 W2 B
- return $this->mo;
! F! g, L0 K1 e - } else {
4 O% N! M! W0 H' b6 F - if (!empty($server)) {
$ ?9 _! f6 C3 n) k2 h# b - if (!empty($port)) {- T* c& z2 I! @4 Z
- if (!empty($user) && !empty($password)) {
o) W( N* x/ H" S a" U- r1 Q. Z - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");& ?5 B" w1 Y+ H' V
- } else {8 ?& }* s8 `* z1 L$ L
- $this->mo = new Mongo("mongodb://{$server}:{$port}");
9 P/ D, b$ W3 \3 p k' \% Q0 E: a - } X+ X2 \; ^7 l
- } else {
8 |/ K7 f% L5 G$ l - $this->mo = new Mongo("mongodb://{$server}");
. c5 q" q, I) P9 Y+ F& e& a& _ - }
, } p5 w7 s* B! f- Y - } else {, U4 z* z6 \/ e* \
- $this->mo = new Mongo();
' K0 b! t! U8 l; A5 w - }4 I2 D* C R, U' H4 E' e
- return $this->mo;( w4 `, \0 M4 ^# z5 Q* O P
- }
/ c o$ d6 @; y1 I4 Z* }( `) f* G - }
/ V4 M$ y7 b) o$ k* i4 G3 H - /**( b* \1 d, [; q) x/ B2 U* z! m
- * 查询表中所有数据
5 Z0 z/ l) G4 X, f R - * @param $table/ d' Q: v# i' x5 w9 J
- * @param array $where
; q) O z9 G# \: P% Z - * @param array $sort( T/ Z. _1 o& ?! M2 M7 d
- * @param string $limit
% X/ M' S& O" F0 S0 m - * @param string $skip; l. m( [" R: l1 S/ A$ c
- * @return array|int
# `9 n1 R( h/ `. B( Y- s0 M+ c" x# Y# X: N - */0 @( N4 ?$ p y6 G U
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
D& u8 s5 k" `1 e3 R - if (!empty($where)) {( T* i& p7 I% V1 {
- $data = $this->database->$table->find($where);
5 u+ S6 g: B B0 [- ^7 O2 {- z - } else {% t# d' Z# e0 h6 M! R3 b
- $data = $this->database->$table->find();" Z5 R2 S4 H Y! z, C
- }% m$ x3 X" X3 g5 U
- if (!empty($sort)) {. T( s1 X' }, }$ S" p
- $data = $data->sort($sort);* K: Z0 x: @# ^
- }1 Z$ T( @/ B9 @( L1 {( F0 K8 x5 c# c
- if (!empty($limit)) {
! T: r6 }/ U) P8 s2 H - $data = $data->limit($limit);7 O, ^2 E% B9 }
- }
1 V/ T7 ~* }. P8 L1 y' @4 @6 F4 d& M# l - if (!empty($skip)) {
6 y* e, k$ y8 l% V - $data = $data->skip($skip);
$ H$ e4 p$ B; s6 }! g - }! V; C9 M5 w* q$ K
- $newData = array();4 e& ~: ?' y, I( g1 z
- while ($data->hasNext()) { E! t' T0 f) t* f# F$ G& w
- $newData[] = $data->getNext();
5 h5 \" N% D) p - }
8 R6 Y* P; b+ `2 c - if (count($newData) == 0) {
. }3 O; r" N# A - return 0;% y; Q& a, k. c: P7 i. C
- }1 _: P2 U1 V W
- return $newData;
7 A. O% `( M( z( [5 ~ - }" @5 \. v+ g4 K1 Y
- /**
8 {$ d5 H3 T% B o) _4 g/ v {) @ - * 查询指定一条数据
2 B5 w; a8 k5 Y/ |% j - * @param $table; V, p. G6 m0 ^
- * @param array $where- g( s! e( i" _6 y" S
- * @return int
- E& X0 |9 K w0 L1 }7 V& o: K - */& G. q4 c9 c+ B! ?! c6 ^$ f
- public function getOne($table, $where = array()) {
. d! L( v4 X# T8 d Y1 W - if (!empty($where)) {
$ A% \8 f$ V1 z9 g - $data = $this->database->$table->findOne($where);6 q& S# N6 t& j) ^* ?. z5 L
- } else {
+ |) ]" ~/ P. v, L0 i1 n - $data = $this->database->$table->findOne();) x) i% E- d! ]3 e% `# I
- }" Y. y6 Y. ^% M' }
- return $data;0 Z Z" M6 J- m% G
- }7 X% E- z0 z9 W" c$ m
- /**! A J) x, W6 T- c! `; [3 n5 `' m
- * 统计个数0 L( n1 d, W" f9 U7 R7 s
- * @param $table
( {8 \! @7 T$ s3 N - * @param array $where) J' T, G- P% S3 {- M8 c& w
- * @return mixed
0 D. N* o) P8 Q- x - */
8 @( t' p- p6 I' O. D7 Y: U - public function getCount($table, $where = array()) {
- l# u1 J# @/ r% ~ Z - if (!empty($where)) {
" M2 P5 S7 V9 ?( A9 c& v - $data = $this->database->$table->find($where)->count();2 v8 _, M4 C( o9 t) h; G
- } else {1 Y& E: }( \ F2 j* F
- $data = $this->database->$table->find()->count();( h; k2 W! Q# F1 G; v9 @
- }) @+ ~) g3 x6 d/ W
- return $data;
' Q) H# r# G" Z& ^0 ?. j5 R - }( L. o% `& ~/ u J/ {. V
- /**
( s, `2 r, ~! y/ |4 t9 |$ a4 P7 L r - * 直接执行mongo命令
/ ?5 y7 | E# _7 r9 q - * @param $sql
! W$ b8 r2 o" M7 C+ A/ y5 u; y - * @return array- C8 e( `8 O( X1 I* D
- */
+ [) Y/ S5 @; c1 p; {/ l - public function toExcute($sql) { P* z# b% c" c& l) i
- $result = $this->database->execute($sql);
7 j/ a' h! t; h, h - return $result;/ k: g6 G9 c+ {' n+ k' j' B, U6 i
- }7 [4 y! A$ t- k1 w) d
- /**9 {+ ?$ `8 Q+ y5 h
- * 分组统计个数" J+ ]5 m8 H. o5 b5 [" ^
- * @param $table+ m% I* i P! M9 P$ t
- * @param $where
; g! I: C! n& I W. i0 C2 q: n4 D - * @param $field4 P1 V A% v) d* s3 G1 z9 Y0 c
- */
' ?+ W; |) J- ~/ B" @ ^ - public function groupCount($table, $where, $field) {8 @/ J% O* d) \, R. p: b; n
- $cond = array(( d3 y2 q3 b% I4 e8 J- Q
- array(! y# X; X- j2 L# X' ^9 x
- '$match' => $where,
. U% V8 N% o1 T8 Z' H! ` - ),3 F" e9 H% m* e
- array(9 }* W; O) P/ v7 H9 K
- '$group' => array(" P2 J, C: G- q; z% [
- '_id' => '1 p4 ]7 I! Q0 W$ w- E, W
- $ Q7 i+ [0 @/ A# j' V! M4 ]8 d
- . $field,+ p& V" }% G1 G) T
- 'count' => array('$sum' => 1),
0 E6 N' L* b- z' F5 A" M- B, R. y - ),- ~6 t8 J6 @6 o, Q, }9 ]; N
- ),
0 R( E4 z N7 U- H) ?# l% d$ H - array(
[' E2 D* y& e8 B ? - '$sort' => array("count" => -1),, [8 m. J A! X% R
- ),, T! K) n+ v# P# Y: K6 H" x
- );+ f" h% ^+ w# O
- $this->database->$table->aggregate($cond);
# E1 |7 G+ U; { - }4 @# d) o9 m9 ^5 q. R
- /**# Z& H, f9 K" I8 U3 r" P0 ^( X' ?
- * 删除数据) A& P+ o6 V' F
- * @param $table) c- f$ n$ r: y: ~
- * @param $where) A3 L6 A9 O5 U: v* @
- * @return array|bool# C% j k' ]' h3 O- n5 U* t
- */# X6 B# S0 K) z4 j4 i! u* g
- public function toDelete($table, $where) {
6 a- j% G$ b" `! C0 X, _4 R9 Z' H2 e - $re = $this->database->$table->remove($where);. S8 \. C8 p$ @
- return $re;% u0 l6 h9 T' A5 e. K x. D
- } p1 D5 v3 n* O1 i5 o2 t' L
- /**3 {9 ^* ~: f) _. c: e
- * 插入数据
# E- S5 ^' Q1 @% X$ z' t) o# x; C - * @param $table E* n" t O$ e1 P/ l" C
- * @param $data
* B& k# R# h& K( W' |3 p. l - * @return array|bool
& s0 E( ~3 l/ ~; M - */
) Z, |$ W4 H% h6 |, a' S - public function toInsert($table, $data) {/ \' C& D4 ]' l$ e1 {
- $re = $this->database->$table->insert($data);6 V5 H" T+ h- A
- return $re;+ X$ ~0 Z! f# ^+ j" \4 I
- }, ?6 n- o2 x5 d4 e5 |$ w
- /**
1 ?+ b7 n& w% I' S) f$ l4 r+ z$ Z - * 更新数据: o$ C; U' v5 E# t
- * @param $table
' a6 [0 a& K }1 a. i - * @param $where U- \/ F6 L; m0 _9 m9 u
- * @param $data# c1 j! T9 u( F9 i* ?& Q
- * @return bool
: i* G& q9 h [3 e9 e - */
2 p; N9 P. |1 A2 Y/ W0 g/ o1 w - public function toUpdate($table, $where, $data) {6 v) [1 `: w* f; B
- $re = $this->database->$table->update($where, array('$set' => $data));0 v( }, h, L% R9 U2 ?$ i
- return $re;
8 M( i$ f0 g$ a8 Y2 H* V0 w! I - }2 l- D* x7 v& B8 `7 x0 I$ M
- /**" ^- R+ Z+ _/ ^& u3 H$ w2 H6 M
- * 获取唯一数据' p# e4 R; A- X( p8 z( l3 J0 V
- * @param $table* N4 L4 c2 d+ j
- * @param $key- f& _: h1 _% o& f- D/ l! [
- * @return array
2 \6 k: X$ C: S# o/ E! H( ]- V - */! g3 z+ x+ F5 ]. S9 s
- public function distinctData($table, $key, $query = array()) {
" t9 V5 p4 n, A* N% T/ n1 j, v - if (!empty($query)) {% t- i" u: T3 d7 Y/ {4 |9 u
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 b7 z+ g# F7 b4 e& b2 c6 y# B
- } else {5 e0 P4 \5 {+ `1 J X% |- N2 H3 Z
- $where = array('distinct' => $table, 'key' => $key);& ~' q5 P: X! f
- }
2 x. u$ }+ F! _) g* D - $data = $this->database->command($where);
" e. Y" _. R7 E- D! I& U5 C2 E; s/ L - return $data['values'];$ k% i' M, W( {' z7 z
- }
! U) w8 l4 I- v( @1 w - }& N! J- o1 Z- f6 I9 C
- ?>
复制代码 : S- }' b$ w& |# j
% S+ f6 W6 H3 |% V' x
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |