管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
& m9 L& N e( `8 o& t8 Y" f2 V W% ]' D$ ^/ U6 ?
下面用PHP7新的API总结一下:; Q2 b0 c( n( S2 a( v
7 g8 L1 E5 W; H9 e8 t- u
一:CURD
. P' t# `& ]5 H7 |7 ~9 j
4 R1 y# l; ?) ~- w5 T9 Q: t1:链接
- m+ F" q* d" \+ M& {# [% Y
' L/ Q: B, r, m* b- <?php
6 N( i1 m: d6 m - //链接mongodb# N7 N3 \2 R5 Y9 p- [- t2 Q( [$ e1 f
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
% Z: N. E U8 D - root 用户;123:密码;如果没有密码则不写
复制代码
: d: j/ F5 }) ~ Z6 F/ Y: S" k+ {' C+ J6 w! _. P2 F% d \& `& _
2:查询
' a& h0 ]- w2 I9 d/ W8 v7 v# a) z$ g
" e5 @0 } R; P, ~! D/ D4 k1 |# [- <?php
: [) p0 R$ j$ |0 P+ A! o2 \ - + h% A% J$ x( T# T$ h+ b
- //链接mongodb* _2 r5 X- c% Q* I
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' C5 U9 ]6 N2 Z
* m Y8 V, B2 B& Y: c! l5 g- //查询
& [" x* R7 X+ i- o& } e7 v' w4 {" ?' \ - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
0 x0 W1 z7 d3 i' o5 X J' Q4 B - $options = [
6 `3 y8 Y& a6 @7 l& j' J - 'projection' => ['_id' => 0], //不输出_id字段
! `3 K2 Z7 a8 w) u - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
& ]# b) g& m9 a- l7 R - ];
% v! M! v# T3 V- z% t: ^' O - $query = new MongoDB\Driver\Query($filter, $options); //查询请求% N" o1 O* @$ F- L: w4 U
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
3 e- D! q. @4 G ^3 D9 a! Y/ }9 ~5 x# X
- S; o# B- C) Y
6 L4 @$ R: R8 B; q7 J/ y# c- foreach ($list as $document) {
; s# x: d* ^3 _* m* ^* W" c0 I% \5 | - print_r($document); 5 q: T# p0 a5 P- d
- }
复制代码
h9 v, J" ?, S: T& y查询更多条件使用方法,参考第二节mongodb基本命令,查询$ q% N1 I/ v9 X# I
( S- {4 E0 m3 |0 U# p
3:添加1 W/ S6 I. ?9 J3 F$ t7 W0 r$ R
, l4 f+ W7 U7 |/ y- <?php
; c& { K+ Q1 X! Z - ) x9 T! m* X7 r, L8 k2 k
- //链接mongodb
+ [$ z. r; I, s - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ q+ g$ N4 y; B2 g. D
- 4 V1 g1 |7 R& r3 S
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 A4 C1 ?+ M0 t/ |, M+ k
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
0 u0 G7 Q. J5 w - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);- G( o9 X8 x& T% `' h' W% L+ J. T" N
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 v/ w( ~- C; H2 x
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 5 O; R+ h, {3 a, j
4:修改
; Q; r! d: b: m5 s9 g- c
+ {; u" m5 ~8 L& [3 M- <?php
0 C; r5 Q. x; s3 w) o& } - 1 ^* Z; P \; h3 ]/ Z" P
- //链接mongodb- @* L1 h- O5 Q. {2 ~3 f$ c/ a* I/ o
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 G0 L; t9 `' D/ Y# }1 E4 P
3 U, q9 B9 `. ~$ h7 k$ }- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 Z; C/ v+ f* ^9 r8 z - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. ?: V8 ^# b8 C
- $bulk->update(
j. w, q# ]4 N# a% o - ['user_id' => 2],/ m3 ]- ?# T( p$ `
- ['$set'=>['real_name'=>'中国国']& E+ o% p) C7 W
- ]);
$ {0 j6 B+ C! M) ~6 U0 M! h0 C - //$set相当于mysql的 set,这里和mysql有两个不同的地方,: C2 ?) i/ x/ }# M
- //1:字段不存在会添加一个字段;. I0 ~9 X& s( _/ y# Z) K
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert: F/ g2 a: J+ b$ ^- \: X
- + U }7 ]5 D+ d' d, I8 T
3 `4 z, K( R2 @- //如果条件不存在不新增加,可以通过设置upsert
7 h2 G6 b2 \! Y1 ]( e, D5 e* p - //db.collectionName.update(query, obj, upsert, multi);, C& c8 I {4 J z. O" Z5 p! l
- + `" z' ~6 D; o" x5 r4 l* t- R
- $bulk->update(% s3 V( L6 D; p' L5 w
- ['user_id' => 5],4 B, ?& e( a! T }
- [
0 I( `4 E# X: J( @2 k9 X: {- L - '$set'=>['fff'=>'中国国']
( }# F* G. p+ H - ],
& I) Y5 s g2 F( v7 K2 [# R c - ['multi' => true, 'upsert' => false] g- T$ x3 I9 Z$ `3 l& g
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 a/ {) {- r3 p) o O
- //upsert为 treu:表示不存在就新增
% w( \0 h- D5 b. m - );
4 b z- _ U i/ ^! Z - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 " S; b& G5 m' a0 i: x0 T. r, B
& ?/ D. S/ ~( ^2 V$ s6 ~ordered 设置* O8 n0 `2 i6 z/ f
5 g4 A2 i6 _- K7 w0 I, P
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
% ^9 ~8 M( u( w2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行* m# O3 x: q/ N, N1 x, o
( Z4 Q1 J; y/ S' n' ?2 H, X5:删除
: `. J( J% g5 K5 q. s O- W1 @( X( ]8 t7 O0 l
- <?php
& {, e6 G* ?- Q q - ! O0 w8 `1 u+ q' I* F& ]- U
- //链接mongodb8 Z& e/ g/ V l& \; ~0 W* y+ U
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ _; H6 d) M' q+ E# l, q
; W. J7 F- j. H5 ^* x. j( i+ E, D- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; y E3 p! ~ o8 ]) W4 F+ O - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. L: }3 n* a! J& K! @
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段8 a- [$ B( z' L* q1 x2 v2 k
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
+ K2 w* c. } p! t8 F( V - delete还可以通过limit设置不同删除方式9 k9 H; H4 w4 e# p8 Q" U: K
8 C; X+ [6 x% _5 [) V' w0 d' `- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
6 ?: ]& f7 a! ]* U2 L' f - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
, ~( k( B& `9 M2 x6 C' P
3 V% U; t4 V) a6 j* E: w6:捕获异常2 p! r; ?9 z' f' V8 k' ^( R, x! O- Y
+ Z3 p {- z; p- R
- MongoDB\Driver\Exception\AuthenticationException
6 ]! U1 {% A& I4 Z2 m: x8 K# y - MongoDB\Driver\Exception\BulkWriteException A& ]$ A- B0 X+ d
- MongoDB\Driver\Exception\ConnectionException! i* D! M3 `) |3 t/ F. P# Q# v5 E# o! x
- MongoDB\Driver\Exception\ConnectionTimeoutException, ^1 U5 r2 n# `* ~- T
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
7 a2 A, w& m3 v& x2 ]2 q - MongoDB\Driver\Exception\ExecutionTimeoutException8 w- d3 ?# u I/ K9 ]* I
- MongoDB\Driver\Exception\InvalidArgumentException/ i+ [# T8 f/ j1 m* w
- MongoDB\Driver\Exception\LogicException
) a4 g" Y; S4 F& m - MongoDB\Driver\Exception\RuntimeException
! [( J+ h+ O& f4 p2 T - MongoDB\Driver\Exception\SSLConnectionException" x5 u/ k! v- Q. A/ k/ U
- MongoDB\Driver\Exception\UnexpectedValueException. l* @# a' M: y1 c. Z1 K- s2 W4 k* }
- MongoDB\Driver\Exception\WriteException
复制代码
! K. ?" _2 i X& k! |/ m; K; Y. t! W/ h0 q' A
. T& ]& m5 `, o, d+ J* }# L U
点击查看全部
7 W& q+ @; Q6 e9 R5 J, g' W7 R4 j! q1 d. V3 Q
, R/ g, h/ _1 n |
|