本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。
5 b @# b! o, _5 }模式自由。
8 o& |' ~: o7 v支持动态查询。' I* n$ Y% _6 b2 C/ V9 J5 [
支持完全索引,包含内部对象。- C8 I/ D6 l6 ?
支持查询。
$ k! [ l+ c4 H0 a支持复制和故障恢复。- t9 T( l# E: @% U
使用高效的二进制数据存储,包括大型对象(如视频等)。
; R, ?2 T9 Y( o& I; Q自动处理碎片,以支持云计算层次的扩展性4 K, \+ f% \5 J) k6 |6 E6 U( Q
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。2 E9 K6 o) H; @0 L
文件存储格式为BSON(一种JSON的扩展)
1 P! d( }- u! _3 d4 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
* n* A7 `$ M% N; R$ e+ n" c! F - /**. i& {# b# d5 q- g7 I7 e
- * PHP操作mongodb数据库操作类' l* u! Q- b3 Q, r1 D
- */% x: U! I* B4 c4 }# E, {3 P. y
- class Database {* A6 T, `' f+ R8 q! L- c
- protected $database = '';8 F9 t% L0 R# d4 f" n
- protected $mo;
y+ k J B/ |( K. @# g/ J - /**. V0 y/ Z# }, E5 P" z+ O% [8 M
- * 构造方法+ O' V. m+ N( s
- */$ O9 q7 L7 c" S( L
- public function __construct() {
5 i i9 Z4 m1 Z% C - $server = DBSERVER;* n. Y5 _% h& s# V
- $user = DBUSER;6 I, ^' O8 N* W" \
- $password = DBPASS;
: \9 b. w9 A; r- c - $port = DBPORT;
8 ]1 S4 C0 C2 ~& W* R4 O* W- G$ a - $database = DBNAME;7 X5 y( s/ r- F7 `: s
- $mongo = $this->getInstance($server, $user, $password, $port);& d$ {3 C$ c: k5 R3 T
- $this->database = $mongo->$database;2 _' m6 d$ S% Y2 n. ~
- }* b0 t# W6 k U0 s, b7 `/ y) o
- /**# H' l/ l7 p6 t
- * 数据库单例方法
8 e8 i; }0 p/ R' f! y - * @param $server
! W; K% ?$ S% T: A5 _$ { - * @param $user2 z6 a7 e0 D6 z
- * @param $password7 J- N5 H; q* K9 D3 p3 ^
- * @param $port
. j# N" B1 O; h' G1 _ - * @return Mongo! n% m( v- H; c" M. Q
- */, _/ O# _% c) L5 J
- public function getInstance($server, $user, $password, $port) {4 A3 W! ]6 h, o! z, e
- if (isset($this->mo)) {7 t9 f) A; n2 E4 {
- return $this->mo;/ d# W9 h# l, b& c- B. Z
- } else {
]/ L( G: V# K; M2 | - if (!empty($server)) {3 X5 ?7 @/ S$ Y0 w' m7 G X8 l
- if (!empty($port)) {! z5 A) W+ l1 ]8 A z& }& o( A1 c
- if (!empty($user) && !empty($password)) {
* {" {! n' v2 l2 S. R2 S - $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");! C4 h- D; b; c1 l P+ O
- } else {
, L) B2 p/ \! c - $this->mo = new Mongo("mongodb://{$server}:{$port}");
; J' I X/ _, C, t - }
6 ]7 G, t, l, i - } else {
( N6 `7 l5 y7 @: Q3 P - $this->mo = new Mongo("mongodb://{$server}");3 [! j4 e1 ?7 |1 M, G
- }
4 U# D1 [& P6 W9 b% a8 f' u - } else {
; D1 k5 W7 A" ]" e1 E7 p, @7 _ - $this->mo = new Mongo();) A o: f- t- Q9 x. a8 n g: R
- }8 U7 u1 f# _$ I4 H2 B1 N
- return $this->mo;! y7 j6 d- n+ t! B* P
- }
# m: B1 L# z- e- ?+ f; G - }
2 D! u9 U: K! b3 H - /**1 t9 N4 ]( Q1 W
- * 查询表中所有数据
2 q: Z3 {+ c3 G$ @9 Y" @ - * @param $table ^9 A# r( w" d& B8 w
- * @param array $where
1 x2 ~' c! @* ?+ z8 y: C/ j" q - * @param array $sort
0 {2 w( n0 X U( }1 k; i' u - * @param string $limit
! O$ c% Q6 H0 n9 T4 N - * @param string $skip
$ W/ P, \+ X2 | ] - * @return array|int# {4 B. P) T8 l5 v3 q
- */
9 W" s4 t4 B/ [) ? - public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {
5 Y5 g7 l. p. I# M; ]# c; N - if (!empty($where)) {# i L, I$ l( u0 r
- $data = $this->database->$table->find($where);
2 Z6 \# _( S, B6 r1 f+ C" \& H$ t - } else {% O/ D! {1 l# [/ W8 j
- $data = $this->database->$table->find();& T' o! E: A( ]& m0 l
- }/ ^0 a7 r" d. W( |; C' q
- if (!empty($sort)) {
; e4 L8 q$ N s8 N - $data = $data->sort($sort); h+ |# E0 y9 n. \; @
- }
* w2 |' w/ A' J. B. o - if (!empty($limit)) {4 \# g7 c" y+ A% T% _
- $data = $data->limit($limit);
0 b! J' |0 A5 {6 y% w( X - }
% c9 e9 A. m# ?5 C E5 S: V7 ~0 } - if (!empty($skip)) {
3 ^8 L0 u. |; R7 T/ ?8 r - $data = $data->skip($skip);4 O3 a- E2 h$ M& K2 W* D
- }, C6 E2 N0 t6 Z5 \8 @
- $newData = array();% [/ Y5 Q- }' J+ G6 p
- while ($data->hasNext()) {
! ?* g+ A+ N+ O4 Z+ d - $newData[] = $data->getNext();6 M" U# o# J# o/ S, i, x" a8 ~
- }+ G+ W# v! l7 s& d- x8 Y
- if (count($newData) == 0) { g' x( z7 E- T
- return 0;& w% P; o& n% X" }
- }& y2 W N0 x; M) j
- return $newData;0 V( I' a9 x8 N s% O* P' v8 O
- }: h, O. `$ r9 {) o$ f
- /**
" S ?. \4 Y7 C8 z: } - * 查询指定一条数据 I" E3 }: z1 E9 N2 M c. A1 K' K
- * @param $table6 w) ~/ B3 G9 Q' h! B9 S
- * @param array $where
4 Z/ e$ L7 ~. b& g" i( e - * @return int3 j% g1 i9 @: Q1 D
- */9 y, X' g: _& z- K E8 G; y
- public function getOne($table, $where = array()) {
$ f+ \/ @# `5 ~8 A - if (!empty($where)) {* j' S4 ^9 A) K
- $data = $this->database->$table->findOne($where);
& C; K% u/ E2 T& w' Y% H/ z8 Z+ z- U - } else {/ G2 _% S" Q7 W1 P# m5 v
- $data = $this->database->$table->findOne();
" Q, V' a: e) K2 H8 k/ ^ - }
! X; l0 ^* k$ k4 } N5 S& n$ k - return $data;; d, I' J) |" C3 P3 Y, T ^
- }
: `7 F7 P3 [- n; _! ]- }* T - /**# _. t- ?; l' Y
- * 统计个数
# D. H& Q+ G8 O6 C# K' l& L3 B - * @param $table$ Q7 H8 x7 m! D9 r; k& f
- * @param array $where
' L, M6 E4 ]6 c+ L$ m3 H - * @return mixed
5 E% |' t0 a& e1 u2 Z - */* ~- q: N& F% t: B( F% m) n6 x8 e* a
- public function getCount($table, $where = array()) {8 Q; N( g& g$ N. j6 z+ \! u
- if (!empty($where)) {
& ]7 A# I! y5 q3 N: @7 [- } - $data = $this->database->$table->find($where)->count();
* B/ ^# l3 S; G P - } else {- A3 ?/ l$ A" S8 o$ }4 r
- $data = $this->database->$table->find()->count();
! g' J$ ]8 W- @: b1 m# L3 N: e$ H - }
8 L8 ]) G& K2 X6 c - return $data;5 G$ O3 `7 v* j9 l A+ Y
- }
# k" S2 t4 J* c1 ?! [4 {9 X2 P' V - /**
9 q3 J$ n& \$ ~0 B( Y - * 直接执行mongo命令
" M2 k0 z0 D- \% E' b2 B- \ - * @param $sql8 U) D: p5 h' Y2 O D! O
- * @return array+ R# D5 q' M: S
- */
' m2 f, q1 A" h1 I7 G, C; N8 r1 y - public function toExcute($sql) {4 R; J: ]7 s: [% p
- $result = $this->database->execute($sql);0 N& E! @+ l/ q
- return $result;4 k: h* v7 Y9 O C' V
- }! s7 u/ W A4 _7 k1 }
- /**
+ \! W( ]. P- K' B, h& i7 x/ m7 q - * 分组统计个数
& J4 M! r M$ w. M3 y$ X5 H - * @param $table& Y3 q( b, c* w" `- @
- * @param $where
6 g/ m1 m3 b y! Z3 \ - * @param $field) u9 R' |% y2 c; w" q8 m, O
- */: _0 `7 t E" Z; q* i" r
- public function groupCount($table, $where, $field) {1 Q7 L) b6 `' Y6 S! W
- $cond = array(
3 U5 x$ }7 T7 E6 |+ j% U0 S+ S" _ - array(
4 p, N4 e, C$ j' M* o - '$match' => $where,
( U: ~) q t: u$ _ - ),
! o6 A& C2 B2 k+ \, ]) D6 T3 B - array(
, [/ c2 e4 c: o2 a% i% I - '$group' => array(0 h8 X2 c4 T3 w/ d! t5 j! _
- '_id' => '0 M$ Y% X7 P s* S. I6 G
% c2 C7 p$ Y1 F! K- . $field,
& U T! D* e( U# f! l, G - 'count' => array('$sum' => 1),
7 Q+ {' \9 s8 F/ E2 ~/ M0 p$ a* F - ),
$ d% i* |. G% v. m/ W3 [ - ),% b- a7 t/ q# B2 A% f+ E: \
- array(6 z5 I* D8 B3 u
- '$sort' => array("count" => -1),! W8 l6 |' ~% m# d: M0 A# a! b
- ),6 U8 d) H }4 j! h7 q& b, b3 v
- );1 u4 i+ S5 b: ^5 E8 @
- $this->database->$table->aggregate($cond);, S/ o# |' ~# P; e
- }
5 p) T j# x& A- e) u2 l: x - /**
( i% [3 V* ~) P) W' S - * 删除数据4 ?: [! H2 Y( h; @( `
- * @param $table
7 H% ]' U' k/ ?% Y; f - * @param $where9 b7 k! i Q- \. c |
- * @return array|bool! w @5 r! W& ^: B
- */
+ |4 j9 N/ w: B2 ~5 @3 ~8 @$ \/ Y | - public function toDelete($table, $where) {
b! t/ i, b' q/ U6 u3 A9 F, h - $re = $this->database->$table->remove($where);: g' E8 q' x1 p. c2 L! q: G
- return $re;
" K1 S, _ _) S+ W1 H, R - }/ ]. F3 o2 V2 Y+ \8 _3 j
- /**
' i# F# k! p8 @# \! \ - * 插入数据
5 ~8 U( W7 O5 J+ }! f - * @param $table, N; `5 Q7 }4 V
- * @param $data5 b: f+ ?7 l: I' T' x9 d1 |
- * @return array|bool \/ [& F" R9 r" s/ l+ P
- */
4 P( I% k# Z& b2 ]& q2 z$ m - public function toInsert($table, $data) {& I" `( i# k9 d6 o
- $re = $this->database->$table->insert($data);
1 o% c4 S$ M8 e- b |' j. ^ - return $re;
, }9 Y5 q8 C( V7 J& f9 s3 b$ V - }' g7 R- @' j: O+ U4 {- }# X
- /**
[7 x2 u2 ~8 H" }, L9 `1 m - * 更新数据2 n# v5 N9 j# n& O; ?1 z- {8 H7 K
- * @param $table
4 |' [9 w, d+ n% x: q. R - * @param $where' C8 p+ q4 P; h" a) d" W' x+ w5 h
- * @param $data
( \* L8 r- {; G# g5 ^ - * @return bool) V, K; m& y: Q( g
- */
9 c( Q5 L* t J( z$ I - public function toUpdate($table, $where, $data) {
; S! V w4 @9 {! ] - $re = $this->database->$table->update($where, array('$set' => $data));
; T+ N4 p. m$ }9 `6 D0 v; A& I - return $re;
# Z. W/ b: t2 Z; ?( V+ Q7 d2 p - }
3 \3 y/ f: J( M' x4 D - /**
, } J% m1 t# p3 h5 L - * 获取唯一数据* S9 ?- d/ K* i2 }" x1 R! G3 D1 R6 c% I! F
- * @param $table
0 Z2 B4 {4 J* X' n* X, L - * @param $key( m. _: O% F; c& k/ D8 L4 V
- * @return array
$ b' r. q* o- k0 z+ b3 D; }8 G - */
# M, }1 ^! A1 i' a4 @& m - public function distinctData($table, $key, $query = array()) {
- O: K6 g8 V9 S7 q( Q - if (!empty($query)) {: |$ `+ E' H+ U' p8 c1 p% [
- $where = array('distinct' => $table, 'key' => $key, 'query' => $query);
* H4 ?5 }9 i; M( ~7 E - } else {& J5 {7 N0 D1 g4 g3 Y. o3 t
- $where = array('distinct' => $table, 'key' => $key);
c) t5 Z# t3 y! L7 G5 w" B9 t - }; ^5 S* Q# Y" K: B2 |, v( p5 G5 B
- $data = $this->database->command($where);
5 _# M$ Q$ t% e# P; c' R - return $data['values'];
. o1 F6 h+ h/ V5 X. s2 P - }
" y# p }* J6 n$ ]- [ - }
+ D- c4 u5 b% F9 m- S) {+ C - ?>
复制代码
4 x1 S% y6 u* P
6 y/ ?8 T1 O3 e. f4 f7 q |