管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。1 j* o5 n3 n8 |$ v3 i
( o4 O. h6 U4 Z$ x" u
下面用PHP7新的API总结一下:: U( D9 m9 Y; m* t) ]
8 ^! W* e: M! K+ Y
一:CURD$ _. A: _1 x3 u6 q+ m }, y: N- b& l
: |/ o/ J4 j r' d+ B8 E9 O/ ^7 g/ y1:链接- |( d* ?# H2 v2 r7 w
6 A( X% M4 g, Q8 }8 V: ?$ f- <?php
$ z" z4 U0 R, q7 Y- z - //链接mongodb
E0 I p" V- i( p, V - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
! L& ~/ G1 _1 K3 i5 Y - root 用户;123:密码;如果没有密码则不写
复制代码
% }3 w/ v' T7 O9 C+ U: U
8 {1 B, k. D Q- O5 z8 ^. M: H2:查询* K- J; W( b D7 Q: Q! T+ G: l% q2 S
9 K8 p' _+ \" \! ?& n6 R' k* [3 w- <?php
+ b& e' Z( t! I7 ]! w1 x
' d9 r1 z3 C4 B, x- //链接mongodb4 b% O9 T9 `9 X# V7 L, v- P X
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" }1 B( Z. @7 I$ G9 ]6 S* Z
% }4 T2 o/ H8 y4 J- N; i- //查询) G. j8 l0 ?) D" g! v/ J2 j
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0- y) n; _/ H8 ^, Y I- P/ S+ g
- $options = [( T( n t4 G- u6 i ~- X! Z
- 'projection' => ['_id' => 0], //不输出_id字段5 A. {/ b7 H8 E9 `+ p/ t& {
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' I t- ?. M4 } \0 N+ g0 T
- ];
6 l# j$ ^: i( M8 Y% ? - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
4 b: Y/ N3 q( E9 s - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
0 |# B. }& L6 J, y( _, j8 g - ( B1 o0 `/ s; O8 R4 Q$ w
3 r" H. s& T6 @6 B' v3 Q, m- foreach ($list as $document) { g- L8 z$ ]" s! E9 m( T7 I: [
- print_r($document);
/ c4 I, i9 h- \1 F2 Z/ m& a - }
复制代码
- P6 n" x5 Y6 Z查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 ~# i0 ], \" R0 ] i9 W4 z& P1 M) H: v6 O" z$ X; @/ y4 z; ]3 `% Z& N
3:添加2 ~( ?; e2 ]& |, d
% c, }. a/ r8 T; N/ c5 }* C
- <?php2 o' m9 Y( C9 z: t' ^
) ? ~- k5 e9 d' G) e! F" b- q. d- //链接mongodb- Z, Q8 e' F+ w5 J Y8 H
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, q& B& K( u8 R" n2 n5 e5 h" p$ ~
1 @! t2 O" a% w! H- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行. Q/ R$ {& E$ v- s
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 d% ?$ n' r( j7 } - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);$ J) k' b7 v& [! j' Q9 p" g, ?
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);2 N3 @& [% g5 w
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 9 k3 v1 S% T* @+ E9 E
4:修改
: u2 j" u: a/ H9 R: g$ ^% T
0 { g8 A0 z2 R3 l& ]- L& N- <?php3 P! N+ B+ H8 i/ v+ k0 S: \, B- ~8 d
6 x) W( D( \% l- k5 y1 L9 Z. Y% _- //链接mongodb9 @% ^/ m) H/ p: ?- e0 ]7 z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# J" P' t& r# t6 @3 n3 b
- 3 @* [/ o) A- [: p& o
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 {, O# {+ V I+ h: s - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
5 K8 o j R* E- U8 Z - $bulk->update($ w2 F; W! V* [+ z
- ['user_id' => 2],
$ G1 o5 ]- L4 s) l2 P, z0 M! w. S - ['$set'=>['real_name'=>'中国国']
( J8 F4 S2 S5 j- F9 z& ` - ]);
- d. h3 X5 W3 }/ j" Q) c! b - //$set相当于mysql的 set,这里和mysql有两个不同的地方,7 ~6 }; F/ m6 T
- //1:字段不存在会添加一个字段;1 F/ V7 _9 r: S+ \
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
5 B+ q% b- l f6 ^' G - ) k3 U' Q/ |; h' |. f+ A' ]9 M
- $ a- @! a: R) Q; |+ g% F+ R
- //如果条件不存在不新增加,可以通过设置upsert
9 O1 Z/ ^8 N6 c' A - //db.collectionName.update(query, obj, upsert, multi);( X2 n3 n5 S) ^+ u; d0 j
% Q* F0 n5 h t8 \5 p2 o% }4 g- $bulk->update(9 M6 A/ F* P3 p9 b& n2 K% l J0 Y
- ['user_id' => 5],
) k7 E8 @, P5 S - [. }, t6 T6 q" E: j- n4 d v% \
- '$set'=>['fff'=>'中国国']6 g8 O3 n, D" R1 O, ]
- ],
' t5 c( a; D/ } ~$ r - ['multi' => true, 'upsert' => false] , N" E1 j+ N( d
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条* L9 ]# \. o6 b8 c5 ^) V
- //upsert为 treu:表示不存在就新增
/ l, Q! I/ x a8 j R - );; B# a+ e; k2 r7 y# k
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" V5 ~$ u0 i; u( c, P1 z# S) \: e4 { ^* u& W( M3 S* l
ordered 设置5 g" z6 q+ w0 R0 R2 |
" B8 t) S. T9 m( R6 ~" E
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。$ p/ S1 ]# G/ h) {# m( r6 }
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 c5 u7 E- T" v% T# u5 n# j$ `
- e: b0 [5 N5 v" W, | ~5 ]. E
5:删除0 y1 ]9 S- e0 b% Z
' f. z- `: p# X! h# E& v" b5 u
- <?php
; R" B7 U* R( O! q! n `. g) _ - 7 |7 o5 }4 P3 E9 i
- //链接mongodb
7 c+ N# }3 ?0 I - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ g d0 [, `( K/ T
- 8 V/ j: l2 Q$ T) W
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 _' J* v! z' U. f- u1 [3 t1 B" m
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 |2 {. [( j# C7 X6 Q; P - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段8 Z# S S! p n5 H2 y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
1 C0 M4 J `" B( Q0 N - delete还可以通过limit设置不同删除方式4 o0 ~! x& ~6 p. U' N# k4 S
- 4 V. o8 _0 x/ U: o, o
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据( x' V. C3 Y$ p+ D( W
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ Y# E& U3 R8 N4 g9 g4 B' H% l
4 K9 n7 B @! W, [" |! H) @4 P6:捕获异常2 s) _4 e) r: }1 [5 g- q
- C% o7 K( j* b" |/ w
- MongoDB\Driver\Exception\AuthenticationException: M8 Y9 P3 y6 v1 b! W0 A+ Q
- MongoDB\Driver\Exception\BulkWriteException
; o5 s3 g" ?& c8 h: Q2 K7 t: Z - MongoDB\Driver\Exception\ConnectionException2 n/ H1 I* E1 ~1 H0 k
- MongoDB\Driver\Exception\ConnectionTimeoutException+ [6 t. ^2 t/ O' q
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口' l, n R8 D" U' f S. B9 @
- MongoDB\Driver\Exception\ExecutionTimeoutException
/ t- Y U4 V* l$ s9 o) P, B8 W - MongoDB\Driver\Exception\InvalidArgumentException
q2 A' {6 ? D1 X - MongoDB\Driver\Exception\LogicException+ k. j% O2 V/ V8 ~2 A: d
- MongoDB\Driver\Exception\RuntimeException( b% Z" h/ K8 J2 u
- MongoDB\Driver\Exception\SSLConnectionException) Y) Z. t4 @# L4 I- \$ g' N
- MongoDB\Driver\Exception\UnexpectedValueException& t/ C5 n, K% E" a% A. {. }
- MongoDB\Driver\Exception\WriteException
复制代码
) O- ]" Y6 ^+ r; [, Q" q1 ^. @: w7 H0 m
; h( f6 X5 s3 I. Z8 ^* M2 `9 F* O; s
点击查看全部
4 [& R2 j5 b" l1 i
( P) [+ \$ J4 k1 }0 y6 I) ^1 u8 p! R$ j: `9 y
|
|