本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。* @3 a; o8 p/ T) i. G
模式自由。
( t7 R' M% s; ]8 P( N* c支持动态查询。
% p, o# B7 t8 B/ V" m支持完全索引,包含内部对象。- w! o( B- P) h9 m4 B( l2 f
支持查询。$ J( X* S. J0 p3 F9 V8 O5 S
支持复制和故障恢复。
# o( G: L6 ~. ^8 N7 I4 S使用高效的二进制数据存储,包括大型对象(如视频等)。+ `* c$ w5 q5 q8 X/ P0 l
自动处理碎片,以支持云计算层次的扩展性
" D# ^& r# |5 _; r4 n支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。' f2 l( x) D; @; |3 i
文件存储格式为BSON(一种JSON的扩展)% J! d3 Z% q& S$ X( g% c
可通过网络访问 所谓“面向集合”(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$ t! l/ |" h" x
- /**
3 L6 W! g8 [ \+ c - * PHP操作mongodb数据库操作类. X- c. b/ a3 V
- */" @3 G8 j! E, P* h
- class Database {
$ F5 n/ M6 u; ~9 {8 s& x - protected $database = '';
G R6 s! s8 G, b# l - protected $mo;5 C$ }" c4 F) |5 x& O
- /*** @: \" N- q5 }& q( L
- * 构造方法4 R# ^7 A4 Y' v0 k
- */, j# x* s8 P9 e4 F, k; [" L5 a |
- public function __construct() {
" P; i/ t# K# v3 Y W. q4 S V - $server = DBSERVER;7 R3 J$ A' L! E* D
- $user = DBUSER;+ o \: j4 i7 \: a$ e7 v1 r
- $password = DBPASS;
: x, k! R* m5 w- N - $port = DBPORT;
; h" u% O4 T8 q* f+ J1 z; ^# l - $database = DBNAME;
% g, h! w" m H( C" y8 ^* z5 D - $mongo = $this->getInstance($server, $user, $password, $port);. b2 {1 Y: L& ^9 U# z: L7 O( t+ \" i
- $this->database = $mongo->$database;3 F3 A8 g& z* ^ I
- }
" h1 s2 @2 v/ ]: \0 i - /**
: f+ p8 d4 L4 g7 f- j - * 数据库单例方法
3 M% ]; w5 I) u" K - * @param $server+ t- Z) j8 C9 g2 T
- * @param $user
3 T4 ]- ~# i+ ?2 j# O$ p - * @param $password
C, W' b# O( B4 h - * @param $port) Y! H7 m1 _; o, ?$ r" R @
- * @return Mongo
, @- p$ v: z6 O. D: J8 u2 p - */; `- L" h& b6 U! O
- public function getInstance($server, $user, $password, $port) {
; J( c! i7 B2 J - if (isset($this->mo)) {4 g7 o: j6 f8 u8 l6 z) e
- return $this->mo;& A4 D# Z: a1 |3 e
- } else {7 p$ P9 y/ c2 I J
- if (!empty($server)) {
% q3 c% M/ Y# k. j - if (!empty($port)) {( w0 c+ H/ j" G3 y! w
- if (!empty($user) && !empty($password)) {5 m$ W$ w( i, K$ J3 t+ i3 Z9 S
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");: e- F3 W+ H4 I8 i; y
- } else {
0 L& ?5 O: i: |; | - $this->mo = new Mongo("mongodb://{$server}:{$port}");1 y! Z0 p, x5 Z# |% V
- }) M2 l4 D) I" { ]' p7 p, J
- } else {
@$ U/ A1 N8 x# y - $this->mo = new Mongo("mongodb://{$server}");# ^2 p* `) f+ Y$ e7 I
- }
/ r u2 v2 z$ E0 b - } else {
: h. }5 A M* R- U- c. \! s - $this->mo = new Mongo();
$ o3 V7 {* @$ Q' t2 O0 s8 Z+ `6 K - }
3 @- B+ b# y5 d. }. x. u$ H - return $this->mo;
( e f/ Z9 n# `- u4 l5 o - }
! t- s+ n8 K7 ?. C0 x; Y - }5 n' B. ]& M9 J- n
- /**) `! y$ g- s. Z& ]1 e1 {/ y
- * 查询表中所有数据
1 ]" Y# x$ {5 L1 q4 }$ u - * @param $table
y/ ?- H* H& p+ c: H: ~& h6 j - * @param array $where0 E$ v/ m% J: L+ e+ n# a. t
- * @param array $sort6 J9 r& x% M. F' E2 G
- * @param string $limit7 O5 k6 F7 U W
- * @param string $skip% M+ l/ S1 h7 t$ @+ A, x3 X' {
- * @return array|int
2 L) m( f" l$ w1 D, m0 C - */$ d( |$ K1 k8 r6 `3 s
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
- H/ \6 |+ S# i - if (!empty($where)) {* `" w( X3 k- L q! Y4 Z
- $data = $this->database->$table->find($where);
$ S0 ~ {; S4 q* [ - } else {* f) T) K' l% K6 Y, t
- $data = $this->database->$table->find(); M- h1 X- x- Y# F* y9 K
- }3 ~. m3 z% a) u% _ |" C0 h: \
- if (!empty($sort)) {
3 E h7 @6 ~0 v* Q' D) O' { - $data = $data->sort($sort);/ O9 M1 ]! |# e+ @
- }) g8 s g" O* F. l v* P4 n4 J. ]' M
- if (!empty($limit)) {8 T& s- e: N$ @8 {
- $data = $data->limit($limit);# ]) q; V$ b t M7 E
- }
9 {) O) n: k; D! x7 s - if (!empty($skip)) {3 u$ i) {3 x; n3 e5 ^ C! M7 G) w
- $data = $data->skip($skip);! ^. }& }1 `$ ~( H3 G' |. \; x/ q+ h
- }( L3 f0 N- t+ W; x7 C
- $newData = array();5 Y4 g* ]& Y' M
- while ($data->hasNext()) {, \ J' U% j% a' S* J6 W
- $newData[] = $data->getNext();2 {" T6 f4 t" [( ?4 c: R
- }
: M$ D6 I" A% U; k- Z - if (count($newData) == 0) {6 F d0 A* z) l
- return 0;
4 x5 e" p; c: @6 c# | - }9 q$ _4 e# Y2 ~! {
- return $newData;
' {" o1 t# M/ l$ S6 Z: W - }
) T2 v( {/ c. M6 L: ~# B - /**; r/ U2 j% F9 ?6 `
- * 查询指定一条数据
6 ]9 ]5 C! i9 D) h: x - * @param $table
" ?3 c3 U! t/ t1 @( ~& F$ H, Y - * @param array $where
6 v! F2 h2 |$ m$ u - * @return int# E8 t' b1 o- B6 E: e( r5 z. b4 S
- */
* f" e6 y0 p+ p7 |2 ]- Y - public function getOne($table, $where = array()) {
, @ s2 q' x: c - if (!empty($where)) {
! k4 U0 ?2 e( H ?0 n( |* z% u - $data = $this->database->$table->findOne($where); b9 M; f; Z8 b' U. M+ h+ {4 r Z7 C
- } else {
% t2 d; o% u) q, ?6 t - $data = $this->database->$table->findOne();2 g6 \) ~' G/ g" B
- }7 C* E# U8 b) W X' M6 u
- return $data;8 V4 a; s% t& u) q& F f
- }8 p: C4 Y' Y3 y* c7 J6 _9 l4 t0 p
- /**
5 @/ p f6 B3 C$ B- t+ d/ ` - * 统计个数
2 r0 M" Y. Q. B' T1 ^ C - * @param $table
% E- u( R1 D6 @ - * @param array $where8 m1 w: y: K* H( l1 \/ U8 R; \
- * @return mixed
! J5 d F+ h l2 d' y4 h - */5 v& D8 }- H" n3 T4 q# V8 K. G) ~
- public function getCount($table, $where = array()) {% w( q' n2 s/ C6 A# c/ l7 v0 X
- if (!empty($where)) {1 ^8 c7 q- \' e/ X" y
- $data = $this->database->$table->find($where)->count();
) C6 f+ ~/ S- r2 T; ^ - } else {
' s* P9 V( Q0 \ - $data = $this->database->$table->find()->count();3 \0 d% `" X5 A3 Y5 w
- }/ n6 ^5 h" Y: l- `0 ]" m3 v
- return $data;
$ t6 B8 S1 M- |7 H - }
. z s1 Z: t6 S - /**, a( P" h7 ^- a+ {$ o
- * 直接执行mongo命令
2 C. ]5 f# N0 ^% n: q! | - * @param $sql
, |3 e- \6 { } - * @return array
9 e6 p- ]0 q* p7 L% {. Y/ c - */
$ G* T p) o2 v) q - public function toExcute($sql) {
0 m( [+ W* v. B5 k: w - $result = $this->database->execute($sql);0 G* U) U( P& M5 d
- return $result;0 Q m3 P# N$ O) h
- }
3 `. N; q9 U I1 w; m2 W# S - /**
$ [8 A' ~2 E# Q M0 _ - * 分组统计个数
' @3 N0 k+ E) Q3 ]. |% G - * @param $table
; B9 x9 {6 f8 Y0 u r7 D - * @param $where9 A8 B+ k1 |" y" R$ m& Y" H; r
- * @param $field
0 ]6 A) x# x! b5 T: B0 i - */
& ?( @ K$ s4 m' ^6 b7 F* x1 M - public function groupCount($table, $where, $field) {& S7 Z) o+ g: `' A( z: u8 |
- $cond = array(* \5 e4 \7 h" M" d" u$ U5 |+ O* q
- array(* d3 s/ K4 V& W
- '$match' => $where,
6 r: \# z5 ^* u( u$ D% D C - ),
8 T' x) g+ W0 L. {# x' x( W - array(- y8 L$ _9 Z/ Y9 |& [) v( Q, F: E
- '$group' => array(# t4 N m4 q1 [( D; R
- '_id' => '8 C* m/ B% o8 [1 Y( z
- * q# o( ?7 t0 ^, j( l
- . $field,: L* w+ i( h! A# ?- n
- 'count' => array('$sum' => 1),
* l2 L. t/ {. @0 h - ),' z+ }! p; w+ r. L" J) P' d1 _
- ),
/ d8 L+ v( T+ ~ - array(% O9 o7 L# Q7 v3 ?$ I7 E* v
- '$sort' => array("count" => -1),- l4 l+ r; u0 H/ _/ N
- ),+ j6 n& u2 [7 x: k" T+ ~ d
- );0 ?4 t: m/ u r' T& R
- $this->database->$table->aggregate($cond);0 `$ B" U5 q: _* f/ I* X' w# H3 ]
- }
4 { _% `- L& \( ?# R5 ]3 H8 ]# r, w - /**
' R$ D7 ~$ c' w1 _: x - * 删除数据 S. ^5 q2 }/ F
- * @param $table
# \7 h/ y5 H7 B( J - * @param $where7 d/ k s* e4 r6 u5 @2 I
- * @return array|bool; _4 o. ?5 T$ ^6 B8 Z) C
- */
0 h5 k. O' d; b - public function toDelete($table, $where) {
4 r( N) ?9 O7 ^$ t0 V - $re = $this->database->$table->remove($where);, u, X; u- u2 x' u$ z' F1 ^. W
- return $re;6 q' C& g; U3 t; ~3 U: e% s3 e2 ?
- }. Q0 g7 w" F. [) H" _! d. b; [
- /**
. ?0 q5 q: E% R! j* h! Q - * 插入数据
( H. t% L% C: W7 }8 ~3 ^2 l& U - * @param $table4 P. ]/ u$ A2 t8 ^( A
- * @param $data
1 p7 H* U5 F8 q7 K1 {4 j - * @return array|bool( u# a. _ ?+ k5 \/ P% D
- */% e5 e- j+ j: S
- public function toInsert($table, $data) {5 b( c9 z+ |2 @0 O
- $re = $this->database->$table->insert($data);* u, A Z9 R9 R4 b, a9 ^5 Z# B
- return $re;
5 e! F; [3 \9 d$ H' r" v2 g - }
" V1 l7 k5 m8 N; Z2 k0 [- z# O - /**( F7 V. t5 `; L& G/ k6 X
- * 更新数据
& H- e- o% t8 H9 y) s4 L - * @param $table% ^4 Y: F& z8 ^8 K6 o6 M5 A- D, B
- * @param $where
7 `1 r: V8 a; Q( f, R1 s, g5 n, t - * @param $data% e2 m0 K; @- t7 U, P
- * @return bool. W/ V! i, ?9 X. G& t/ F+ b
- */- V6 |: H6 D/ E6 c- l" [
- public function toUpdate($table, $where, $data) {
Z7 N" y9 M/ I1 E% L9 m [ - $re = $this->database->$table->update($where, array('$set' => $data)); ^3 i% H6 {1 d* U1 m$ \
- return $re;; W- P: g/ E& u9 {9 x
- }
) ^3 K: {* l. ~% W) ?6 I - /** r, G, m( O( l- B2 X0 s( @
- * 获取唯一数据- w9 b* g% P$ p" D5 Z$ h" q( a
- * @param $table
; t" j9 u& \' I; x' |5 I# } - * @param $key
% o. g! N9 I1 m - * @return array
* I# ]% _% f0 I' g' V - */" v# ]4 q) i7 P. l9 B
- public function distinctData($table, $key, $query = array()) {3 k T9 j( X. f' j, e# f8 {8 j
- if (!empty($query)) {) ^! q' E w' m* M( F$ n, x
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
! X/ K; f6 F; T. T( F4 o9 I5 q - } else {
' `$ }/ E9 K" o: k - $where = array('distinct' => $table, 'key' => $key);
% y" a& K$ \3 J% Y4 k - }2 `8 M) `. p, c: D
- $data = $this->database->command($where);# j# P: Z& Y3 c R/ b- |* O
- return $data['values'];" s8 n5 A# g; t0 B, v# {9 H5 w* E' d
- }/ Q: R6 Z% J* U' X( Y' ^# A
- }
, Y/ y1 n1 S, T: m3 V6 J - ?>
复制代码
7 _. [. M" @+ @- c
: a; v d& T. Z$ S" x8 @ |