本文实例讲述了PHP实现的mongoDB数据库操作类。分享给大家供大家参考,具体如下: 最近的项目开发中使用的数据库是mongodb数据库,因为小编的公司也是刚刚使用mongodb数据库,所以之前没有封装好的mongodb数据库操作类拿来使用,所以小编在项目中自己封装了一个mongodb数据库操作类,特拿出来分享,不尽人意的地方希望大家勿喷。 众所周知,mongodb是典型的nosql数据库的代表,受到很多开发者的追捧,近几年尤为火热,mongodb的流行不是没有原因的,下边给大家简单介绍下MongoDB。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有: 面向集合存储,易存储对象类型的数据。0 j+ d. b+ F1 {7 ]! s
模式自由。
9 g/ {4 u3 S# _7 U- o支持动态查询。
* L, p- x/ y) |4 e& L2 N% K支持完全索引,包含内部对象。' z- y: Q; Z/ x; N, ?$ @7 y# n5 P
支持查询。9 c; Y, D/ M( ~$ E1 Q. l3 m
支持复制和故障恢复。0 V9 `# R0 Q" ?% @! [ C3 j7 N
使用高效的二进制数据存储,包括大型对象(如视频等)。
5 N% z. r) S& z- u1 ]; {' Q自动处理碎片,以支持云计算层次的扩展性/ w+ V' W. z( d8 k5 ]
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
' m( M, r2 G. M. Z7 J文件存储格式为BSON(一种JSON的扩展)
q: D; [! v0 S; v- f! b9 N/ Q可通过网络访问 所谓“面向集合”(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% w8 @4 F# _. c9 F) G2 i) X$ c
- /**$ o- c9 x; X2 G
- * PHP操作mongodb数据库操作类# F. h/ H7 f3 i* y, r% F
- */
- C' b/ K9 l4 y( s4 y - class Database {
% ^6 f% v$ N3 p - protected $database = '';
% X$ j7 y3 C4 u, o0 C: ` u - protected $mo;
/ `) T2 W9 n1 r2 F - /** _# W0 g9 I7 J: m. L# x
- * 构造方法 {5 a, k" q @. V* M' K; j U0 j
- */
: g0 ?) Z; C! @ - public function __construct() {
) }# w% z0 o6 b4 J/ E - $server = DBSERVER;% i$ ~6 d0 x: m) \# i
- $user = DBUSER;
1 ~- [: J$ d$ i+ b' ?7 f7 U3 n9 m - $password = DBPASS;
7 v1 _ D) o6 _1 z/ c* {' ^ q) ` - $port = DBPORT;7 |( o; \. D4 {) |3 S! q
- $database = DBNAME;6 F* j. Q+ J. C" \6 |
- $mongo = $this->getInstance($server, $user, $password, $port);
$ S( @& y) U( k1 \( b - $this->database = $mongo->$database;& _) k. m+ i* f$ k, N, r/ [9 P
- }
" a! w k1 W, a* u# \" c7 J - /**/ o: X& ^/ n# b Q m
- * 数据库单例方法$ @: g# }0 n4 |2 j- s
- * @param $server
/ L6 C$ d6 M$ c+ t) f) Y3 E! C+ F - * @param $user4 b4 G; ^) ~+ q H/ d. A
- * @param $password6 Z/ c0 t( M! ?& m6 u3 z, b! c
- * @param $port& ^) \/ e( z- `9 ^- c' n# ?; Z
- * @return Mongo
$ k% r) [7 G5 o. B- V - */
1 Y: B5 s2 r j - public function getInstance($server, $user, $password, $port) { @! N( h) l3 y' V8 T
- if (isset($this->mo)) {
" |$ w7 e3 ]/ Q* G - return $this->mo;
+ A' [/ L; U" f1 {0 i - } else {5 `/ ~9 `% s1 n
- if (!empty($server)) {
- g. v, q4 K: B - if (!empty($port)) {
& X3 R( @2 E: l - if (!empty($user) && !empty($password)) {# u# g9 P4 {8 j, q
- $this->mo = new Mongo("mongodb://{$user}:{$password}@{$server}:{$port}");
6 \# U8 f2 w% z4 j+ n - } else { [2 j( J) n7 i( `: A
- $this->mo = new Mongo("mongodb://{$server}:{$port}");* u- I- G. N9 g* }
- }
8 f! i/ E% C& {) x- y' p - } else {
. {5 |! V9 A9 b8 m - $this->mo = new Mongo("mongodb://{$server}");
; `, Y& x& `, F - }; @& a6 h' n, ~
- } else {4 g) y" Y4 S" v' E
- $this->mo = new Mongo();
' G- m7 A/ u' l' z1 h/ W2 [1 z - }
" p2 x: v1 O! \! X t/ X0 X - return $this->mo;; x. k" Q+ a f/ S1 J5 R% J
- }
( q: r* k, C' c1 G: `0 G - }
0 s. r" b1 p9 V8 s1 y9 G; g - /**
2 t, \$ O& ~; F - * 查询表中所有数据7 C, Q4 e9 w0 b. }' n
- * @param $table. k1 M+ m* P7 Y* T
- * @param array $where3 x; e1 k% j: L1 V
- * @param array $sort
8 X, Q1 i* e6 z) a l" P5 ? - * @param string $limit* [$ \" r" q& C4 P- B
- * @param string $skip4 a) U+ j& m4 [$ h
- * @return array|int
; i. a3 N" H u; E/ w - */9 w8 l5 ~ | z5 D( v
- public function getAll($table, $where = array(), $sort = array(), $limit = '', $skip = '') {7 F, z+ u- _0 J
- if (!empty($where)) {' b1 C- t/ G( ^/ h/ f
- $data = $this->database->$table->find($where);
/ Y: R4 ~3 k* X& z% z" S# B - } else {/ t& t# E0 O; `4 _: E2 ^
- $data = $this->database->$table->find();
0 ?+ C8 t& l# Z2 U7 E) j3 K - }
- k/ Y- [- j! J9 D8 m- D3 B4 c2 | - if (!empty($sort)) {$ y g/ b" `1 r4 n( ]) k5 ?
- $data = $data->sort($sort);
7 A' I; g- @) x& U- X }* U - }
% p8 W2 Q* l$ i/ f& `% ]; ? - if (!empty($limit)) {
1 ~" X0 q* l& r5 I, M' b+ e1 V - $data = $data->limit($limit);
- Y# s% X2 b3 s/ }! q" Y& c) O% s( z - }
& |' L; F" Z$ f. n6 l3 e' u) t - if (!empty($skip)) {
4 ^; k u/ M* O5 D - $data = $data->skip($skip);
, ]- H! ?. ]5 }3 `& Z - }
( z$ L9 h1 a2 F' E* G0 f$ N7 ~$ A - $newData = array();' C8 d' ?* D4 F& H8 ^. v- |# z
- while ($data->hasNext()) {
; J5 x. ^7 G: c: P - $newData[] = $data->getNext();
2 I& P0 }* k' x3 \1 h - }
# s2 C2 \' ?1 J* u - if (count($newData) == 0) {$ f, N) S$ N& c$ h4 S% ~( J
- return 0;
- M+ o9 Q$ k5 r5 N. b6 _ - } R V9 P( z/ l; a
- return $newData;
# o% w9 d+ q3 @" K4 h - }; c* Q4 F( k7 T z8 [& k) X( ~9 R
- /**
( Q# w4 T- P* v( {3 r0 Z" _ - * 查询指定一条数据/ j0 e* u# O& o3 Q" [" B
- * @param $table+ C' S8 o! j j9 ^1 r4 _
- * @param array $where7 p2 I* r8 v/ j2 d; F
- * @return int
# U% V- k" b/ }9 I - */
) i$ _$ T. N9 H L1 Q - public function getOne($table, $where = array()) {" K9 [" O* \! s% n% I2 g: }# O4 Y
- if (!empty($where)) {+ h. p3 H+ }% [7 M/ \7 Q4 S1 M' y8 I
- $data = $this->database->$table->findOne($where);+ c- S/ \3 M! z# m- f- g+ B
- } else {
8 Q; h# P7 S4 q& B - $data = $this->database->$table->findOne();% Y. {: L. o1 i
- }
8 g: d s& u9 C5 t" f! M% W0 n - return $data;) j. @0 z4 d& Z! w# C* }
- }
Y0 i1 ^3 K- t. O# Q" o - /**
: y* D( B3 p* _& ~7 N. R" W7 c5 P - * 统计个数: Y9 u) E2 g, l4 W, y; b( b
- * @param $table
5 G6 U5 j9 z3 P6 d - * @param array $where
, I' ^7 V5 [9 E" t p2 O. y, p - * @return mixed
: I3 n) m: h; v3 z& ] - */+ G) s y3 l) l! O3 c
- public function getCount($table, $where = array()) {
: m, u, S& B- G+ z9 F9 E - if (!empty($where)) {
3 y7 T# J' P, t5 | - $data = $this->database->$table->find($where)->count();2 k9 B+ C. q/ k
- } else {9 n6 E/ o7 M$ T$ j
- $data = $this->database->$table->find()->count();- J$ r0 A: R9 c
- }
' N7 c2 I( N% c2 J7 F - return $data;% h0 w: n/ U- L3 l+ x* e
- }* g7 R/ G! y4 b1 l, U4 ?* P/ J
- /**
; @5 z7 Q8 h& f' A# U) a - * 直接执行mongo命令5 L2 @/ ~7 E" y- E7 c. [7 b5 C
- * @param $sql
" _6 y+ d. I `' j - * @return array3 F! z( r- x- k2 r$ K$ b
- */
" o8 @- O8 e3 f: Y7 v, t- q! I - public function toExcute($sql) {( H1 N) ]# U! R0 H+ B; ` G: h* t
- $result = $this->database->execute($sql);" ]% F. S/ ?2 s9 U) p0 A1 f
- return $result;$ ]) [# P' m4 g# E1 v1 e3 h3 {
- }* P( Y9 f E2 k
- /**
" K) b6 G9 G3 D/ k - * 分组统计个数
3 d6 j7 N( z' \ - * @param $table
! n) Y `; p% o6 D - * @param $where& C" }: k* S a1 `! \ v& F
- * @param $field
' o# M+ R ?1 A - */
+ E0 e/ G* g c - public function groupCount($table, $where, $field) {) |9 W3 h6 B: N( ~' K- R& |9 D/ q
- $cond = array(2 _$ v$ R0 ~: _3 p% A% Q# ]
- array(
4 Y4 b6 R. D! e+ ]3 a3 y% f - '$match' => $where,
% e, z/ N- S1 G9 _0 q. D - ),
) x/ L9 S8 D" L6 Y/ j - array(5 O7 X& I* H" ?& P
- '$group' => array(
' T6 |) ^0 e* g" I3 _4 E - '_id' => '3 b4 ~* _& Y- E: s: r0 u. @1 a
6 _' w0 K. h0 @( }5 J7 d$ o% G- . $field,3 Q( r1 h! X/ U+ N# w2 C
- 'count' => array('$sum' => 1),
$ ?/ b. B6 ?$ _* m) R - ),5 D) g7 {- V6 A; G4 ]
- )," `# p7 g' K' v* s
- array(- k" F N. y% |. l
- '$sort' => array("count" => -1),
: w) V& V! r: t/ r - ),) a" ^8 F$ v4 ^$ X
- );
A' [! R& G5 S7 k& W - $this->database->$table->aggregate($cond);
" ~# C1 ^9 e1 c0 w5 T3 x - }
6 q9 [7 V- A+ V0 ?, g! S+ j - /**& e3 m8 q) [* Y9 r* {, Z8 \
- * 删除数据/ U8 d& H' W6 S5 z8 j: x: T. B
- * @param $table8 E+ r0 c2 [# G4 e& B% \7 A, W
- * @param $where
: I& A# `9 A4 e8 u. p - * @return array|bool) ~* Q: u0 F q; h
- */
# F% g' F8 o. X n* c* H - public function toDelete($table, $where) {! w$ A o" s1 k8 K# ~
- $re = $this->database->$table->remove($where);
( Y0 q+ h* z# T. t$ U( d - return $re;
) m! w; ^; N' Z3 e, J! X - }( \4 x9 V; P# H* E S7 q
- /**9 c9 u5 ?; I) T( z
- * 插入数据
* y8 [6 w. l$ j" T* N - * @param $table
3 u; Z9 }" _/ s" z - * @param $data6 e2 }- p/ x/ q( P Y' ~
- * @return array|bool' J5 M* J, b" P" h! u! R: i' i
- */
% x1 F4 A. Q8 p; Q - public function toInsert($table, $data) {
h* M6 d7 w! `5 M4 F9 K. e" @- l - $re = $this->database->$table->insert($data);9 h3 v: H& I* E
- return $re;: E, I7 F' z- j8 g2 q, J
- }
' P9 e* ~2 A* ~# K* B7 O - /**
5 y2 h2 e% e6 e* k) f - * 更新数据
9 g; m0 D; z; h- H) c8 X - * @param $table0 f( L+ D. h: R
- * @param $where
7 a8 M Y: v. P: S - * @param $data. `+ e) o, v8 k3 s
- * @return bool
9 {, v: ?( y3 H. v/ N - *// y% u2 Q4 Y5 U' |/ P, K2 |3 G5 A
- public function toUpdate($table, $where, $data) {
6 @8 `; L1 Y) `0 U h. l - $re = $this->database->$table->update($where, array('$set' => $data));6 t! V4 J! r& N
- return $re;
9 }# Z( @9 M) r3 d/ w - }& P5 R3 m7 {0 ~! h
- /**& S# D( }: D, o' ^. u. X, d
- * 获取唯一数据 V" V8 ?+ b* X7 x4 w) f
- * @param $table
6 f. ?7 k* J. c; N! M - * @param $key
; n4 x, ]* c5 M& @ - * @return array& n; ?/ ]/ M1 a1 n2 C: W* c) {
- */
% D3 Z/ z7 H ~ - public function distinctData($table, $key, $query = array()) {
6 e, f) |0 g: S$ H - if (!empty($query)) {
' d) M& q- b3 l. ?9 Q3 H - $where = array('distinct' => $table, 'key' => $key, 'query' => $query);3 x' w) ~6 d( g$ V* Q: q
- } else {; C7 r8 h. R/ }8 J
- $where = array('distinct' => $table, 'key' => $key);, \: W' h% D6 t% I/ |
- }4 x3 r) h% G$ W6 S0 k- ^) T
- $data = $this->database->command($where);/ e( t/ x- R. [2 O# l8 k
- return $data['values'];
1 Q% q0 a/ }' k o& C - }
( n+ ~! {6 D% A; C( d$ ? - }6 {7 \% T$ @9 \" g
- ?>
复制代码
& i1 e: y, q# g/ h4 A
" {$ v* D: F: ]5 i t8 Q6 E7 ] |