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最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。) i z5 S% \5 B
模式自由。; Y( R6 W; {% d% s( c$ I9 ]9 Y& j9 s
支持动态查询。0 B d$ k" p; A5 F4 A3 g) Y' @
支持完全索引,包含内部对象。4 @( r: N9 B" n Z, G
支持查询。4 ~% ~& @& ] I/ v
支持复制和故障恢复。
* s5 s5 g% E2 V使用高效的二进制数据存储,包括大型对象(如视频等)。 S$ _7 O4 w! r2 C& f
自动处理碎片,以支持云计算层次的扩展性
5 K% g2 Z+ U% d6 `$ R4 p支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。% X% s6 d# z! b* u( b; E' f/ H
文件存储格式为BSON(一种JSON的扩展)- C* [$ y; W" J6 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
4 G0 ~5 T0 f3 ], E) d) K - /**
( s) v5 T+ U/ @+ |3 [7 N. Z - * PHP操作mongodb数据库操作类% e9 e. a) O6 M: \& A; S
- */6 E! g) g* `2 l1 S1 ?
- class Database {
2 Y: w3 P5 q3 I, _" \ - protected $database = '';
5 h9 G# _* ~0 ?& \: K; r) d - protected $mo;7 ^) r0 C% @! p1 Z3 T
- /**
d+ ~# R7 A% H - * 构造方法
1 I1 S/ p3 f8 l - */; p6 s9 Z$ D+ M9 V& [+ v! L
- public function __construct() {
: J" }& M6 ^$ k4 c o - $server = DBSERVER;
/ o8 j p9 E' i) z - $user = DBUSER;) Z* U* m- D6 m0 I2 |
- $password = DBPASS;
! T5 p# d2 I8 t( y' @5 a3 |# J) {+ {' q' J - $port = DBPORT;; H4 Z" C0 a& @5 U
- $database = DBNAME;' f. ~8 i7 g0 E0 c7 v
- $mongo = $this->getInstance($server, $user, $password, $port);: q* I k3 f B! m
- $this->database = $mongo->$database;1 {) c6 _$ d% \# y; R! \7 S# c
- }* E' \" p) o# b3 }
- /**
: a# Y4 A9 ?( t) W9 h& Z+ Y - * 数据库单例方法& A, `. `( S8 O# ~' x# E' h4 c
- * @param $server
! J9 R1 s7 l: {& m: r/ Y - * @param $user9 x+ M( Q4 _5 ]! a- z
- * @param $password
! K" ]" a* R) `1 R( b - * @param $port# k g/ Z" b3 B" ^# Q6 j
- * @return Mongo! _2 L8 V H A- \' C
- */
* I' A5 ^4 } ?0 W$ H( \) s3 T# [$ g% e - public function getInstance($server, $user, $password, $port) {
( V) g# u3 G& ]3 d- f - if (isset($this->mo)) {2 x6 v9 K9 r% A% S' a: X
- return $this->mo;9 Y$ s# n% i, a7 t; S
- } else {6 n9 x1 a. i2 l! W4 k$ t
- if (!empty($server)) {
2 j/ v; d: N* _: p - if (!empty($port)) {7 ?7 ^2 t6 r/ k
- if (!empty($user) && !empty($password)) {, N* X5 {& |% I% V: u* v+ q
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");7 ], h) k" Y1 l$ F3 W' A4 R( J1 |5 S
- } else {
9 ]: L {: o. H5 g* \2 U - $this->mo = new Mongo("mongodb://{$server}:{$port}");7 k/ C4 @( S1 s7 s O
- }
4 @+ i0 S. u5 c& ]: O: Q) M2 Q/ n - } else {
( h* [' S$ Q# K+ V) k - $this->mo = new Mongo("mongodb://{$server}");1 p: L4 S! x( X! B }
- }( n$ G1 I0 J8 b
- } else {
( M( l3 s9 o% e$ b+ M, u7 _9 f - $this->mo = new Mongo();5 v! R* C1 U9 v# ]) I8 m5 n2 b; T
- }' x' o! H' N9 w: j# u9 B6 G! ?
- return $this->mo;/ B: l( f/ F s _; t
- }; K( Z0 N! T" l" T+ ^* F: w
- }2 z5 a0 j7 x4 A% w/ k& T" R l
- /**5 D& ]: C+ V+ N: p( g9 r V1 \0 H
- * 查询表中所有数据
# A% [; t* m7 u ] w4 E - * @param $table
) d, O2 r h4 K B" Q; c ^ - * @param array $where
6 b+ {8 m3 ~9 B5 ^/ f - * @param array $sort
' a6 {& |$ H3 _+ A; p, j6 f - * @param string $limit% d0 U9 x$ {( e% }/ j p% ^1 r
- * @param string $skip
. }. Y' d' x( L3 ]) q/ h4 x - * @return array|int
8 m) j( N2 S2 m2 ? - */1 b' S6 k# C1 \6 N* V
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
; _; H. h% Z5 F; T: I; C5 X7 K - if (!empty($where)) {
) w/ A" _; u: @5 ] - $data = $this->database->$table->find($where);
: I$ z, Y% V: D' G# i - } else {
4 b8 Q J1 o( Q - $data = $this->database->$table->find();
$ S5 l" X* g4 e+ f - }" q1 m) h- l* K+ h
- if (!empty($sort)) {* r( F1 K$ |) d; r
- $data = $data->sort($sort);! B) }* h; B+ j1 x! m
- }
6 K3 h- D+ c8 ^3 i9 [ - if (!empty($limit)) {
+ \7 c% o. ?* m4 l. V# z2 b. Q1 U - $data = $data->limit($limit);: w: ^7 |8 u4 H& n7 T! N; g
- }
' ?3 I. t7 `3 C - if (!empty($skip)) {, A+ ^: t* ~9 }! L- Z+ D3 _5 h
- $data = $data->skip($skip);! }3 N! E3 g, \* {! x& |0 S
- }, Q' W# X8 q1 t; s: B
- $newData = array();
5 |, ?# v( l: ?/ S% d - while ($data->hasNext()) {
]) K2 R: }: r- \ - $newData[] = $data->getNext();
; j1 d1 R& A) v - }) Q9 k, `6 ]/ h: y3 m/ H2 M* m9 |! J
- if (count($newData) == 0) {( E/ u8 V7 {5 S* m, p) ~: z
- return 0;
1 r0 H/ y' A7 J6 a2 R3 d4 _1 N b3 a - }
& S0 d7 [( Z3 A% O - return $newData;7 G- f; o1 T& \) W
- }
5 w) k+ @: }! d( u& l& P+ g6 v - /**8 H# h8 t, P/ E8 Y
- * 查询指定一条数据) z, l) b9 R: O7 j! N0 D
- * @param $table
9 D6 a7 I. E: B, a& i - * @param array $where
# L7 k7 V2 v/ W" H1 o3 r - * @return int& U" u/ v% {) z; Q* p
- */
& X. `6 J+ u2 f5 j% m' f) I( ~" e6 [, f - public function getOne($table, $where = array()) {) \) @2 v2 N7 W @8 t& F
- if (!empty($where)) {
/ @3 x( X. s' z2 W( D - $data = $this->database->$table->findOne($where);
1 _9 d. a# p& {2 v - } else {- G6 z# i, |' h$ ^: Q5 Z, M5 X1 n
- $data = $this->database->$table->findOne();
0 X7 d9 B3 z J/ R6 T - }
( c- n: T" ]8 Z7 W$ G+ ^; L - return $data;
: g# k- j. z' D) I: W - }4 ]5 F- t0 b4 i$ t0 J0 U
- /**& @/ Y! x/ a9 y' u
- * 统计个数
6 j: Y6 [7 x6 J X - * @param $table
2 i6 G: f" }% ^; b" k, b - * @param array $where
) |, ]6 Z( `7 o, Q# m - * @return mixed n; r" ~. ~2 }$ T4 n
- */
* o" ^+ _ o+ k; Z9 m4 c9 O7 L/ g - public function getCount($table, $where = array()) {
, V$ m- j+ [/ t - if (!empty($where)) {: f& B: p8 |! W
- $data = $this->database->$table->find($where)->count();1 I/ N, z l5 x% F' M/ Z' N$ D% W
- } else {
6 F a9 I1 W$ a7 K& O - $data = $this->database->$table->find()->count();. t& E* B* g# J- v
- }: d, q+ p1 e3 u. w
- return $data;& d* w+ P% [# R' K& a' _
- }, Z+ e0 ~' i5 B) B4 X. B
- /**
2 D5 b4 H5 @1 g, w+ C - * 直接执行mongo命令
' w* T% b {: n, c- W( o( {2 Q - * @param $sql3 a( K# S. ]( C- j" m' g
- * @return array3 e2 P: u" l, ?* D& {5 b8 F
- */
/ H( F5 N: } F+ n/ C9 ? - public function toExcute($sql) {; g) o1 O' V, M3 ~: C9 W$ b
- $result = $this->database->execute($sql);
$ k7 F' P6 d+ e/ s9 o( H2 L - return $result;% {0 _* K- R$ Z9 N& X1 @
- }
! h" u J- r+ X9 ~1 A& N$ G - /**
: M9 q2 h: I2 T- D+ B% G# u - * 分组统计个数
. ` M4 M- }# J( N# f; { - * @param $table! t0 O( w2 g5 C* O( X
- * @param $where: n6 }( v* p6 |1 Q: l7 p2 X( E
- * @param $field& w A* t! ?+ `
- */4 W# l* k& S+ ^; `* W, U2 h" S
- public function groupCount($table, $where, $field) {
; ^; b, ?5 k" ?- ?' i' u - $cond = array(
8 p$ h" O( w; j- Q& e0 w - array(4 o( W2 V2 m1 |+ j9 V$ N7 |( [2 L
- '$match' => $where,& @, b# Y% k8 C* S9 l$ y
- ),
$ G: Z1 T% Y; O7 `5 O - array(3 z9 n$ D7 h: I
- '$group' => array(
' @3 r% {* t/ p8 o i. M! H, c( G - '_id' => '
4 c) Y% m: T: D5 V4 H9 h: `
Z9 u9 }0 o' n* `3 i- . $field,% V' P* r" ~: M; M( @9 M- {! l# r
- 'count' => array('$sum' => 1),
' i" j' _$ }+ G& m. p& W - ),$ ~! r$ M! b# M8 Q- O
- ),
, F) d6 b, w* U& e0 s3 s) g - array(
) [9 W% f, d$ O. P6 q, J9 M$ O( r1 S - '$sort' => array("count" => -1),
8 d! H- n0 P$ u8 P/ b - ),1 ]& g% }' F- Q3 j/ R0 E
- );
. @! y T$ A4 N) S - $this->database->$table->aggregate($cond);
. f% x j0 z9 ?$ k% @ - }# y7 S& v; M1 T+ @
- /**. P3 B3 E0 T4 T8 F$ ~
- * 删除数据. P: @! G0 h6 |4 |
- * @param $table9 h2 ^5 e2 E8 ~- f0 `
- * @param $where
$ T, x( a5 J8 F8 f6 ` - * @return array|bool
' C @# f( r# v q& `. _; g - */+ N9 K, C+ ^5 u0 `
- public function toDelete($table, $where) {9 A7 F, W( ]; K. T b: l
- $re = $this->database->$table->remove($where);* e3 u, N/ u, \) ?4 I
- return $re;
( ^) z! @0 i/ [1 A! Z: p# W - }# K% e' N: _; D# N- I+ S# x3 t
- /**
6 p1 f+ U5 m( [. ~: c2 _ - * 插入数据# I' r9 Y' ^ a5 E# D2 ]
- * @param $table: y- j& j5 Y9 H7 r# j( Q- E
- * @param $data
4 i0 }( B3 e: T6 @3 j, [ - * @return array|bool0 c; ~& Z& N& |6 k: K; s' n* I- ?
- */
! C1 ~5 L I$ b. @5 ]2 \4 _. i - public function toInsert($table, $data) {
q8 `$ [/ b) y) }8 x- ~ - $re = $this->database->$table->insert($data);
/ i" O8 F$ p' P' r - return $re;' Q2 t: Y- t# o& K: O- t9 x8 J; i
- }
2 n. P- b4 @6 t9 p+ y. O0 g4 R/ d - /**
# p. Y6 _& l: w, x: \( e - * 更新数据( f+ i$ z8 ]) |7 ]9 X& q, s6 U6 T8 \
- * @param $table2 l8 O. E+ R) }5 C2 n4 ~, K
- * @param $where
2 I" }& ]. R" j u& W! y. }0 `5 W: ` - * @param $data
6 s( V( X0 _: | - * @return bool) f6 \" k+ O! Y
- */
2 E$ I/ Z3 N) n8 Z0 E; R7 ^/ H - public function toUpdate($table, $where, $data) {
4 w( S) Q# v* r' P4 R - $re = $this->database->$table->update($where, array('$set' => $data));% G& x3 [8 x" z! w
- return $re;! x) m' X2 x) P2 g# u ~% W: T
- }
2 p* L0 E6 ?! j% p! W - /**
' y4 P1 J8 ]& c1 Y e X" o" ^ - * 获取唯一数据+ @: Q% o3 o5 Z; p, y2 {
- * @param $table0 _5 F( j6 h q- b2 i0 C) {
- * @param $key# s2 o# E6 J0 n: {/ u& R
- * @return array7 T% L& @2 d" y7 C
- */
% t8 k p3 k/ f$ \4 c% N - public function distinctData($table, $key, $query = array()) {
$ c) _% K' X$ o- t0 H( R2 c - if (!empty($query)) {6 F! u3 b/ f9 [6 T- l6 V7 }1 q
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
$ b* t% R% o# X( V+ g9 `9 S - } else {
+ E" r# A& G" }3 B) ~ - $where = array('distinct' => $table, 'key' => $key);# ?0 O" m6 _, j+ o1 A" B6 _! N* C
- }
. b9 x' ^! D$ `. p - $data = $this->database->command($where);* _: O9 g `8 ^7 p( W
- return $data['values'];
5 K# C0 J/ ^" Z& T- y) R, \ - }7 n3 P5 q" u/ q$ A; u
- }
6 A# q1 a' H' C( ~' o - ?>
复制代码
. F$ T5 i+ c- ^- ~5 s- v" ?+ H$ F
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |