管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
' Y: _3 [; C# ~- k1 W8 c& M) z+ Z, E0 p
下面用PHP7新的API总结一下:5 @- @$ d$ ]/ P$ \4 z6 f7 }6 M: Z
3 T8 @' ^" p% i/ {& a一:CURD; o# _8 G- t c1 y
4 M/ j/ o! o/ h. S5 d1:链接
# t3 X( |7 q$ ]; {& M5 m2 E( h
j- ~+ d' E7 \6 t* M. X- <?php- @8 q, `& {! E0 v+ _) Y# s
- //链接mongodb/ l2 u f, [1 B) ]0 d& f, ^
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
# n5 s: ]) T' L9 X& l4 _ - root 用户;123:密码;如果没有密码则不写
复制代码 4 }7 C: o1 J* v2 X2 A7 i2 ^
( ?1 y2 x( R) d* H8 Z3 B
2:查询' P) }; Q: c6 @# t% C7 J. f; {* O2 ]
" l8 U* T5 I7 a" O+ |5 z
- <?php
5 b9 m' K' S) b5 k0 I1 ?3 s
3 {5 Y! ~; g) X4 p _5 r- //链接mongodb6 J' c+ i/ C( M% `5 k
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' b0 V+ B9 r- Z! S% K6 C
9 r4 a1 ^6 h g: x; F- //查询
1 E$ p! T2 ^, o, C2 Y5 ~' O - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 J6 Z7 S5 X6 C' W
- $options = [4 W9 a! O; a6 g4 }0 j2 R# N
- 'projection' => ['_id' => 0], //不输出_id字段
6 G8 ?( I; E) a* ?1 }; L! L - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 u U6 _( `$ v4 l( T
- ];7 ?$ a% m N& `! M+ r) n* m( _2 w
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 D$ e: p. j6 D" j: f$ w, a j
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合+ G8 j" A" y0 p/ k7 l
5 [. ]9 g" N2 T- \7 H* ~- 5 N; _& e% o+ _2 H
- foreach ($list as $document) {2 M! P, k' K8 w
- print_r($document); & z) o. c9 ]! w, w6 _4 N3 A
- }
复制代码 / y( W+ l# c; N; q
查询更多条件使用方法,参考第二节mongodb基本命令,查询, |4 k6 ~: I5 p! R
5 H* j4 ^* j) H
3:添加8 Q3 L7 x" B0 d- f6 r7 ]. X9 @
0 I& P% e$ ?( f4 A c: }0 U
- <?php% d* {! I1 Z* X+ ^3 n
& c3 ?0 y* h# d4 c$ \8 @- //链接mongodb0 t9 M3 r( S' {+ Z! Z7 x
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. p% y) r. G; i - 7 r! a" j0 I8 _" O3 Q
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' I1 D0 R) [2 I: M - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 Q3 P0 d6 ~0 G$ f! {
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
- ^; O/ y" @9 {7 w8 H4 K) ? - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
& [1 x4 }2 Y9 X `1 q1 g% s - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
8 s! a6 \0 ?! ?1 J4:修改
0 U, ?9 H% r: E w
; e# E; U$ H6 [4 w# ^- <?php O8 ^: e: X- c g) c& F
% ?- Y. N+ J v. x2 c+ L* S6 x- //链接mongodb
3 Z9 X8 C/ F; M5 h% m - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 O8 u/ O) a: p1 q) X
- $ \4 w4 s; m. _) ^/ i4 H' r
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
# A9 l p. Z- ^! v1 `/ L9 T - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: g. B: U1 ?2 [ ~+ O9 h, b; q - $bulk->update(
. P( T7 x. U4 y4 p - ['user_id' => 2],
9 v, b$ K" j! W - ['$set'=>['real_name'=>'中国国']; y5 [) B& k- m2 N
- ]);
* S; r6 r* C' R; U - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
' M# d v, c* L; D( I. C - //1:字段不存在会添加一个字段;
: @# J9 ~$ n6 U6 l - //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ ^4 t: b5 R" p4 x- s' Z+ ?
- ; p& n4 v& f d/ d3 b
' v+ \3 i4 n; u0 H u- //如果条件不存在不新增加,可以通过设置upsert: ]1 \) ^( s! g2 C7 d- x4 n
- //db.collectionName.update(query, obj, upsert, multi);- C V: t8 f, t h
- $ E: o0 j u& p8 D9 j
- $bulk->update(
+ ], `5 D, A' ~ E( h4 A - ['user_id' => 5],. R. m1 y1 O+ }' Z% h
- [9 d* Z7 k9 E+ N/ \
- '$set'=>['fff'=>'中国国']* p3 n; _. K _* L! |0 b4 @* }3 P
- ],/ o3 ]# _( n7 Q9 Y; Z
- ['multi' => true, 'upsert' => false]
& \; I" D; l" q - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& h; D5 c2 A4 X3 H
- //upsert为 treu:表示不存在就新增
9 ]3 |* K8 ?, M - );) o; h7 h* T7 ~$ v- f
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
c- f2 f: `; C* e* y1 g5 C/ ^7 ]7 k% s3 @: w1 r; t2 |
ordered 设置
- f- G: o+ I$ L, h
4 ?" d9 j% ^9 ~ [/ i" a1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 }0 x. W, Q1 R6 B5 V
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
$ ?# z% s" G5 W9 O/ R7 Q
S8 U3 i( k9 | u P5:删除, W2 h K8 Z8 X; q
/ V, `$ O) ~% {; [4 B; B: I- <?php( d6 v, V5 N# K! K$ M
2 Q, K" b* t. P. u/ W- //链接mongodb
2 D1 y$ a, Q& v. |. S m1 \/ Q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# R: M. D, X1 u( ~7 ]
2 X6 R; O! p9 l- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" w* h$ f5 F; Q% N* i/ p
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ l c4 m/ T8 ^, I: b& ^3 L* E8 W - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 `3 \. k# h1 b! F S
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合4 \% V4 ~8 N- o0 E9 b# Q( U9 R
- delete还可以通过limit设置不同删除方式! H, [- K% o( \: P0 q7 h
- & J' i8 w. ]/ K! W3 Y' d3 [
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
$ O$ l. t/ Z1 ~- z3 Y' ` - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
5 D: B/ O1 C& v7 j6 I& ~/ n
4 t* y) \+ K2 h9 e$ Q* ?4 Q6:捕获异常8 Y% ^0 V( S9 _/ V, C% z4 S8 S
1 O3 Z2 W [, c( a' v' K
- MongoDB\Driver\Exception\AuthenticationException# E$ L1 A) [" G) @
- MongoDB\Driver\Exception\BulkWriteException' ?* y# V/ ~- o" ^1 X
- MongoDB\Driver\Exception\ConnectionException% e. d/ w( Z# R7 \' L6 E+ ?! d
- MongoDB\Driver\Exception\ConnectionTimeoutException4 H3 l$ d, z% G6 w
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
! g8 q6 G6 y4 y - MongoDB\Driver\Exception\ExecutionTimeoutException4 ?! @4 \3 D( z/ O& M
- MongoDB\Driver\Exception\InvalidArgumentException
5 _7 {5 I- M0 a6 p+ D- j8 O - MongoDB\Driver\Exception\LogicException
4 O( M( W6 I, U8 h7 q3 R - MongoDB\Driver\Exception\RuntimeException
' g9 N. @" t- ]* w$ |# w! t% _ - MongoDB\Driver\Exception\SSLConnectionException
: P' T7 o" Q) ^2 q - MongoDB\Driver\Exception\UnexpectedValueException" B0 P+ l! C) T2 B- [6 U( I5 T; V+ i
- MongoDB\Driver\Exception\WriteException
复制代码
# v5 j8 @+ W! ?
9 ?; c' `$ n- b7 F7 u! t7 M+ R9 D* @
# F& L3 m# f$ M) Y W. P点击查看全部; ^' k- Z6 A) g, T; f
2 K2 I- @! B) Y
1 q$ u% }1 F% U! s& G9 h! q |
|