管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。3 T& C& _6 K$ j: Y- P( s, t
- O& A5 \% e& }3 d5 a" H下面用PHP7新的API总结一下:! z& z- ~. k. O0 t+ z9 B
1 B1 E& w& k0 f( o. V/ {' q9 l$ P
一:CURD
! t/ B) G+ l y4 o, D6 T
0 p0 }4 d6 H6 i' q6 P+ o1:链接
, R! R4 m0 a U2 c, {3 c
& ~' r: }# ]9 J1 k1 H- <?php2 u' f8 t$ f; |& [" o
- //链接mongodb
$ Z- D4 d+ ]8 E - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
- i: G0 N+ `7 ~9 X2 [6 Y2 H2 G - root 用户;123:密码;如果没有密码则不写
复制代码 & s! x- F+ q, V+ ?7 I
0 {4 @* L% \/ C5 Z4 w G8 w& E2:查询/ A3 H1 k8 Y8 V8 H
" n: Q ~9 M! P" Y E. T- <?php) e, n) B5 K( @* Q, Q8 S3 i
& i8 X+ S- L0 ?, Z1 Z- //链接mongodb
% \5 M5 R( f0 _ z# J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ C z- F: Z4 ~$ q; K% Q! j2 h
8 c3 }9 c% i/ s6 C8 B( B- //查询, c$ T9 x0 m; E
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
5 x6 N2 I, o6 n, A - $options = [
: `, R7 g! A% X7 ]9 L - 'projection' => ['_id' => 0], //不输出_id字段. Z1 g' O( L. O8 O; h7 o
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) b9 f1 P: D" N; [) b8 G
- ];
& {$ S0 l5 C" @ - $query = new MongoDB\Driver\Query($filter, $options); //查询请求 D8 l6 E" N f B& R* x/ T. E
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
/ S: e6 m z0 H+ W - " n1 s4 ~0 Q8 p- ?2 s J; z
3 _0 t9 B ]4 H7 r, W; t1 M- foreach ($list as $document) {
( _" h# M' x* [" I* P1 C- H - print_r($document); / m9 d3 |6 i/ |9 a+ R' p2 D5 e
- }
复制代码
( [9 N& p6 f' C# J6 q查询更多条件使用方法,参考第二节mongodb基本命令,查询
( S- e4 F. U8 K8 r7 P
, p9 c( Z; |3 X/ I( |3:添加: I9 q \: }% _: z) e
9 d4 I7 Y& l1 g" R1 T
- <?php/ }0 m$ \0 `4 G. i- I* K
. n- K3 {% u, B' k7 \2 l- //链接mongodb
: m6 i. Z; v, @+ K; a) S - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 g/ x1 j2 ?- ?" f6 g' b
- . p% R- t- j# S4 u* O* L8 Y- p$ x) s
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 Y. g5 t& P9 D' [
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 r7 {- ^0 R7 a0 w2 i+ R
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
; G2 z+ b: }% Z$ j5 | - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ F& ~, o) H/ q- ?8 i# y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # M" h7 Q. M6 c! V
4:修改0 ]% a. X, p* N
1 [, R7 q/ U/ |2 O- <?php
- c; c# p, H3 |# Y8 U - + k9 s4 h6 w0 o) N% X
- //链接mongodb
! o8 z8 u- R/ A+ b2 P - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) Y) z: Q; g; q' A/ y+ E8 I9 K+ }% B4 r - & j [9 @( e1 v; ^, Q
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, u9 S( N, r6 \9 H* E, ]
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- G+ R- h" Z+ A- L4 b/ L
- $bulk->update(
2 z) S3 f- O2 {- x - ['user_id' => 2],* o( O: j) o& m- U
- ['$set'=>['real_name'=>'中国国']
" X0 H% ?( @4 h y0 N" L - ]);
, a8 ? @6 n5 l: O; t: `9 A; I' h - //$set相当于mysql的 set,这里和mysql有两个不同的地方,. p7 `# D7 n0 U& k6 _
- //1:字段不存在会添加一个字段;3 S+ ?1 B- n# H" x! r1 L
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
& B" w0 y2 J* G, }
- p9 u) ?; {$ z8 T- , m+ ~( b$ m/ o6 x
- //如果条件不存在不新增加,可以通过设置upsert
6 J5 S, L4 @0 _+ ~* ? - //db.collectionName.update(query, obj, upsert, multi);
+ ~% E- h- \# s - & B$ j/ ?$ o$ {
- $bulk->update(
+ S5 I) M3 g4 L- b5 `6 L - ['user_id' => 5],' s0 ?4 @) W- d: F% s1 Y
- [
" C5 }5 @: B* _! W6 ?. V3 J - '$set'=>['fff'=>'中国国']
9 f! Z& N/ z) J; S - ],
+ X) z4 }- b5 ~* P - ['multi' => true, 'upsert' => false]
& x. u) q! y9 @5 t0 G - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
) c3 S6 `& `1 c, c* `1 ^; b) | - //upsert为 treu:表示不存在就新增1 y4 s4 c7 E w
- );& R6 l, o. i4 ^0 `3 ^% A- z
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ ?4 P- j2 C% K3 S' M4 _
3 Z$ e! B5 w! N/ q, ]9 Cordered 设置2 l. \, L1 d& P9 o# D& ]
) {; Z- h5 ~$ [( D7 J1 W, H8 U: s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。1 O+ |+ T7 v/ P; a
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 [. x N3 g, C! R% J
/ K# _9 _+ b3 ^
5:删除
( R; @, L1 i, a O2 e) I8 I/ `# v; C4 j+ w
- <?php" i) S* O% p0 A6 H
- / D( Q. Y1 `% \- r: g( O7 T R6 o
- //链接mongodb
% C4 W3 C- A/ d - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ [) U% F% D9 i7 R* ~3 i% h - 0 q, H% T; [' C
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 S# x' D( `0 Q- ^. _, `3 X
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 ~% _2 y& V8 J8 A8 x0 H
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
: [6 x" V4 C3 w - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
2 ]& L* w' ?! P: N, a. U* i - delete还可以通过limit设置不同删除方式
& G+ L( X1 s% H6 r6 b! ?4 V# p
6 V& @0 c2 h0 |* o/ q- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
0 u* K' n! I0 W( y9 n - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 + b( X; p2 t3 k; }! k5 E! i% B
) n6 y' b: }$ x E
6:捕获异常
4 F/ I, E& T3 K
* d! i5 F& g! e8 i6 G( j- MongoDB\Driver\Exception\AuthenticationException
6 _ A# h+ _5 d - MongoDB\Driver\Exception\BulkWriteException
; t; H. w$ O/ G- A- R2 { - MongoDB\Driver\Exception\ConnectionException# ^) Y. T1 ]5 `, x9 v# |+ `
- MongoDB\Driver\Exception\ConnectionTimeoutException2 A! y( U/ [5 |, y6 ?" R
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( Q& J; `) S$ g$ c. V
- MongoDB\Driver\Exception\ExecutionTimeoutException
5 ]* L0 G& V) \' L" \$ E* j' B$ | - MongoDB\Driver\Exception\InvalidArgumentException
6 E" g) C# Z0 l+ p+ z. {: R8 w - MongoDB\Driver\Exception\LogicException! H1 n1 O+ h) [
- MongoDB\Driver\Exception\RuntimeException8 v% U- w$ @, I. B; \! J: _
- MongoDB\Driver\Exception\SSLConnectionException
8 ?1 f" D& y; E/ c - MongoDB\Driver\Exception\UnexpectedValueException& K' H2 x6 R1 R
- MongoDB\Driver\Exception\WriteException
复制代码
4 C+ e0 d Q0 T9 U
# j5 a2 ?9 L3 @1 [% T9 B/ k1 o( Q/ G {. y
点击查看全部9 S5 g" v; N4 D0 E
% v- q1 m, @2 A3 d2 u3 n6 H8 W8 ^! d' [
|
|