管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。" M! M1 q4 ?1 E% O8 [ d- \. I
1 O! C! W! B# m- @下面用PHP7新的API总结一下:
9 ~' c+ X( V7 q7 N
, T' Q* @, C2 l$ ]* J, n一:CURD
# j, P+ ~) N) r8 c
! W. K7 ?8 Q3 I& y1:链接6 [. u( T( @9 H: p, \
8 ?9 ^$ h8 ?" A' }' U* J3 d% F- <?php
. L. x, S( K0 L2 X( T5 o: j& @ - //链接mongodb0 D% _1 o( w& ]9 ~ j" _
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
! T8 `6 R l0 s' J& \ - root 用户;123:密码;如果没有密码则不写
复制代码 9 l: I. Y% W( l3 u+ U
) V. V; X: S% g- F V
2:查询
( Q9 F& r( c* u! Z) z
5 E" t* R! E8 v _7 W2 _5 Z P- <?php
* }# Y7 }7 v6 h9 C! B - 4 d+ k, X& ^0 P: H" O' S
- //链接mongodb8 p; N9 v" s. d( M. y, U6 x* Q" ]
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ E- i1 b5 \( Q: Y/ B5 F( j - 9 I! |! t2 D- o- A
- //查询
" h- w! `" I9 O6 u" ~ - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 F, u% Z5 K1 T0 _) z+ ]
- $options = [: P! T: _/ f% M7 {- x4 b# n
- 'projection' => ['_id' => 0], //不输出_id字段
: C7 D8 L( _. ]0 J - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- R3 ^7 R/ x8 v+ J
- ];! @# \% K5 N( A# |
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 v. x, D( K2 t6 k9 |& o
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合5 v* T6 t0 B" T o k/ w/ z8 G
' U( n# X* s( Q, h& E4 ?# s. a: A
, _* s6 G; w+ l$ b- foreach ($list as $document) { }1 y" F6 x5 m9 e! n
- print_r($document); , w+ z/ B, U% i9 a/ N
- }
复制代码
6 e( {: E" u# d查询更多条件使用方法,参考第二节mongodb基本命令,查询
+ B$ p+ P) R) ~! V, K" ~+ |4 M# c Z. w- n" T1 _" R
3:添加; ?! g0 x, a2 G
1 J0 |% d3 R0 \9 J
- <?php
* D3 A+ `# B$ c4 x3 D- b- v; f" F N - * Y' \, N) j: ^
- //链接mongodb
+ O$ ^( R9 H, E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
5 Y% F5 _9 x: B3 [1 n: C. C
* z$ \& Q; z# W& c- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# D1 |% I- t+ v9 |) A2 T+ n
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
. p _; [- b7 S/ g8 G - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);6 l9 h( |' A2 G+ e9 `' y m
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
: t2 h7 O7 L O; s+ Q! X( p2 o8 c - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
u- W T% K9 u8 b4:修改+ a- L! X& V. g, ], L
3 S) C8 k9 @3 u: q- <?php
V) G' {% Z8 A) s, R - 2 c% v6 l$ A) V$ D
- //链接mongodb
" b9 T" I5 U$ T8 F" K+ i - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: ~7 l, O* v7 {+ ^0 \9 w
) N ^2 P. c) Q* b. E! d3 F. {' |* ~- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
1 q4 M4 d! P$ f$ U+ i - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 j$ G. ~0 y+ X- c - $bulk->update(; @2 h! w, p9 t
- ['user_id' => 2],
9 w q# A K' ]' B2 e; d/ k+ |3 Z - ['$set'=>['real_name'=>'中国国']" E. J V1 p' W5 _+ X
- ]); / ^3 g+ a/ C" {' K2 @: Z6 g0 u
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,# u# a* p' U- ?( d/ R# P7 i
- //1:字段不存在会添加一个字段;
$ h z/ E- U1 D, h8 K7 _ - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
3 Q) U% c/ z1 _
4 _9 n4 n* [/ g2 Q; x' e
: a1 f; C! b3 v$ \5 {- //如果条件不存在不新增加,可以通过设置upsert
! `+ A( n/ ?% @0 k" ?+ S/ B" x - //db.collectionName.update(query, obj, upsert, multi);, z3 L( b% o ~/ O- o5 Z
% `5 z' h. i9 J- $bulk->update(
# n; F- E" ^# H# S7 |4 U - ['user_id' => 5],4 b3 ]( b- j1 K/ N( q" w8 M% p" a
- [
3 N9 F8 A$ R i - '$set'=>['fff'=>'中国国']( ^( u/ D2 W5 s, H4 v8 M5 ^2 Z3 L
- ],
/ A% H8 T5 ?/ @" j, U - ['multi' => true, 'upsert' => false] 4 C- d8 Y6 a' I+ \
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& r! n# U1 V. X5 U3 l8 U
- //upsert为 treu:表示不存在就新增- y6 J7 p- N- b3 V2 J9 U1 ?! b
- );4 @6 B) X8 p2 f# c9 H' x- W
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 + p* h% R! ]) M
- @! N! p- A0 R O
ordered 设置! Z. N- U% |! d& ~
4 R9 y6 O, \! q: v9 x6 f& _( O0 \
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' H$ G6 |# r' X# A1 S; q, G
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
1 M5 z, w% Y' C
* ?$ F# [2 v4 d- b4 }) x7 T5:删除* Z; |3 A& f' h" _% _
4 z- s& O3 k6 ] \' P# i
- <?php, o5 s/ f" `; f! [, }- ^* b0 V. [* E
- 2 c6 { z' @) o% H1 f
- //链接mongodb
. G! t0 s9 u9 O0 }# w1 q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
% r" x1 A" M4 `7 j( t8 K
5 Y0 P5 L2 z: Z5 ^; }# N6 P+ @/ l- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
2 R" Z6 d( `# p9 o$ H - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 ?" E) n" R9 ^5 M7 V5 ]+ y# F
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段, _3 a, S7 k3 h. _) l) W
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
1 R% u5 ^9 Z8 ]! s0 a0 x0 } - delete还可以通过limit设置不同删除方式
; N3 k) R+ h. Y% \0 K
s; ~; w) j% e( k% ]; M- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
3 @, n! c- v# l$ X8 y2 E0 g x - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " A$ q( h4 W: x$ Z/ X! f
8 J$ k1 X5 \# ~4 _. A! m6:捕获异常
( J" t4 l+ Q* V3 m
* i3 n5 H. s+ L D7 ] N. h+ U- MongoDB\Driver\Exception\AuthenticationException9 ~8 R t7 w3 e
- MongoDB\Driver\Exception\BulkWriteException
! q' f `' L/ |. {% T - MongoDB\Driver\Exception\ConnectionException& P. q* M! |% r' Q/ N# p
- MongoDB\Driver\Exception\ConnectionTimeoutException
' o, b7 t% d5 o" b" ] - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口1 g( ], X! R8 H9 O1 R
- MongoDB\Driver\Exception\ExecutionTimeoutException
' Q; d8 k- l! p/ B% [! |2 g - MongoDB\Driver\Exception\InvalidArgumentException( ^6 x/ o" w; e% K: B `6 y: M
- MongoDB\Driver\Exception\LogicException
1 Z% `! I4 A6 Y h" r- r4 W! p' U7 X# X - MongoDB\Driver\Exception\RuntimeException
# T X2 l1 V. D B0 i - MongoDB\Driver\Exception\SSLConnectionException, s5 ^9 A" I! L4 y- N
- MongoDB\Driver\Exception\UnexpectedValueException
9 _+ V# b) ~8 T - MongoDB\Driver\Exception\WriteException
复制代码
5 P! x+ ^% J7 \0 o: C7 X4 d% S1 j& v3 t0 x3 ]) c! |5 ` B0 k3 c* [& Q
' X, B1 a# S R" S* f$ r点击查看全部! y+ K1 U0 z J
7 H* ]' a. g' T' X* s' e- d7 \8 e+ S$ i0 t& y, ~$ Z
|
|