管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
% e8 P( l' \1 C5 G: u" P
1 u! P+ r8 R s7 [下面用PHP7新的API总结一下:
& y9 y z+ n1 M% x3 C' r& @+ S' x3 m! W: E8 m0 y3 g
一:CURD; K( O% B0 b- {# N* S8 L' e
" |( c% b; Q7 R
1:链接9 a+ U6 z9 V. ?5 U; h
- d: ~: n: s+ _, k8 e- k
- <?php
! E! ~$ S0 S& W. v, H9 f - //链接mongodb
- u" v' o& w( o - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');5 |& R6 g, q& r
- root 用户;123:密码;如果没有密码则不写
复制代码 ; ^1 F$ @2 [) v1 n8 Q: t
2 I' J( P% |/ B" w! ]1 Z# o
2:查询
2 b6 R3 Q( y: V; ?& C) W# \
0 G! g4 R A3 F$ X, S) Y- <?php, E. N3 |! `- K. p2 r; D
- $ W# X# e- x8 i0 w' i$ q O
- //链接mongodb- e. f: R, J3 P& Y8 `
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 {8 b, n& v. S
- $ Z' b0 j, n8 p {
- //查询- V5 d* A; |$ f& t5 U/ \, y5 D' I' Y
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
6 i& B Z e* {# a, S - $options = [, O6 l' R, \! D) Z9 q5 n' t
- 'projection' => ['_id' => 0], //不输出_id字段
. ^6 L. M* f' ^* M, }5 O4 c - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序9 S# Z/ }1 A1 @. n; U @& V
- ];
- E3 v) c& J4 C. V# n+ g - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
' Q; Y! g$ w8 W, l. U! c - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合( C2 R" O6 |% {. x& {1 Q0 C6 N
- ' i% W/ t6 _) H. ]+ d4 V
- # v+ p8 r# b0 v2 H3 H3 b) c
- foreach ($list as $document) {0 g q' ^; n0 b: M+ A7 k) m, p' l
- print_r($document); & U9 r% W7 h8 j2 s
- }
复制代码
9 E' _4 u0 ?. s! f查询更多条件使用方法,参考第二节mongodb基本命令,查询% M1 E! s, z Q0 H: N4 Q7 ^& ~
3 [( s4 [$ Z: k k, e0 T6 {3:添加
5 Z+ w& m$ b4 o& t/ O% [" m9 O; C2 m3 f+ a9 l% k( ^5 D1 |
- <?php
- w' C5 [+ d4 L. L - ; X6 w E5 N$ @( \3 y2 V9 \1 d
- //链接mongodb* E3 ^: I( G [+ c! F( Q0 O
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! u. T9 j5 Z3 e( d
- 5 z' d$ c" _/ ?+ g7 I5 Z9 c
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 \% {- e# H* z9 B i
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 G3 M% c( F4 L: y' m
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
+ y# R4 s# ?. Y - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 l2 I0 c1 t- {' Z6 q3 g) e4 K
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
6 M8 X% v5 r. Y4:修改
' C9 X" Q+ }( P$ ~- k" d1 X
) g- k4 x- R8 g; C- <?php: e) G6 j6 D) V+ w8 O2 @! e2 Q
- 1 O5 L0 U2 x; w/ Q% E
- //链接mongodb
) y9 ~0 E2 ?" {6 s8 w - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ D" u: f F1 c' ?( w9 o
$ Z" i9 i! J& O, ~8 X- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
_# N7 r! r" z3 V8 K! F - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行) y9 U3 U ?) L' n+ j8 P9 `
- $bulk->update(8 U: W0 _5 D+ y5 \8 k" M* Q
- ['user_id' => 2],$ { G" a! W! J: K
- ['$set'=>['real_name'=>'中国国']! g: n; M7 q- |! F- {7 f
- ]); ; q5 N# A% k8 u) C; z) |
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ e8 O, w( L! Q
- //1:字段不存在会添加一个字段; {* i N: u6 q/ Z! B! X
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
1 B, A; |7 } T0 V. x - / j3 }( S5 E- r, b1 y, |9 c
- ! O1 a* F4 w, Y+ e6 K0 |( u+ G
- //如果条件不存在不新增加,可以通过设置upsert
9 r, g* r7 B( D* X - //db.collectionName.update(query, obj, upsert, multi);
1 Z6 i$ ?. X8 F4 H - $ W* A4 g7 g* n
- $bulk->update(# T9 T+ ?. c( S0 k$ V
- ['user_id' => 5],
8 r% T2 k3 O; H4 Z a9 o - [
: a" U% M; a; z3 T1 u/ ~' s0 _ - '$set'=>['fff'=>'中国国']
7 [( _3 m2 E* ~0 k2 N% T! v! o - ],
) h p! m6 }7 c6 W5 K& g - ['multi' => true, 'upsert' => false] 4 c8 G6 L$ ]5 J8 y8 \' }# s; g
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
2 d5 ]8 i% T- q3 m& g3 B0 ] @+ K - //upsert为 treu:表示不存在就新增
- W, S, I0 K- `! k2 q7 e% L: L, V$ ?3 ^ - );& _2 N9 X6 g/ ~8 g+ Q5 y! d: r# r
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 T* J* z0 ]! a: L
9 X" Y! w+ V+ G) Sordered 设置
5 U; ^9 i! y4 G2 E' E" Q7 ]4 n* T( o# ^6 V5 C, r) x
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 u& i# g/ M4 z7 y: }+ g/ z9 w2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
h, D( y" x; A5 [7 E; p
7 c; T+ S, d* {+ ]; I% Z, y$ X5:删除
/ D& E9 Y9 `" L( k. M0 P
- o0 H2 k0 r: w0 g4 z- <?php$ {7 C' |: u% D. _% c7 _2 S& W" l
5 o* Z& W5 X' r. Y. n6 S- //链接mongodb
/ V! d) D6 A$ A; m" |. f - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' W8 G+ R' [" b% B/ K, w
8 e. ]; }) Y: x+ d/ q, `; L( p- x- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 e) ?# J7 c: X1 O& E, \1 M% b - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- z: b5 J2 i7 z) ^ - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
5 n# [) w) \6 u - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合0 K% c$ y6 \& f. E( b0 t! p
- delete还可以通过limit设置不同删除方式
* m' C' N- C# S, @3 n8 ^3 i3 Z( p - U6 a0 f6 i: x* A6 `. C
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
' p2 w9 K- r; v( K. J - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ Z: V* R; g/ y, ]) L
" ]9 n9 |+ h% X- e% D: Z2 T6:捕获异常/ t' L6 O4 y# r% c
7 |: s; R& r$ }- MongoDB\Driver\Exception\AuthenticationException) r4 D; P3 w) ~) j5 U2 `% a
- MongoDB\Driver\Exception\BulkWriteException
5 x" q& J: | Q6 d8 [ - MongoDB\Driver\Exception\ConnectionException! f3 f4 C6 d [& r, S
- MongoDB\Driver\Exception\ConnectionTimeoutException# K. t& z0 S, ]
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
: ?( u' d1 K5 B: ?6 c, j - MongoDB\Driver\Exception\ExecutionTimeoutException, J! y6 l) D: J X/ \, B9 ]/ A: M# W o
- MongoDB\Driver\Exception\InvalidArgumentException" t; D/ h, r F1 m. R$ t
- MongoDB\Driver\Exception\LogicException
$ U1 }; L3 r/ T/ O: \& w7 }5 Q - MongoDB\Driver\Exception\RuntimeException# J9 h! |" S& o- ?3 T+ e0 C2 T# Q4 C
- MongoDB\Driver\Exception\SSLConnectionException5 |; }9 ~! s7 k$ f3 V% \
- MongoDB\Driver\Exception\UnexpectedValueException( V& X% @3 f9 @$ R+ m( Y1 G
- MongoDB\Driver\Exception\WriteException
复制代码
1 ~4 n+ A t/ G9 M, s
0 m) Z3 i }& _# X, ?: ], P- P0 c; u9 j7 \2 c
点击查看全部0 \' Z& [$ k/ z4 I
! b4 `, k. X% N; U, w% l6 B
?* ~# ^: G( @2 n |
|