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 F' p! L/ J* \
模式自由。- K- c0 I7 b( q7 b, i! R: W
支持动态查询。
3 s2 S& a% ]$ T& @6 J支持完全索引,包含内部对象。1 y2 t5 F# r$ e
支持查询。
7 m6 R" E: o& L4 Y6 P8 z支持复制和故障恢复。9 i9 F q9 v4 o* U! w ]6 B
使用高效的二进制数据存储,包括大型对象(如视频等)。" x9 D! c+ q9 R1 }
自动处理碎片,以支持云计算层次的扩展性& P. Y+ l* @2 u8 S" t' I6 |
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
0 z& G$ s. I5 h文件存储格式为BSON(一种JSON的扩展)3 b* p! ^, j9 d
可通过网络访问
所谓“面向集合”(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" H- k+ l/ ?( R- o% u |; i7 I
- /**; K h5 O9 R( q
- * PHP操作mongodb数据库操作类
+ |( q% ?3 M5 G5 r9 a7 g' F - */
6 H" s4 f# A' X m4 U( e - class Database {% L% ]4 {$ G$ w% V4 j3 Y- _2 ]" ~* X
- protected $database = '';: S4 m0 \+ a6 H8 a8 R$ c
- protected $mo;9 l6 [& [ g/ V* p- U: J' n. {
- /**0 N, B+ f) {; Y3 C- t) {
- * 构造方法! _, H7 U: s. e/ d# w3 g! [5 S
- */. }( w2 \$ Q2 @7 o$ S; J, p; V
- public function __construct() { b7 f& v2 ~3 B! v$ L! F
- $server = DBSERVER;
. V# w! c4 K! e3 h9 d - $user = DBUSER;. Y2 M5 N: M1 @: e' J+ j6 H8 s
- $password = DBPASS;
a! O2 Z! D" H+ d - $port = DBPORT;1 n- ]* A1 M( K' q g2 F& x
- $database = DBNAME;
, {4 g+ f& {5 K1 |0 V4 {/ | - $mongo = $this->getInstance($server, $user, $password, $port);
' u9 t* `" Q4 ^' d% i - $this->database = $mongo->$database;
/ c% |( S% Q- o6 f - }% s+ k K1 K2 H/ B
- /**$ R6 X) [" x* K* K! V" ^, R
- * 数据库单例方法+ T7 _" r, @2 O1 ?/ q3 v- q* Q0 p+ B
- * @param $server2 J/ M# t; I/ B: _& z4 V3 c& z
- * @param $user
: o4 _' w d: t, T - * @param $password+ k0 N% L1 a$ }7 n
- * @param $port- o7 x: o5 s6 i# n2 K6 [
- * @return Mongo6 Z6 S" b! [! o3 f: J5 J! n
- */
2 h- ]1 J5 H; z - public function getInstance($server, $user, $password, $port) {
* s0 V* A9 W$ d0 j' L( K" O6 I! M - if (isset($this->mo)) {
! ~4 E' x4 ^& S5 O7 S% T - return $this->mo;
1 V3 R1 a2 S. q |' M - } else {
# l3 n6 \. F7 z/ ~2 `. K - if (!empty($server)) {
$ b7 N& v! q8 V2 c4 b4 A - if (!empty($port)) {# m: q: Q& u7 s s/ G$ p
- if (!empty($user) && !empty($password)) {
# }. {: O5 t# U5 @2 L6 E3 a - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
+ J( [$ ~$ v- j7 Q% c5 @" P - } else {
( W @1 X8 ^: W* Z: c& n# d0 P - $this->mo = new Mongo("mongodb://{$server}:{$port}"); |) `6 Q# E7 h, {5 n
- }
* G3 `) C2 K3 f - } else {
7 L& ~9 X' o3 |% Q4 g - $this->mo = new Mongo("mongodb://{$server}");
3 H0 W7 d2 \7 b" [/ l - }: Q: L. [( _, x
- } else {& t" u& d* E8 Z& _; J
- $this->mo = new Mongo();( ?+ {6 ~9 i/ [6 `/ I$ `) J
- }2 |, c/ G6 M& W; A
- return $this->mo;9 Z: V1 B# m1 `( T
- }" A3 E. { Q9 Y- [( a
- }
7 K6 v* N& o8 O7 [; D0 g - /**% P* d/ I" c) k5 M: U E& j5 l
- * 查询表中所有数据
3 {! q. [# u- n( P - * @param $table% W8 e0 c( C; z5 [1 b
- * @param array $where
2 E9 d0 ~" J$ L G - * @param array $sort
% ?* {0 c1 ~$ D: o7 e% ]2 g3 d& r8 D V - * @param string $limit" B8 U' Z1 M0 N0 t1 w1 G6 F2 l" I
- * @param string $skip
8 g% q1 r7 [6 w. j2 m J - * @return array|int3 N& G( v0 W. L0 z+ u7 G2 i& E
- */. p; a. s, q Z6 S: J
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {; C$ h2 Y$ k+ K6 P* @
- if (!empty($where)) {
0 x+ f; o9 r. @ - $data = $this->database->$table->find($where);
- K6 x, T) [; X3 v- Y; q3 P. v3 a - } else {) J3 ^( L7 S3 d9 X n
- $data = $this->database->$table->find();
" I6 Y: g4 O3 ^3 T- E! j - }# y m( u( | |2 x' \, _" y4 f* k5 S6 p
- if (!empty($sort)) {
$ i* t! r1 D- n9 x - $data = $data->sort($sort); x, p' R+ T7 D5 V/ z s0 f
- }1 }- l9 g& k. u
- if (!empty($limit)) {! F' Y1 y, M; L
- $data = $data->limit($limit);
$ }2 E5 X% k7 j; g - }
% v. @3 w: p" L" n8 G( N - if (!empty($skip)) { n: ?; ~3 ?+ b/ P6 f# i
- $data = $data->skip($skip);
/ l2 e! P$ }. j - }* ?0 x" A- c# T6 ^3 |* A
- $newData = array();
$ i3 I; z0 y! E+ K1 x v* `3 u - while ($data->hasNext()) {
' {# u* P# ]% P2 t. s - $newData[] = $data->getNext();
) B5 W: h9 v' Q1 f - }
! ^1 F) I b. P3 `3 n* M - if (count($newData) == 0) {) M; g8 x, u, o ]9 s3 Y% h- l
- return 0;
: X" M9 M# }1 F0 Z - }8 A) [" q1 J" D8 e% B
- return $newData;, o) q/ L- U2 p! p
- }
% \9 k: H* i' ?5 _ - /** J1 e; R" \7 |; o) g. c
- * 查询指定一条数据
5 i/ i/ A0 {+ ` - * @param $table
3 g( P# o6 p- K% \! n/ d - * @param array $where
' }0 b' Z/ _$ g% Y# S: d - * @return int0 U; ?) ]* j6 {2 r7 |: S
- */
0 M R( P! a* G6 } - public function getOne($table, $where = array()) {- l4 m+ c* A+ T
- if (!empty($where)) { \# M: A2 w( I) y$ E3 E
- $data = $this->database->$table->findOne($where);% z2 ~7 F8 A' X" D* n
- } else {
' V- h1 l% [; a" D( \5 W - $data = $this->database->$table->findOne();+ i* _) r/ Q7 {5 j* z- M8 Q
- }7 Y- R) f4 P6 l2 Z$ p
- return $data;
, O6 A/ q1 J2 A) F - }
+ x6 v x- N7 |7 v - /**8 K; F; |& g+ E) u7 C; k: V7 |
- * 统计个数
7 z; X1 @& T6 c& h - * @param $table
6 N1 _4 E% D1 c2 h" |# T4 S - * @param array $where* _7 \" B6 v- M" @# @
- * @return mixed
" H. t ~+ L( v P2 l& O - */
6 _! f1 E6 r+ S/ I a: T4 V0 u - public function getCount($table, $where = array()) {
/ T2 _( J6 m+ C, @6 J) T- D - if (!empty($where)) {- y$ \$ h0 O" S* g k L! l
- $data = $this->database->$table->find($where)->count();/ a5 R; c' V% z3 S/ R. |
- } else {( K, n: m' c0 B }/ I; h, G
- $data = $this->database->$table->find()->count();
9 Z$ C2 X5 ]9 A9 W* G' O* K7 Z - }& q! [& {+ h9 l! Z1 d S
- return $data;/ |) Y) H0 E4 V4 s, g9 z
- } }$ x( M, S) C+ |% t
- /**
! A) V7 X# d& {- |, A1 b3 x% M - * 直接执行mongo命令
* e; s7 K/ o3 b9 d6 j( u9 }* w - * @param $sql
/ S0 F8 \: W5 t! c% V - * @return array, {! [1 p) h8 h/ ^; o6 ^
- */
1 R) r6 ~ C$ `3 N0 y1 G$ G - public function toExcute($sql) {8 T) C5 G( B: Q* ~4 m6 k
- $result = $this->database->execute($sql);2 I+ f) W4 a9 i, J5 _6 l
- return $result;
, P; a( |' F; m9 ~8 G1 F - }6 n7 g. X6 A5 ]# j3 @8 ?" Y, J
- /**9 [8 i z4 g3 e2 v9 a% N: G
- * 分组统计个数
& S7 W3 W5 `: t* ^: U - * @param $table
5 O7 w1 Y# K/ K - * @param $where
/ j8 F$ f/ A) s - * @param $field
5 f5 e, b& @+ n3 g @/ P; ? - */. k+ b& K3 Y9 C6 k# ^
- public function groupCount($table, $where, $field) {9 `+ {- w4 _: r* g% L. C
- $cond = array(: z Z! I; h2 w- g Y
- array(
) |& n8 _7 W7 q6 V+ M; X- v( L - '$match' => $where,8 j- k9 G- Y# S H, x, X3 f
- ),# W5 e' U% P$ u9 m
- array(7 v# @, b( C# B$ o: a9 q. W
- '$group' => array(9 A4 M) h/ B+ ^7 E
- '_id' => '* W, b( w& p- L: V. m7 o+ `
- # B" @: z7 `* b- u+ Z! [! L6 o
- . $field,# Z' B$ K9 u, @: ~
- 'count' => array('$sum' => 1),0 Z) K6 _/ x5 ~6 }; i( x
- ),
- l+ @8 t# u( y" D, F* p: p - ),
+ Z, _( X, f' y. E - array(
, c1 b( S- `/ ?4 Z9 [2 m' a% T - '$sort' => array("count" => -1),' S4 l. T5 L9 J2 r9 w4 W/ d
- ),
) J L9 B% C& A. Y, N6 c - );9 P. \" H$ v$ j# T r4 f1 c
- $this->database->$table->aggregate($cond);+ H% \) {) f4 [4 ]! l0 a
- }
+ i; ?( y! I" H - /**
2 p/ H' ~5 A( J# _! v( w4 S - * 删除数据 r2 T! S5 A7 f2 C; w. S
- * @param $table1 U8 S" Y ~3 u+ p; D5 t) _
- * @param $where
8 Y* X$ e0 @6 R* v8 i8 e - * @return array|bool
. A% U* ?8 o; M& `# U; ~7 P - */
; w' z6 J+ u) b - public function toDelete($table, $where) {
9 F- t/ c( [$ y. A9 z3 k - $re = $this->database->$table->remove($where); x- ?( I. K$ S7 l3 M/ n
- return $re;! g3 b4 s4 _' U% k* u* k, L
- }
" Q1 K2 G( Q2 Y0 D( A: w" ? - /**
Y7 X! J1 J4 z# K; L - * 插入数据
1 l, ^" o$ s2 Z1 F" v. P - * @param $table
; s! j$ Z( }; l! @! C - * @param $data) x2 X/ I7 F) E* y3 l
- * @return array|bool2 O3 I: F9 B9 H
- */" p: A, F+ S( Y/ I
- public function toInsert($table, $data) {4 E3 l: X8 f% Y& J! o ?: |2 z
- $re = $this->database->$table->insert($data);
6 R8 R2 M' {' n - return $re;. C+ Z+ e. x4 j/ F" h
- }
9 M1 f# A" @( P6 E7 _. z - /**6 m& @3 P6 Z* H, }) K) y I4 u0 _
- * 更新数据
V& y5 o ~- I* c8 a3 J - * @param $table
/ x2 S, b' y7 T2 F# e - * @param $where
2 M7 r! O2 p, M" _& d& I+ f - * @param $data
6 f) g9 D- w! |& t% t% g - * @return bool
; t) |$ C* r, W! d& T. {% o - */
2 O" Z8 S; Q* o9 l1 r - public function toUpdate($table, $where, $data) {: t% r$ l* U! o) r. t1 O+ n
- $re = $this->database->$table->update($where, array('$set' => $data));
- U2 Q. f- z( R% g5 A - return $re;
- C$ U3 W/ S4 o ?4 c - }
, g+ W. J Y4 |2 ]! d' w: U. j - /**
9 d' r7 W! ]/ X - * 获取唯一数据% g4 K3 b7 Y5 y+ _$ j) D# g3 G, _; ]/ v
- * @param $table' f" C4 m, m1 y1 H V
- * @param $key
$ {6 T2 b' D% s$ S' C0 a( ? - * @return array/ S' f; }3 x Z; K) t8 e# _
- */
# a, W/ X8 G' _: X; M - public function distinctData($table, $key, $query = array()) {
1 J' v$ O( m5 i" H# D* K* X - if (!empty($query)) {- k! p( O- ?4 X
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);7 I3 S6 q' X8 A" K
- } else {
% J/ S* E0 q1 g7 P - $where = array('distinct' => $table, 'key' => $key);
3 R! [; B6 Q# I - }
) W* d! l% p) B+ B - $data = $this->database->command($where);
) d7 _' ^; \" L* A: m9 f - return $data['values'];
3 t [/ F* y: y6 I: f - }
1 V- ]: }! k r4 k L - }. n( d6 b7 \- @+ i, e$ u0 u
- ?>
复制代码
' B( M4 A/ {8 l' ^5 a- d, x4 t; S' r4 N9 R% M& `( w
欢迎光临 cncml手绘网 (http://cncml.com/) |
Powered by Discuz! X3.2 |