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最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。
, W) u' C$ j) L) Y模式自由。% ^- h' c/ m0 S$ U8 y
支持动态查询。
, {1 Z) K8 [3 H( Y* Z支持完全索引,包含内部对象。
# s6 ` Z; i& d" ^- W& Q2 z, l& m支持查询。# |2 |* V3 Z7 R
支持复制和故障恢复。+ A6 i6 {2 n: x$ o% J) h+ \# B8 ]
使用高效的二进制数据存储,包括大型对象(如视频等)。
/ o( v: e' y" \7 z, ] @8 Y- C7 v自动处理碎片,以支持云计算层次的扩展性
, Z# _8 v" d8 h" \+ @/ Z0 ~0 X" n支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
8 q n$ V& }) @& W( x& ]* H文件存储格式为BSON(一种JSON的扩展)- l7 u. \6 Q' K" r @& f
可通过网络访问
所谓“面向集合”(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
7 Y* d5 F7 ^" k% x - /**
$ D. t% Y) d' K5 t - * PHP操作mongodb数据库操作类/ Q" @ i& S" P8 U4 D
- */0 M9 |$ r/ a7 n0 z! C6 Y
- class Database {
3 b1 [4 V) `; [& H/ \ - protected $database = '';4 H' H% B7 n3 e7 u1 q6 u# K
- protected $mo;
( V' q4 F' S& Q% {2 N& n - /**; x/ y/ B7 t+ J/ y( q5 ~
- * 构造方法
& s: h- p/ l1 ~# j2 ~ - */
, S8 o; \8 e+ z7 y - public function __construct() {4 i: N+ X% f9 G) d
- $server = DBSERVER;
6 l9 o, f' s8 { - $user = DBUSER;
' d, b8 \+ I; X* ~ - $password = DBPASS;
3 O# O+ `' X; s- O - $port = DBPORT;: t& I5 I) s' f3 h# v3 @! x9 R
- $database = DBNAME;
$ m) {( H- [" Z$ l' k, e0 C - $mongo = $this->getInstance($server, $user, $password, $port);
) F1 U* A" }/ s1 x5 ]5 n. u - $this->database = $mongo->$database;
/ s7 q' ?4 R8 J7 ]) u - }
& ?9 z9 w R6 A" F - /**: [% p3 `: d# W
- * 数据库单例方法
% C2 ^, i' R. a# F - * @param $server( s* O/ q/ _2 b* V
- * @param $user' ]: j# H/ O9 m
- * @param $password
% {2 x9 T( D" j8 a! u4 O5 ]/ u. }4 Z+ d - * @param $port
9 [' F" i4 T5 F8 X8 y - * @return Mongo
! z5 B8 E# k7 p, }# H - */
! R6 r* R3 H, j& P: B - public function getInstance($server, $user, $password, $port) {+ _0 @0 J7 d( k9 A" E7 `" k; O$ z8 a
- if (isset($this->mo)) {
- l* V# O& p( S3 U g l - return $this->mo;
" l7 Y( j3 `* t" S1 [" e - } else {
( H- B) l% S' l) ~2 G* u" M3 N - if (!empty($server)) {, F8 l* x8 B+ D g+ o4 g ~' `, G; V
- if (!empty($port)) {
: ^# m4 S. D/ M5 |3 ~ - if (!empty($user) && !empty($password)) {) B% X% j/ M; e' W2 C% m
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");6 b' q, I8 ~/ k8 ?& A: g1 u0 [8 n
- } else {( O& d. z, G3 f
- $this->mo = new Mongo("mongodb://{$server}:{$port}");; E* p+ d6 c! k! @' v; q' {1 g
- }
{7 J6 X9 X7 ?2 U% Q3 G' y - } else {
( m: k, j3 Y2 S% k9 E' B - $this->mo = new Mongo("mongodb://{$server}");
S( p/ g q4 C( L( k7 l- K+ R) i* Z3 v - }
) c5 b* y6 O8 `2 m2 Q4 R3 } - } else {
! }; v2 [+ Z7 f: {5 p - $this->mo = new Mongo();- R C7 n6 [) K) l' J; u
- }
. p+ H- I# i0 s - return $this->mo;
# C' M$ y' T& F. w! | - }
, j3 ?. c; @; Z8 D& J1 | - }# I% I. `7 G) a
- /**
1 Q W. H% ~& Q* d9 L8 T4 b - * 查询表中所有数据' i3 O1 z. A" o! G& a
- * @param $table" o- a; d" h1 t5 q3 p0 j( I
- * @param array $where4 O3 {1 P1 L6 C: y* \2 ~8 ~' C9 x
- * @param array $sort
6 t$ l8 S4 ~, a$ k m - * @param string $limit- X X2 {6 ?; O1 ]& I' g* w* k
- * @param string $skip
% h6 ?0 ]1 {( k: O" \( S - * @return array|int( w9 h& G9 v p9 r0 f+ `1 M
- */. ]1 K4 n1 r/ T5 o$ m1 {
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {8 n9 r2 j+ o4 q& M9 X
- if (!empty($where)) {& M- c" ~. L" ` M0 R+ f
- $data = $this->database->$table->find($where);
% z# J! Q9 A v4 [( t - } else {( A' d/ e; C* X. y% _& p
- $data = $this->database->$table->find();" [& I9 R% A# L3 V" D1 g; s5 r
- }/ q" l; c' Z7 V
- if (!empty($sort)) {
% J9 B* k8 g4 p0 b. A - $data = $data->sort($sort);
* A, A7 x& C) e. H' n4 D ~ - }5 g4 C; Y2 D( I. Y- N5 i" V6 @
- if (!empty($limit)) {" u. M. v, `+ x, P- W! Z
- $data = $data->limit($limit);
: ?! ~+ F1 \: \7 e - }
% `5 S0 n( `, T: B - if (!empty($skip)) {. f/ x+ y7 Z: H, d. Z
- $data = $data->skip($skip);0 m0 g+ M+ V7 p: C) \
- }' H9 O$ x: {( m" t
- $newData = array();
* b" \4 P/ u5 w: B( e* H' R3 K - while ($data->hasNext()) {
, Z% @$ ~) t, `) Y" O$ S - $newData[] = $data->getNext();
m7 O, E6 h3 ^7 C9 L - }: t( |% K' S- O
- if (count($newData) == 0) {1 U2 E8 O( m1 K5 B4 S
- return 0;
. f: B' P- H X' F9 t8 o U - }; I' x! M, h) n9 n8 V
- return $newData;; u% H9 _ D* \! L1 M( Z; A* B+ F
- }7 r4 V B4 B6 v9 e1 t
- /**
8 x9 s; P- E/ u! ` - * 查询指定一条数据
6 E1 T( M7 i0 x3 @6 c$ v - * @param $table; r: e+ ~0 A3 z& r) d! t7 O
- * @param array $where7 {% K- w' E% q) ^: T7 O
- * @return int
. l2 l6 v5 k0 T2 {# w: f, Q8 u - */
" ~6 D8 R8 S9 E5 G - public function getOne($table, $where = array()) {
& C; x+ e4 {9 \5 [ - if (!empty($where)) {3 T2 m7 L5 ?- A- X: @
- $data = $this->database->$table->findOne($where);
' g& s" z4 r4 x/ F1 S - } else {
% B% I9 X' s5 u1 P X6 q$ r& u5 D - $data = $this->database->$table->findOne();
" O4 Z* Y# s2 }& b% X' m9 K - }2 n0 K6 \( F3 H8 Z8 I4 k |$ u
- return $data;
4 W4 ~* A3 P) R6 M A9 \+ @ - }3 |- Y2 i$ }3 q+ M
- /**
9 s. y& v8 k8 Q8 Z1 [# p - * 统计个数, ~4 `" A& b: [- C9 @' j
- * @param $table( n8 i% M% k% J9 F9 K# I$ }# n
- * @param array $where
0 {' x$ i" {+ e) q - * @return mixed. _: o0 t: u: a3 l9 ]; A
- */! u: k' r' e( X9 }
- public function getCount($table, $where = array()) {
+ A# ?( y% J, s- f9 d4 _) ? - if (!empty($where)) {! l+ X% @7 H! l
- $data = $this->database->$table->find($where)->count();6 h7 D4 T. ]. R8 i+ L
- } else {
( Z. \- y, T0 m. p% E. Y" v! K - $data = $this->database->$table->find()->count();2 Q6 ?; o9 F' `" `/ @7 v& F4 ]- |
- }
- K; {1 R! E% b4 a. {6 I - return $data;" r7 b; X. A6 t: C" C( f
- } d5 b8 z5 e# v$ Q7 x
- /**
4 u6 m# b5 x; j0 `+ Q7 x/ } - * 直接执行mongo命令
" L+ t7 [. \& a" t - * @param $sql
, E: |. Z# Y/ E" s4 g - * @return array$ y3 v/ ~2 w/ v: N5 b- X
- */
" m# i: ^6 e! \; q! ] - public function toExcute($sql) {! ^0 u0 R8 ]- W& @9 P) O$ r/ m3 t
- $result = $this->database->execute($sql);3 b# o0 J# K2 O N Q# c5 j
- return $result;
/ i: y# j7 V- Z. y5 Z) R) B - }9 \6 ^& N7 l3 K, s, w) _5 ^; v
- /**
% e5 R2 u, b9 f* d+ ^) ` - * 分组统计个数- o( [* X) k8 ] y. F
- * @param $table/ ^6 O8 |- g( R) O4 l. e
- * @param $where& v/ ?: I2 F& ^; d2 v4 l0 O4 Y% g* @
- * @param $field% `$ t5 y" L8 D y1 h8 b+ b
- */& x/ }( Z2 T1 ]9 b' K
- public function groupCount($table, $where, $field) {
( l7 e5 r' ]( V. P& H9 R$ @4 n - $cond = array(* {' l0 U+ p7 ?/ v- b& p
- array(2 h& F# ]- \9 Y- N. E: h6 M; S( Y
- '$match' => $where,
" S% H& b; I. @! y - ),- J+ f1 }8 q8 K' k) n9 O
- array(
2 l8 g* Q2 V- o" A' K - '$group' => array(0 n/ P7 j1 k B) k
- '_id' => '
; m' D/ q% r ^2 `
# {3 s7 v0 X% x9 ~- . $field,
0 ~1 Z: C: A+ K; T: S - 'count' => array('$sum' => 1),
# ]. j1 d: h* N/ k6 N( t - ),% w3 `# t8 Q G; l$ o; S- G. U
- ),; C* a9 z9 u. E
- array(; x6 c9 R6 N5 _& O
- '$sort' => array("count" => -1),3 U- S9 R+ @( Y' S0 h* X
- ),( v, G' O4 v) Z7 {) Y- c
- );2 y9 P. ~3 W/ O6 `0 @
- $this->database->$table->aggregate($cond);0 q ^& A, p2 t# D v' h' J
- }
1 ~. s+ z% W3 Q6 D) C4 H - /**
; ?6 X8 @0 Z' E" T' s3 S - * 删除数据, ~9 s0 G7 c8 S+ R
- * @param $table- ?8 o* P9 \$ U; u
- * @param $where
, O5 N, l+ r! W* a! r1 F i - * @return array|bool6 }/ I, B( D* O
- */+ S+ y) |4 Q; k
- public function toDelete($table, $where) {# R* L Q1 u) ^. |$ C# l
- $re = $this->database->$table->remove($where);
/ U% s* v! L5 K3 e2 w$ j) W - return $re;" q! l( q8 |6 N. x- ~2 E
- }) V! }4 R! j9 W. P/ o- y* F
- /**
5 H3 ^; l0 P: w+ F - * 插入数据8 X# C* D) V! v1 q$ U9 Q" j0 @; I
- * @param $table K0 V9 v& A; {
- * @param $data
+ H- V/ d, j. }9 d - * @return array|bool
) J9 h/ J% ?: {; B& _" c - */
8 D" J4 g6 {4 y/ K; g) K0 T+ H - public function toInsert($table, $data) {+ }; l6 D: p: [# M: x% i
- $re = $this->database->$table->insert($data);# y$ b# p) ?8 f6 A
- return $re;
, O- h2 |( C7 X& f - }
" E) t% W; F1 z3 w" ~ P& T - /**
, @; w. V4 K+ j% g - * 更新数据
! }; @; O+ F% G' N- @9 H - * @param $table- x) J4 j( _: |/ C
- * @param $where
( T1 B0 D8 d) Q- `7 T$ V7 h/ ~* O - * @param $data" P$ S0 H% H; [1 a
- * @return bool
% P, [1 c# I# U( U7 F; c) c3 B5 F - */
7 [8 s; Q( Y6 L, c - public function toUpdate($table, $where, $data) {
, ?5 \' Z/ K: f5 U; l1 A; ]; t } - $re = $this->database->$table->update($where, array('$set' => $data));" z8 Y u4 t- r$ K) {: v
- return $re;" h! K7 r" L7 z9 c
- }, W; P( t' I. h! e
- /**
3 ]! u8 v. x8 b/ b. G - * 获取唯一数据; S% J+ j2 B6 A7 [# x/ P P
- * @param $table
4 S7 E5 ^, t. l4 G- @ - * @param $key# f* H& b6 y6 R
- * @return array
" w7 S$ A7 ?3 e - */
) n; r& o9 O$ {( a- Z6 E$ S1 G - public function distinctData($table, $key, $query = array()) {6 j) @! F8 F0 g
- if (!empty($query)) {9 i: K/ G& _' e; R1 f: q' M1 v
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);5 b& f1 f, s4 K) r, y( ^! `$ M
- } else {( F, p3 W7 e/ L: S- x' s1 o* V& F) Y
- $where = array('distinct' => $table, 'key' => $key);
& ?/ ^: \& ?; D1 V: \ - }
7 X; z3 z6 Z# c: E( C$ E/ i) _ s - $data = $this->database->command($where);
7 i$ T6 d1 R1 `# c" [6 q - return $data['values'];$ S5 ^2 Q: E7 b: G* i; S# a) M0 R
- }
# ^ R7 C6 \- `0 y L - }- H& j0 w, q) `0 {& N$ \
- ?>
复制代码
`* a+ A; p W4 a/ g( q1 X: k; w. h
- ^& A9 ]8 f, s. w. y
欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |