管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示:PHP的mongodb扩展,从5.6开始已经废弃了原来的mongo扩展,php7的pecl下载地址:https://pecl.php.net/package/mongodb,或者选择mongodb官方开发:https://github.com/mongodb/mongo-php-library,git上的这个支持以前mongo写法,pecl上的mongodb不支持以前的写法。/ n3 }2 A* A) x6 I; _
, S( g4 A* c; i* R
下面用PHP7新的API总结一下:
( T* O5 J# Q, i+ V* R6 k6 H4 ~ ?% Y' C
一:CURD
! u* X8 ^1 a- z- b: F+ c: \! ^: i/ i, d, t% I5 Z
1:链接
& ?6 W. M4 m( a4 @) I J3 n- O
; O! e8 S, }" }9 Q- <?php6 E ?9 X7 _3 X- i
- //链接mongodb& s, d# |0 k, s6 H% c
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
6 s+ j+ Y' q* N$ r, y - root 用户;123:密码;如果没有密码则不写
复制代码
2 ]0 w P" q2 H0 N' s
* b# \) e" ^2 m" M5 a6 M2:查询* P$ r4 f9 a: G! U4 D% t, X
7 K2 v( j0 u& J& e8 ~9 b1 L- <?php7 O6 C- ]4 P( x0 P4 r' a7 n
- % K; z5 P) v, G* F
- //链接mongodb
- K. K) ~. R3 j% |! |( u - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' V; J; Q# `% [2 g8 y- l) f- K% ^0 k: K
- / Q8 S% C; {( N( f5 I r0 P( o+ N
- //查询 x' y$ k' {6 y, M1 e
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0, W% U- F3 m5 t8 Z5 I
- $options = [/ g- A7 I" Z4 n& L( `9 `
- 'projection' => ['_id' => 0], //不输出_id字段& R' K1 F" J0 A3 w/ ~: m
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序6 b( t! s7 u' y: L9 [1 O0 l5 r
- ];5 b: e" J" m7 m, n* \) L+ M' I
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求: g9 m/ B, \" M3 S
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合+ |: j1 Q# }% ~3 \8 \: l* |0 p L9 q7 f
! x) r- Y2 \! C2 n; T
) ?& o" C2 D+ @ t- foreach ($list as $document) {9 W# K+ `5 |% ~+ p! w( _# b
- print_r($document); ) `1 s$ m& [( m, |/ p. V
- }
复制代码
; _ R6 `9 y5 c7 \8 X3 v6 H% ^查询更多条件使用方法,参考第二节mongodb基本命令,查询
& y" v5 o+ O% ?% P3 L/ S/ f3 Z& K- Z1 A5 v7 |) y
3:添加1 N. E6 v# z& Y
1 `1 `2 l8 J8 T0 l3 E7 r1 c- <?php
, m9 @6 r2 T/ M5 u - 0 b: t7 K/ D6 m) r* T: ?$ @9 r
- //链接mongodb1 t, F2 S: ^; _3 Z/ }5 V2 Q" h" X/ M
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! j! ~% ?, H& j: w6 ]$ r. v
- % x5 B1 _2 f9 R: [
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( p: F: G. a) v# ~+ u+ `# }& h! x
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( g4 L6 m+ g. r( @& c H0 T2 g$ S# S - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, O. W) E4 d: L8 U6 A1 y. u - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);/ o, e$ g" F( P4 b
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 ( q/ t- A6 N1 E% V# l) T+ N) j
4:修改
0 @5 |# u% h% g' v
3 a/ }9 a# p9 t$ O$ }# F, J- <?php8 Y8 N2 \5 r1 a2 O+ o, W
( q+ c0 i [3 _. ~. @' {- ^( a- //链接mongodb
- S, S5 Z$ m! T- ^0 g5 c6 Q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! `' }8 @7 S; n% C& _% s
, |) A" K7 ?! P$ O3 o0 M% Z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
4 z3 E- i" v [9 j. ~ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
3 k U4 O* ^: ^! S - $bulk->update(
' W a3 L/ N' k4 E) }3 o" @9 B - ['user_id' => 2],
" W/ S, s- p, w, N; [ - ['$set'=>['real_name'=>'中国国']( O9 P8 y) @" a3 u1 [" K( a
- ]); 1 a8 C U" N/ |- L4 e% K& T
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,7 X! f5 x; y( R+ W
- //1:字段不存在会添加一个字段;6 K& w& w& x" N: f Z2 J. o; ^0 I2 R
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert9 A0 }, p' u* l
) O+ }+ J8 W! |' H1 U
# }: y0 `- ]( R7 c- {- //如果条件不存在不新增加,可以通过设置upsert
2 F! L) N M4 o6 q4 T( o - //db.collectionName.update(query, obj, upsert, multi);9 T9 G" m6 i( Q; M, @( M/ N, M4 l
b# `: R2 s4 G; N- $bulk->update(# {* W* v! y3 [) @; |7 ]0 w9 Y, g
- ['user_id' => 5],+ y& T6 Z' I9 B& a; V& C( v
- [
/ S. E5 N: w$ o( {/ W3 Q+ c - '$set'=>['fff'=>'中国国'] T/ |# B3 C1 v( m) X
- ],
$ u8 g' |7 c; G - ['multi' => true, 'upsert' => false] 6 B) J6 B9 p: j: V7 Z! B) ~
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条. H: [# _0 g1 q" u/ F
- //upsert为 treu:表示不存在就新增! O- _( t) _0 @% o1 N' Y+ U0 Q
- );* T* A& N5 ^- J# L
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 " c: t, {& X) b
" k7 @4 s: {- S3 W2 ]# ~6 lordered 设置' S K+ Y j6 K% `/ C- D
9 E: K1 v8 o, u1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。3 e/ a! L5 K$ ~* |
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
' Z1 O) F; B! U( f; x8 T; r, A: _% M2 Z: R: @9 V: ~0 F
5:删除1 A8 P( Z6 K/ f: e$ d. c# K
8 v! }4 p( @$ [, J0 y( ~
- <?php
' E" [# I2 F/ {: k1 z4 E; X4 t8 i
$ W4 U! T9 x& t6 ^% [8 N5 J- //链接mongodb- t _8 H- _( X: v
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% i( D, L4 s* Q9 F0 w
! F8 g& D/ I6 L; _& L; F# P- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
0 H. J9 R# ?: g/ V/ ]9 d - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: p! h- b3 X3 A/ {4 F+ `8 W7 g - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段$ }+ n0 o7 @2 t" c: m" p
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合! a9 B* @: s |$ T3 K% k
- delete还可以通过limit设置不同删除方式
, ~* a# N/ `8 P7 M2 c0 {2 [# l# U c - : j L3 B- Q3 _2 H- b$ Z
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
7 D& O4 y. N: e/ t( }+ @1 U - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
?: w4 ?8 e( ?3 H: g2 q( r. {2 @6 O% o! T9 f& b
6:捕获异常
9 m4 R4 Q& Q. l4 }! W( p& x
4 G. x% b% g; A s3 I. g% T- MongoDB\Driver\Exception\AuthenticationException
) B4 I* I& t8 h5 `: a - MongoDB\Driver\Exception\BulkWriteException
6 j. }( Z6 G# ] - MongoDB\Driver\Exception\ConnectionException/ q ? v* k- ?3 j& T) T" V
- MongoDB\Driver\Exception\ConnectionTimeoutException' F1 d6 ^" B/ {7 Q" b* D
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口% Z1 a# h: x' |( G9 p8 O! ~2 k- V
- MongoDB\Driver\Exception\ExecutionTimeoutException& s, E) O* U' A9 c
- MongoDB\Driver\Exception\InvalidArgumentException
* G0 |$ m: d9 ]1 D9 \0 Z - MongoDB\Driver\Exception\LogicException9 b0 C" [1 s& s9 D
- MongoDB\Driver\Exception\RuntimeException4 b' ^3 ^8 f; w9 m% G3 J
- MongoDB\Driver\Exception\SSLConnectionException# {, v1 o: h- F4 {; i
- MongoDB\Driver\Exception\UnexpectedValueException
$ T0 k: v/ y) k5 b7 D/ n9 C% N - MongoDB\Driver\Exception\WriteException
复制代码
0 l# y3 j6 P: y* D1 |" R; j! Y7 S7 \1 p( A
9 D! ]- j1 K; v) A' {& W; h5 {7 N点击查看全部
3 M- n. g( S! C6 J# P1 ~
; |6 b' B5 z7 \% A/ o; E4 V
: v9 L7 \: j! A0 Y7 P: M |
|