本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。; {% P1 d) Y' @1 h9 h. D2 K
模式自由。" k; j' ~0 \) I
支持动态查询。4 F+ b0 t/ x0 l4 I+ \8 M
支持完全索引,包含内部对象。
! o, o( r* Y& X5 j+ j3 N支持查询。* @4 s3 j; e7 P: B+ i
支持复制和故障恢复。
$ G& J/ n: R+ F; x3 @# F使用高效的二进制数据存储,包括大型对象(如视频等)。2 T& G, H) i7 H O- F; O
自动处理碎片,以支持云计算层次的扩展性( R. q1 e' Z8 n+ |4 y5 L7 A
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
* M; q# j2 H: m' P* R" M文件存储格式为BSON(一种JSON的扩展)
, s' f4 f( U& w# k可通过网络访问 所谓“面向集合”(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 t4 r1 W$ z$ L" I0 Y( _! K - /**
4 P, i% i6 P# E2 ^" _) _ - * PHP操作mongodb数据库操作类
7 C5 ^- D5 u9 M$ N - */" |5 z/ j4 M; G7 J* d: B
- class Database {6 ]+ f0 H( U7 i, ^4 S9 x- W8 J0 b+ ~
- protected $database = '';! `4 ]( y: B/ B8 S$ s: i
- protected $mo;: @+ S% a" { f" K, X/ a
- /**
) a) I" ]9 J# V6 S' J - * 构造方法
% W4 [7 V2 N. H3 k# Q - */- Q9 M, b5 v7 `' V% j
- public function __construct() {) _4 D# D+ j+ |$ z+ T7 v
- $server = DBSERVER;
5 s$ V. I- B/ r) P$ c$ A" h I - $user = DBUSER;+ d" s- G4 ^2 U% y( q# _
- $password = DBPASS;
4 O: {' I" A# k+ h. f" H6 { - $port = DBPORT;, x* V' j$ _( r/ `: \( E
- $database = DBNAME;+ [! p! d; p* o( s' V0 [2 S
- $mongo = $this->getInstance($server, $user, $password, $port);( D5 b7 w$ q# k9 `9 s* h6 Z2 E
- $this->database = $mongo->$database;
, F5 Q# H% P" p$ {, n6 y! R2 N - }
# [% r/ V' S1 H$ M+ n - /**7 _, g" R. M; g( }5 T
- * 数据库单例方法6 K# O, J: a# K3 y# v
- * @param $server6 z# S: z$ U& d T+ n
- * @param $user7 d8 s6 ], o! S% A3 ~
- * @param $password
+ J4 c8 Z+ a6 ~# W - * @param $port/ [% ^, |% H) M- l
- * @return Mongo
: J# f5 Q9 T0 A u" x - */
$ I, O# `7 l0 X, ` - public function getInstance($server, $user, $password, $port) {
3 e7 ]! z" Y" ?3 l, C i$ L( ] - if (isset($this->mo)) {
$ d. O5 f& B$ U# w. K* x - return $this->mo;
' o( [, @. @+ x - } else {0 x% p- P4 u& Q4 ]9 [! q
- if (!empty($server)) {
% U8 b' m/ }9 `3 X# v6 s& N - if (!empty($port)) {
+ I+ ]0 ]0 P, J0 o - if (!empty($user) && !empty($password)) {
! x& B6 |" z- p7 \% j - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");, o% {# Q7 f# O o3 _2 S/ W
- } else {
2 _& m. E: |/ y - $this->mo = new Mongo("mongodb://{$server}:{$port}");0 I3 {, I/ v$ A% H0 F
- }1 _' n1 m' [7 A2 D3 h( k
- } else { |3 `" c4 k" N& `# }
- $this->mo = new Mongo("mongodb://{$server}");: L, z( Q- x, F& Z7 I
- }4 F& b' z9 o8 g# [- _+ C
- } else {
7 W- p% r" ?5 Z% e3 ` - $this->mo = new Mongo();" Y# o% ]! r! h& \: a
- }7 z. D( [ Z9 C' e& d
- return $this->mo;) m) e$ c: X: N* y
- }
% v1 D' D% E7 R, E- d4 L( Y - }
$ ]0 A7 s2 F4 M0 ?0 ?- d8 l - /**
. H+ Z) S3 P1 a8 o8 ~* m - * 查询表中所有数据
~1 }8 @! E7 I; A/ _1 s% c+ m: w( g - * @param $table) a8 ^1 f2 j$ G; D& z
- * @param array $where
8 H/ j6 b4 P( p- q" C t - * @param array $sort5 O: u0 E( V7 y
- * @param string $limit$ \% d( L( o, k/ P% s6 ?
- * @param string $skip0 D& z3 ^7 `3 m
- * @return array|int' q* H$ C) Y8 B9 Z6 E
- */0 J1 a+ ]3 _ W# n
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
5 Q) B) g6 p1 k# w - if (!empty($where)) {
9 N: D9 V% T0 C( x, ~ - $data = $this->database->$table->find($where);
4 h0 A! o8 Z* v2 D - } else {/ I0 b* S, k$ N% a2 D u
- $data = $this->database->$table->find();
4 ^ V" _7 p( m9 } d* k/ u6 ` p f - }2 V3 N. f* g7 A/ g+ K4 v+ ~
- if (!empty($sort)) {" g1 q" [! y. b6 X5 G/ ~; _0 d
- $data = $data->sort($sort);- n1 p# N" S. \9 ]
- }
3 h( U; H4 D% M - if (!empty($limit)) {
9 _' y7 b( g( Q* ? - $data = $data->limit($limit);9 G9 i d( R- V/ n d# S, ?; v6 v
- }
$ l; d2 E3 h/ u - if (!empty($skip)) {
; J8 `* W: L# y' e: v" g X5 X - $data = $data->skip($skip);
1 K5 h" b9 J. J% m - }4 u- r. B$ z& N
- $newData = array();
7 ^, [/ C( A* H0 q5 ? - while ($data->hasNext()) {) _- K, z. t6 B. L) x( i- F( j
- $newData[] = $data->getNext();# ^5 \2 I; {) v3 P0 u0 T. f
- }' Q8 P; h0 y [
- if (count($newData) == 0) {3 v( r* G' x7 Z% c }1 p5 X3 j
- return 0;
+ h4 \: f; d3 Q. S# X5 U, |% W, @ - }
! v, }7 ]. j8 m+ N7 o - return $newData;
( A a! B* d7 E7 K x4 m, M5 c8 N6 @" X+ @ - }
6 N* O+ s* p8 |- X' J - /**
9 V- \4 s3 b# i- S; `8 J. A - * 查询指定一条数据
" d8 O0 W. a% p2 J2 S; m9 O - * @param $table
* l7 ]+ _8 _9 p# Q4 Q. ] - * @param array $where
3 j8 w% L1 N! e$ E, v - * @return int
P, }# x Y/ W9 h# U' a - */
8 o$ [: o9 c& {2 o - public function getOne($table, $where = array()) {
; E2 Q0 b8 y2 i" V - if (!empty($where)) {
' s( n* j! ?1 o* W - $data = $this->database->$table->findOne($where);
4 ?- ^5 [) F8 G& q6 d5 y' F) m& ~ - } else {
, }2 o. h8 A/ g7 y# i( k8 X - $data = $this->database->$table->findOne();
. r1 Z9 Z* t6 P- e) j' q* p - }$ s/ S/ K# n% K8 S0 n
- return $data;
$ P, m$ K- c5 e# }9 c - }) `. b8 I! C; T9 r/ p# t" G) P
- /**7 w( x' D) C2 n/ I, b5 w! x
- * 统计个数
# K# H" A, z9 |! p; {# @ - * @param $table
7 e& ?, ^( W: b1 [# ]4 P - * @param array $where
) b/ g+ h% k4 [0 L' u - * @return mixed2 S8 Q. s4 T- `# z/ s/ }8 E
- */
1 _( ^! A1 S% s+ \; `$ e - public function getCount($table, $where = array()) {
5 Y) r6 ^ H' j, A - if (!empty($where)) {
- p- ]) ^4 @- f* ~1 _8 Y0 c - $data = $this->database->$table->find($where)->count();
7 X5 S6 M* e) Y" j8 p' d1 K% Q - } else {; w3 }0 [. X( R' ]( j: A2 Y1 x
- $data = $this->database->$table->find()->count(); i3 R1 E# r2 M2 I. d: E% ~
- }
2 t8 A G# L- @! q - return $data;
, e4 K$ ?" X) w% f' h+ A) W `" A - }( u( w' r% Q* a) m( |' b
- /**6 Z( O6 S( ]9 P0 p
- * 直接执行mongo命令3 _3 {# W' E7 {; V5 q7 `9 n+ f
- * @param $sql
; [" y& B) P% M! c5 Q - * @return array
3 P7 q u* P- Q - */
2 I+ M! M2 {* A - public function toExcute($sql) {
" ^3 k4 L' n* E$ l/ Q - $result = $this->database->execute($sql);! u: f- m% R- \1 \" i
- return $result;9 R, C* [. O# I! e
- }+ t, A v: Y; p& e2 L* k) V1 A4 I
- /**- Z5 F! W" d: d" r# c+ W
- * 分组统计个数+ g+ A7 x4 |/ ^* T+ ^- ?1 ~1 j
- * @param $table- ^& H" m4 [. T5 C0 v7 m3 i; e8 i: t
- * @param $where
# o! Q, A# n' h+ L - * @param $field$ G3 b/ o/ H/ d7 J5 Y% E" h$ ~
- */
7 A/ x1 K& v4 v4 \: r' R - public function groupCount($table, $where, $field) { f+ `( [. z* c: B7 d
- $cond = array(
# d& T4 ^! P) h - array(
: U8 k0 V# p) x: ]- L, G6 c* h6 O# r - '$match' => $where,
% o$ _. R# b; V - ),9 b# O3 N) I4 \3 A6 m
- array(& M8 C7 t5 i6 R9 B$ q4 R
- '$group' => array(
5 s# q: x3 a' ^) J - '_id' => '
- d& i% H9 }5 i' H - ! Q+ I3 e0 `5 v- p. X/ H+ r& x
- . $field,
$ K s2 e) r1 B7 W - 'count' => array('$sum' => 1),! e- S5 w8 b% H
- ),0 Q9 n8 p, c7 x* j
- ),
e; i) ~2 Z" R; b2 Z, G - array(1 ]( r) v" q) Z7 ~
- '$sort' => array("count" => -1),
6 L# R) {) \/ b* u) p1 Y - ),0 [ G; N5 {4 u$ i; N
- );
1 d) B3 y, r% H5 |" K0 s3 ?1 t8 L - $this->database->$table->aggregate($cond);
! x' a' Y- n; V2 y# t$ H6 i9 L - }
. V, o6 ]& E) D' H6 z2 i - /**2 y3 P/ S1 ~0 P( X2 P3 h$ U
- * 删除数据
, n& q1 x, [7 `$ E4 f; H( k - * @param $table! I5 ^( m5 p' K. h' m
- * @param $where
# l. [; s5 @ |+ q6 y: h/ J- ] - * @return array|bool
; h2 H; [( x! r" ]2 j - */
; P1 t1 }! t3 m+ `8 f - public function toDelete($table, $where) {. v4 b4 y8 t' l+ T% B( ~; i
- $re = $this->database->$table->remove($where);
: F9 j0 m# ?0 i2 `7 W( [, ~9 y' w - return $re;
5 v z7 S6 m* y9 K' W: ^ - }
+ q! [3 @5 J: }# X, V% T - /**
! M" c) Y( F* w; q - * 插入数据
/ v4 L) V5 _* U9 y - * @param $table
6 E, w+ R) a' n& q - * @param $data7 d0 r4 t$ }5 O% C
- * @return array|bool
1 Q0 u1 b* R2 t# E - */+ | \2 P, `- g! c- D$ Y9 }
- public function toInsert($table, $data) {& y1 m n5 i" j, l0 T
- $re = $this->database->$table->insert($data);
3 m: j( m; N" b+ `8 w# E: X - return $re;! ~6 Q/ c1 W" t5 E1 |9 j4 ~/ g
- }
) e" J6 C* i4 A - /**; n1 j2 s& @( @: E2 i. M) F5 x
- * 更新数据
0 R% x7 X, O) M: I - * @param $table
3 _! T7 \9 A, k; @ ` {3 m' K ^ - * @param $where
: Q* [1 a0 V3 s, y& [6 q7 ^$ [ - * @param $data* ]/ @# i, }6 F. I
- * @return bool# T( C1 }5 A+ G: B$ q. w# @
- */! j' d6 ]9 K. X$ f; ] o
- public function toUpdate($table, $where, $data) {
3 o0 X1 }3 I# ~ - $re = $this->database->$table->update($where, array('$set' => $data));
- I& X; y: P( r% |# b - return $re;. F4 [. }/ K$ m. x( n
- }( h3 L- k# s/ Y: \& f
- /**
8 o4 ^0 d/ t6 f( g z6 i2 C* ]" t - * 获取唯一数据5 w' r; {! g0 I" ^) Q; _" R* ~
- * @param $table3 O$ c! N1 |5 v% d, Z5 P
- * @param $key; u) K; U U) M" Y- q
- * @return array; \: O6 _6 m8 _3 v' R
- */
/ W3 u8 N! ]# O! ^8 k+ b - public function distinctData($table, $key, $query = array()) {
+ ?+ _, U) L- n( ^2 D1 H - if (!empty($query)) {
% n9 v3 v/ e2 W - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);. ~0 S& \+ P7 l' L8 I, y/ u
- } else {# _$ V$ x! B! G) c' ]
- $where = array('distinct' => $table, 'key' => $key);( @+ a) z7 q; A# b
- }7 C5 |9 C8 b \: q
- $data = $this->database->command($where);
: M; @7 j" _- G) b - return $data['values'];; I5 {7 n: |6 u, c8 k; H
- }
/ H- g6 }% w, n - }
, z! e: G( e- D" H - ?>
复制代码
9 L8 k9 C- ^4 ]7 S6 O9 G O$ Y- I+ Z# H$ q3 s; l, Y$ t& a1 ?' x+ h( f
|