管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( c3 | D2 k5 Y9 a
1 }$ C/ I% G8 F6 J$ N
下面用PHP7新的API总结一下:
3 h* e6 N9 j% f
3 R8 k; w8 [: W/ O7 m& y一:CURD
; Z. ]* f1 _2 u: E8 B3 k" g. z A/ G; d/ |" ?
1:链接
) ]& v0 N* {. V! Y4 A& b/ ?. _+ ~! e4 }9 F! O
- <?php7 T1 H' x- r+ E4 q- y1 J) a
- //链接mongodb
+ b2 J- _0 U: S+ k9 m! ?* I" {/ D - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 f5 B* _2 q. r5 [6 M3 H
- root 用户;123:密码;如果没有密码则不写
复制代码 / \+ A c9 d3 n( W9 T+ _3 k
. z! S5 n' \/ d! S, |/ |2:查询: o! l9 L& c( n9 |* F3 a& Y
4 G! ]8 b5 J. o- <?php
/ v5 f+ T9 z1 \* d4 T
0 e# z- |3 Z4 F) N- //链接mongodb) X( \' L }0 o% ]* y+ B1 }
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' p7 Y9 s* v+ K# b5 p6 a7 ^* v
- 4 p. j# O( x K5 |% [* L' ^' \
- //查询
- H5 w: o V1 [ - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
5 v2 E* s4 M3 z2 @) l - $options = [
" t; S& S8 \, `# `9 L. {: R+ i - 'projection' => ['_id' => 0], //不输出_id字段4 m' v! C/ s. I& N: X& v0 T
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
$ y4 e3 Y. U' M - ];
* K1 s3 S; o) g - $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 Q6 g7 V- B. s" p) \& s+ q
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
% R& }; Q1 l" d0 K' |1 s - 1 K2 ]! G; b. a/ q# I4 H
' { M- m6 l! p0 A! u3 v: I" r( v- foreach ($list as $document) {$ [5 M- n' i: ^$ [8 p' B
- print_r($document);
- z9 |9 y; Q; Z - }
复制代码
$ t7 \& [( v4 x M; y查询更多条件使用方法,参考第二节mongodb基本命令,查询
) b* ^2 J# K) v% q# X. h
' p/ }( X5 W. b+ n" r8 Q/ ^ [3:添加7 m9 y& X2 Q! Q
! |5 ]' c& p5 G, \* @/ Q1 W
- <?php
* ?! T: E0 g) ?; O; g2 e1 J, X
6 K9 F$ N' m+ \- //链接mongodb! q% M4 {) j; e+ ^4 l8 f4 E. V: B
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& Z5 K& F5 U% j- K% o
8 P e, V$ J$ A) T v, V- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- Q$ s {8 x9 N8 K7 u* S" u
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: c6 o" i5 G7 e4 O! |& U
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
" ~4 {& A0 N; o2 q( P3 w - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
# T+ E* i- o( N9 u8 X( d0 L - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 & i8 ]* f" F* N- ^" P% y
4:修改" d2 E! ~( b9 R y
* V; U5 \: g! [2 z0 m6 @5 Q- <?php! H% [& P. E8 } f
, e3 z% N6 _3 B. M K- //链接mongodb. G- H5 G4 F9 C# |. N, }3 K8 C
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, x/ `+ Z. r1 e$ P/ h G# T
- 6 G/ ~ J. Q9 A
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" C( y0 a0 y8 E
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ Z( a% t& y4 z3 |6 z7 C0 X - $bulk->update(
5 O% W; l' c/ Y, C; ^" P) y! R, N: j - ['user_id' => 2],
/ Q6 I/ ~' h8 t* ^( }1 S6 h - ['$set'=>['real_name'=>'中国国']8 s; |/ o) E2 v- z# I, d5 E* |6 }4 _
- ]);
# U2 v+ X( x" j - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
% n, ?3 Z% V! A/ C0 f - //1:字段不存在会添加一个字段;0 W5 S8 d5 E) i: ^; Q$ W2 t
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
7 L4 H' {. X" \8 l8 d% }" \) E
- B4 J& L, W0 S: j6 n* v0 k) i- " k. ?" ]( l$ t3 k
- //如果条件不存在不新增加,可以通过设置upsert! D" p6 u8 \: ~( B* R" q/ m- W9 W
- //db.collectionName.update(query, obj, upsert, multi);* D" s3 w8 Q9 ], [
- ; q# p$ \5 E$ N! Z# x" U
- $bulk->update(6 Z3 H$ c+ X8 C" M/ o: _ _. v
- ['user_id' => 5],
; i1 B5 k6 R/ m% t: G/ p - [
7 N# e7 B9 h7 [6 W! w - '$set'=>['fff'=>'中国国']6 T; P! Q, h- W8 ^4 A1 Z& X) i
- ],
2 C- N: X% T' }, N$ B" ^ - ['multi' => true, 'upsert' => false] C; i- z7 T7 O, t7 X
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条, ]# c% e- r. A8 F2 f
- //upsert为 treu:表示不存在就新增
9 a& k# U/ I. X* Y) e - );0 ]0 E8 w9 M( P0 E2 c
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: U3 y. ~8 O$ y! K% m z" f3 b# ]/ Y$ I8 X$ P
ordered 设置 v; x* [3 L! ?" @" R- `
# X3 O! T8 c' D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。& U) @- t. U% s2 V Y
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 z7 E4 e l$ R
9 a+ a% x- ^' L& L4 F
5:删除
6 a: y; h4 ~ x' x4 {; e4 e# ^* A b7 @. t, F4 ^" E7 H$ |
- <?php
. x$ H8 ^% J% J9 T' h
- ]) \* l I* U* d' M- //链接mongodb
5 t# N3 \; r$ l, s5 n8 T - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ s1 G9 m+ |9 K& m - 1 q4 m+ R; b' p" }- R7 H: r
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 i. e. b6 o$ D- X7 {. }
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 e9 t& p! {/ d
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 Y0 E) y6 ?4 c- K0 x
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
0 E$ L: ?- X% H- d. Q0 \- ~ - delete还可以通过limit设置不同删除方式
1 e/ c1 ?9 N1 y - 9 }4 K2 e% r* @" B5 V# I; p, ~( S: [
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
/ N$ s% ~* V" V. t - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
% G! A( N" ?0 i" X8 Y9 w: g" n; W( V0 q+ Y
6:捕获异常
5 y1 T; S8 X q0 f1 M0 ^* I4 U( I3 U# Z5 u& N2 U0 X
- MongoDB\Driver\Exception\AuthenticationException
4 S; ?. l! ~& I8 a9 A0 o - MongoDB\Driver\Exception\BulkWriteException
5 J5 z+ W, {9 ~6 C5 I - MongoDB\Driver\Exception\ConnectionException' P( l ]' G; @0 i, x% ~# r6 x1 }
- MongoDB\Driver\Exception\ConnectionTimeoutException6 F5 l5 A$ v, z# c$ r
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口9 b6 i* z+ B6 A6 Y- B
- MongoDB\Driver\Exception\ExecutionTimeoutException1 B4 k: I. `1 p
- MongoDB\Driver\Exception\InvalidArgumentException5 o+ y: g% x$ Q/ p- ^. ~6 b; c5 e7 X
- MongoDB\Driver\Exception\LogicException
# q* n8 x2 m8 W/ T+ @/ P - MongoDB\Driver\Exception\RuntimeException
' h; ?% ~$ o w( o0 Q9 r - MongoDB\Driver\Exception\SSLConnectionException# z6 E0 Z5 e! O A$ t
- MongoDB\Driver\Exception\UnexpectedValueException
. S, _" C5 Z; K$ q - MongoDB\Driver\Exception\WriteException
复制代码
1 q- k, v x3 \% s7 @# t2 H7 r# I! `- s1 p/ v4 ~
' S$ q3 n* G0 Z+ o2 W% z点击查看全部" U! {- C+ }$ }; v
6 X. Z# p/ Y) d {2 a: j7 f9 c
; j8 O9 q) R" v8 |7 U1 p
|
|