本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。* o: n+ B0 S: D: R( B; K
模式自由。( o5 z& l& q7 C$ y; L
支持动态查询。4 K& Z8 ^& l( n; h4 {+ f: I
支持完全索引,包含内部对象。1 f/ c3 Z. u4 ?7 D
支持查询。
6 Z' z1 p. v/ H6 ?3 W& x5 W; ?5 j支持复制和故障恢复。* Z4 R6 @# B$ |* C/ z" I
使用高效的二进制数据存储,包括大型对象(如视频等)。
, x' V+ w1 n; ~. m4 W/ b0 y/ q. C自动处理碎片,以支持云计算层次的扩展性
- z* t, G6 C! k支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。8 \0 U" x) n9 b& ]
文件存储格式为BSON(一种JSON的扩展): K* ?# N/ t" A4 V4 I
可通过网络访问 所谓“面向集合”(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
{' j! f! H2 p/ U0 `0 A) M - /**1 D1 a- T5 J* U U; c* `2 @
- * PHP操作mongodb数据库操作类
, ]# L$ t6 T6 I: x2 b - *// m& a7 p6 v' T S( y% u) B3 R- N1 Z; [
- class Database {
D1 Q6 F5 E2 r& ]9 _" N - protected $database = '';
' Y$ E! @0 [2 E! R1 S& Q( ^ - protected $mo;
* M" i7 ]9 o4 y5 v& t% |; W, \ - /**( g" x9 C& m' \' c
- * 构造方法" L8 ]* V% i0 ^0 z
- */
5 b# x N, s3 k6 v4 z( N/ M/ [. n - public function __construct() {
: v6 |% J7 t4 U! |( @5 c& u* M - $server = DBSERVER;/ T+ d" ^9 d' _9 M$ r% z
- $user = DBUSER;
7 |1 U$ O3 i. g2 T3 }, ~5 H - $password = DBPASS;
8 Y8 M5 D! H6 q6 E: B - $port = DBPORT;
$ |. ]2 E0 o. e6 G - $database = DBNAME;
2 }- D6 O/ c, `" a h- v! ~ - $mongo = $this->getInstance($server, $user, $password, $port);
$ e; ^- a( |$ H$ Y- b5 K" C( \ - $this->database = $mongo->$database;+ m' l3 E p! \! K# h( m
- }+ k' d4 @* L/ `$ b1 q) W
- /**
% e- I- T! x+ c8 h3 C2 T, } - * 数据库单例方法
/ @, z8 t6 J0 P0 K4 F - * @param $server. c5 }4 p% M- M7 U+ V5 z
- * @param $user
, Q# }3 U0 s6 K0 ^* G6 Y - * @param $password r% W/ K* c P/ W0 b
- * @param $port1 K9 J d3 I, }/ j1 z( O7 l( ?) w
- * @return Mongo
) b3 E4 o7 K" [6 V1 x& Y! P: u* \ - */- o0 w, _# Y- w# a
- public function getInstance($server, $user, $password, $port) {
: r7 {5 }& h" G$ \ - if (isset($this->mo)) {
& V. b, k$ F$ W5 T - return $this->mo;8 d& W) Q* R7 J I( r$ f* _
- } else {( L; U+ [) _: W1 C# O3 J/ }5 S$ }
- if (!empty($server)) {) B( M$ a$ [6 U" x0 D
- if (!empty($port)) {
" x8 U. ~) q4 r$ W, A - if (!empty($user) && !empty($password)) { ]+ M/ J8 n& R* {% n/ x
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");# o& k& V3 K/ j) z* ]+ A& J) m8 F2 o
- } else {
7 a+ N# A1 U0 X* m3 k - $this->mo = new Mongo("mongodb://{$server}:{$port}");; R7 e r: b4 C1 B% R- p
- }
9 ]+ w8 ^6 C2 R& O - } else {1 T* {% ~( ? k: x m) G7 A
- $this->mo = new Mongo("mongodb://{$server}");+ g C7 f# W; v5 N* @. }1 g
- }
) w: y1 W `1 q - } else {
; T: U8 E3 C# f1 J* u g/ u - $this->mo = new Mongo();
- ~& i6 ~6 Z; w6 ]' e8 N( J2 \ - }
2 e/ a- V( |: K - return $this->mo;
' C0 k" @. j; y" v% G! `# m - }/ h* N# z& W( O' i+ L5 R
- }, t8 Z" t" K5 i# i9 U3 \2 _
- /**
2 P) I' p& w! f0 X - * 查询表中所有数据
6 `6 b2 K$ {1 w1 U$ Q - * @param $table
; j$ c$ e Q5 p5 V) t - * @param array $where) |8 L# C. L+ G
- * @param array $sort
A0 ?1 I, m7 P9 L - * @param string $limit% q* L3 Z* N: k a6 G/ |- [8 {
- * @param string $skip
j9 z" m% ~! h4 N - * @return array|int: T% Y8 J! Y8 z# u7 z
- */0 N# @9 L1 Z: q% T. Q/ j7 s
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
" _: H3 @: \ ^$ S" p' M+ T) Y - if (!empty($where)) {
5 X0 ^ x6 b5 P - $data = $this->database->$table->find($where);
( ]' L" f& B% |+ |9 ] - } else {& y2 N6 q6 D: j
- $data = $this->database->$table->find();! q+ i+ u& [& r' Q5 v7 z6 y
- }
% U7 Q4 {3 f; V - if (!empty($sort)) {
- [; m0 U8 o s2 v" P6 q- E6 Q; j - $data = $data->sort($sort);
" y, T, C: J( _$ M- ~3 N! U - }$ }+ Y8 N8 {7 C; ~
- if (!empty($limit)) {- o' m; x5 q# |; I A
- $data = $data->limit($limit);
& l/ I+ Z2 G5 S) _- e0 y - }4 k% @0 Z0 ` S, @ D" R
- if (!empty($skip)) {( z3 Z; m. M( p6 l
- $data = $data->skip($skip);* J6 O1 c8 _3 B! [
- }& f' ]/ z' x" h6 d
- $newData = array();
! ^4 d* j8 L5 x - while ($data->hasNext()) {+ c3 M0 m* ]6 A: R" e$ O6 o0 u
- $newData[] = $data->getNext();
5 y3 u! K+ u7 Q* ]; S; }0 Q- @ - }$ y% F: V5 U( B; g/ ^
- if (count($newData) == 0) {6 X2 T9 Z3 M& f5 d. s0 a! p6 R" z
- return 0;- E2 G( {$ o$ C- N, q V9 K% I
- }- f3 |; `: A* w& W7 P9 ~
- return $newData;
[. z6 l; [ X8 c% @ - }
8 I5 [/ G- p4 E - /**1 [+ r- H( R0 b# E3 O
- * 查询指定一条数据0 x) {& n7 ]9 j0 Z% q1 s
- * @param $table
0 z6 b/ m& j% G$ f, A- E) i2 o - * @param array $where0 { y- L5 I& w: R: r5 |4 a
- * @return int w+ K! x6 b- k1 ^
- */
* _' A& W9 `: M% T+ r" Z" O - public function getOne($table, $where = array()) {! Y$ g# a0 R' k( W& a$ b
- if (!empty($where)) {
8 J x/ X( Q& E- w - $data = $this->database->$table->findOne($where);9 I! m3 w0 H. `- |: `. e0 D: d1 D
- } else { \) }0 _ l" v5 W
- $data = $this->database->$table->findOne();
: ?3 X1 t* I6 h6 ^! U# @$ p) G( o - }
+ f/ n. M; A/ c7 C; [. n3 k( t - return $data; ?' g- r7 i: Z6 L8 _! d" b+ v
- }: r/ j2 q. {, q) p9 {
- /**9 n# \. a: s& j- {( S
- * 统计个数8 L7 B$ t D4 u1 I' ~
- * @param $table) P) M# ~* X0 K- B( h' y# C) \8 f3 T
- * @param array $where" @6 g1 B7 U/ N* p8 z3 E3 v
- * @return mixed
2 I2 h# b. X, G) G/ w7 @ - */* \" B) G) `- {0 E
- public function getCount($table, $where = array()) {
`: t* j( P: o# T" w) m) R - if (!empty($where)) {3 f* ?: R/ `. W8 q# t4 l7 g. t
- $data = $this->database->$table->find($where)->count();, s4 W8 k t; C; }3 {
- } else {$ E8 j& ~; {& G c
- $data = $this->database->$table->find()->count();! S$ ^! z9 [* Z
- }
1 z: T2 x6 g+ m6 M - return $data;2 o' E) @0 W6 K, W& u
- }6 T0 W2 E9 f8 C( q5 n" e5 T
- /**
5 U* b) T: p8 I& ?" H# d - * 直接执行mongo命令
4 E/ T7 F. }' K$ p2 g. T - * @param $sql) t6 W E$ }! j
- * @return array
" s+ s6 ~6 V: u/ s$ D" C. h+ h - */6 t7 g' x2 _! x' n( f; S7 s, J
- public function toExcute($sql) {
- _+ Y5 a4 [9 G$ q' G* f6 u - $result = $this->database->execute($sql);3 z1 u# ~4 g3 G- e. C# Q, x8 W5 B
- return $result;; V5 U5 i0 e1 ?" @" A! u
- }
. q5 p2 K# |5 W/ j; D3 h - /**
$ e" K4 z' L4 o' `& }- v; e2 Q, K - * 分组统计个数( d+ o8 x& ~6 k5 C1 Y/ ^+ N& Q% [
- * @param $table
" D( @1 t0 p' D. ?- q - * @param $where7 u) P1 ?$ w- z
- * @param $field8 }& d0 x, J( k; o Q( S3 {. Q
- */
9 v8 U/ q/ k6 P {% K$ X, v0 @ - public function groupCount($table, $where, $field) {* f& a& s* ?# O3 r, P
- $cond = array(1 {; Y9 z" @' B0 T
- array(. J& D _- w$ h, O9 v$ i
- '$match' => $where,
; w6 |6 z: o: H - ),; A3 A9 b0 G" q% c
- array(( Y6 N6 M' R% y7 G! A& e
- '$group' => array(7 @2 U+ Q/ R {( @
- '_id' => '
& H2 w$ F5 y* S - - W' M1 P" S% v4 R- q% |3 R
- . $field,
) O& m# c5 b4 W) d. v - 'count' => array('$sum' => 1),2 M$ I6 H+ ?) Q, f
- ),
3 P% H+ O0 O; w0 R) \ - ),6 w# a4 w. I0 G3 k5 j3 g: x, `
- array(* n/ Y. {+ z0 B% W( y7 F
- '$sort' => array("count" => -1)," Z1 \# D' j; ^
- ),! V% W+ N% R( M; Y9 g
- );
0 {, u3 W, j A& Z8 _ - $this->database->$table->aggregate($cond);
4 \/ N* o* l% X" @ ] - }; N$ V2 l! E/ X" P" s
- /**
; w9 d U6 Z: S; Z& T# d - * 删除数据
1 D; c7 f, l8 f) a$ b - * @param $table- A4 A* s+ f0 ~+ G( `
- * @param $where$ @9 K2 \8 w' `+ P" Y7 O1 F
- * @return array|bool* x: M. B( z9 W w% N
- */
/ d+ i& T. ^$ t3 b5 C& Q - public function toDelete($table, $where) {
s6 W' x* u& ]5 e' C! j - $re = $this->database->$table->remove($where);! {* ]* U+ H! i9 `
- return $re;6 O7 s7 J* E: {9 @* z
- }
& M V: n, ^1 r - /**
4 n2 x9 ]! [: r% w! p p3 r - * 插入数据( C t2 a! k" r% r M5 e7 r& U
- * @param $table7 N9 [: q% j8 W1 K
- * @param $data9 c( L5 B8 I R/ Z
- * @return array|bool9 R+ T. Z3 }7 M
- */, [ J6 [ Q4 P1 [! e
- public function toInsert($table, $data) {# f* K+ U1 t% D6 S/ H3 I# `
- $re = $this->database->$table->insert($data);. }; h9 @0 F8 n8 `0 I, i' i
- return $re;
& d1 D7 S% B% J% S6 F! S - }" k2 Y/ q# w0 V% K" U
- /**
9 O6 z& K/ t0 f8 V# _ - * 更新数据- p9 ]% a8 g' z7 ]6 S
- * @param $table; ]: x" l( A* T+ r' g
- * @param $where& j1 e6 w+ x* g+ F5 ^* |+ p* z* ?
- * @param $data
7 {' C( n6 \! ?+ G t - * @return bool
- U0 m8 [* g# c0 _9 x - */; [! `, C4 G7 @# V, X) \
- public function toUpdate($table, $where, $data) {
7 G1 U- E r G) J: O# S - $re = $this->database->$table->update($where, array('$set' => $data));
/ q9 p" U+ K, w6 U, B( P - return $re;7 y5 D3 D( h0 ^7 `/ a q- L
- }6 O) S" q: _( f4 V" h1 T' K
- /**0 _* G1 Z; S. W9 C! k9 z& U
- * 获取唯一数据
' H- H8 u5 Y8 l- y/ C6 u - * @param $table3 ^+ U9 c! ~' i" |; w
- * @param $key7 `; k+ r1 S$ W# S& j1 @
- * @return array
: {4 D |/ ]! ^" l1 Q; ^( U5 C - */
+ t% a8 L m& n& r0 H/ } - public function distinctData($table, $key, $query = array()) {. w* }+ q# u% |3 a6 f
- if (!empty($query)) {: m+ X7 j( P( c' l
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
7 ~8 F: U, u, k9 B - } else {
6 l5 t3 y/ m) v/ G - $where = array('distinct' => $table, 'key' => $key);' l) ~' l3 y' q4 X+ f& j/ p& _8 K
- }
/ @; _. e4 r# U - $data = $this->database->command($where);
; h2 f3 a4 x# }+ a2 ~+ H& e - return $data['values'];- `6 t" g# a2 h0 ~1 U
- }* T5 ]+ K" U9 b
- }
+ c6 l; R' F K - ?>
复制代码 ; G8 I- P1 } J, j4 B; y2 C# n
7 O) V) r+ e3 [1 p; _( J- }
|