管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。 F" A* _( t" W5 [/ K
' k7 f. L* y8 h% V$ k1 W5 ^+ ]
下面用PHP7新的API总结一下:$ X3 F$ J6 p, O' v% k
3 Q) W7 a1 V. V$ G1 O
一:CURD6 h: L2 y2 j" N) N+ t4 o
# k7 ^! V$ \. H$ @: W6 C1 t
1:链接
! J( ~/ s4 W. z2 W3 }8 A. I
& J1 K9 ?4 d) ~# d( }- <?php
4 Y' _1 `# [- E2 l2 ` - //链接mongodb
7 J9 I* g; f t4 g - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');, W% m* H; T0 D
- root 用户;123:密码;如果没有密码则不写
复制代码
% I, u7 T% [* e. ]( v! I4 z4 o7 h: u. T' `3 r
2:查询
0 Z) ?0 X- l5 {( i$ e1 b: Q, p: s$ g3 l# e
- <?php
) e5 j) P2 `1 c6 } - ( m: z5 q- a0 z: G0 i- O0 N
- //链接mongodb
4 z, x3 q. F, O7 ~ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) F8 S9 }8 J1 l7 i9 l6 p @" q6 ]+ Z
! [% N* h) y3 ~" k+ ?- //查询; L2 t b, y C
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于06 o. E! g- { |0 M
- $options = [
. X+ o; J- _" C; N1 A# T( Y, C/ j - 'projection' => ['_id' => 0], //不输出_id字段+ m; ^/ |3 S9 o5 N; A. |! N
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) h. m5 t+ F) R! g6 u* M
- ];
' H3 F# d v& r( J% r6 H: Q - $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 s& G& Y8 ^4 q
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
2 \, E K- o, ` - 4 [- h# X# _5 v2 y$ j: Y
0 P, c9 C# z$ s, M; G! Q p- foreach ($list as $document) {
# u1 a; W3 A. |; C - print_r($document); 8 l) X1 V" o, m+ [7 I0 D- y
- }
复制代码
6 f0 K$ X8 e( ]+ u0 S; @0 `& q查询更多条件使用方法,参考第二节mongodb基本命令,查询$ F% ]1 N, K$ J, t4 \& f2 L0 j
4 k& P+ `: q) L' S, m
3:添加. B6 R+ X, _2 [+ v) c7 i& r4 [
# O: p" K; y' f$ n R- <?php3 o7 k+ v1 Z" f1 \
$ B3 c( S' F+ N' J- _- //链接mongodb
* Y0 W5 ~# d# B& z - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ {8 P, ? B/ Z0 {7 d
: r' [- v6 x3 B- W- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 V y. |1 Y9 _7 F) k
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 p! K# w4 X* c+ ?" ^ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);$ }) d g( z! F; r
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
5 D% J% d0 A" b- a7 ?/ `7 y - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 3 o# X5 D2 r$ k6 y; k- |- J" T; X
4:修改
/ _' s& h- E& C& p+ M, h1 F* `$ T
1 K- L$ {9 j% V& ]- <?php
8 |6 A3 ]4 ?) e/ }- p) D
- ~# J0 |9 W9 D3 j" e+ p1 t( m; X, m- //链接mongodb
: a5 w3 Y$ j9 t1 F - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 H# g& T" O7 G: v
- . L6 U/ Q/ C& P: p1 U1 Y& w/ A7 T/ n
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
! G( b2 K- c' r$ R, g% r - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
/ @# z% s( R' b2 _ - $bulk->update(: o& g* q2 U9 ~* {' s* U4 o- z
- ['user_id' => 2],+ V5 M2 f+ P; J# Q- O* k
- ['$set'=>['real_name'=>'中国国']0 Z: B9 [: F K" R* ^
- ]);
3 b" D$ l! g0 f1 _5 G$ m1 [" _/ T - //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 \8 d4 B M( t3 ?$ k
- //1:字段不存在会添加一个字段;
0 d; p' g6 w/ G% {4 l) O% J) w - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
4 ^- ?2 b4 @1 c- I e
% n4 s7 W! [" v" p8 X k$ r
3 T- H6 h9 d/ a/ c- //如果条件不存在不新增加,可以通过设置upsert: Y$ G* n+ V9 b4 ~8 o7 G4 B
- //db.collectionName.update(query, obj, upsert, multi);
3 R% P6 m& K2 T1 G9 m3 E" P1 N( T% Q
& x" {1 u' q9 y5 L- M: g- $bulk->update(! J7 }6 x6 g+ A4 {( Y+ k! u' [) _- I
- ['user_id' => 5],- L8 j! Z9 Q7 Y1 y0 V" w/ I
- [/ M4 y- N4 Z( Q# J2 v
- '$set'=>['fff'=>'中国国']9 j7 @: Q, {; U
- ],; m& w& z3 j$ d7 x7 w4 [9 @( G5 Z* S5 F
- ['multi' => true, 'upsert' => false]
" j6 K( W$ o+ q - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! k) I- P0 M. B$ S( V0 Y4 d; E
- //upsert为 treu:表示不存在就新增1 f6 x! d1 Y+ ^3 K1 E3 B. F
- );
; Y- N8 I& L0 O' M( Q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . P9 c: m2 }/ v6 Q; X4 q0 @
4 Z/ {8 e; B8 S6 R8 m' @6 K8 lordered 设置
. e1 m" r* {, ^9 x5 C* _9 f1 y. J/ q3 U, `4 ^! P
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。# B, z) F. B( t. N# c" C* ]
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行% a' Q4 Z! n- _# l0 S* \/ Z& F
% @# _* d: r2 q- U: Z( `
5:删除, Y. x8 q( t2 }- Z, ?! w$ c
`: b$ \8 V, h) a+ _1 t8 L- <?php
) E; [5 X$ b7 V4 v- R" J5 D
* p2 ?3 q3 P8 G0 B- //链接mongodb
| |- S/ D" t2 P2 v ^ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
; o; \( b. c$ ^7 D1 ~! t - ( D# ]" _: Z4 m8 T. j0 N+ K- a7 q+ F
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 D# c2 b- k) X# A- e. q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 r, Y9 S$ ?. r7 h( r3 v
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段# K5 J5 c1 t) H) X& ?3 L: a( A
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) w6 s6 f$ @ j& Q
- delete还可以通过limit设置不同删除方式
1 N0 k" S+ W5 G6 r - 5 @% [1 g7 G! X' d3 B
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
- X/ e& x1 ?4 L' f9 P0 n - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ u8 A) _# _) H' s0 n8 u0 i6 W7 ~9 W" R' ~( o" P* E& B! g2 K: a- b
6:捕获异常
" B1 D$ B- o2 }" u% e
+ E) G: K/ V) x8 F8 x; c- MongoDB\Driver\Exception\AuthenticationException
4 o6 b/ V8 r4 i8 @2 J - MongoDB\Driver\Exception\BulkWriteException
: h y) ? |5 i" T% F1 K - MongoDB\Driver\Exception\ConnectionException# `% q7 d2 K7 i) k3 P
- MongoDB\Driver\Exception\ConnectionTimeoutException
! h, d5 }: W0 }2 c* m8 E# ?* A - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) ]) z) N9 K5 J+ Y( z7 p* }! p
- MongoDB\Driver\Exception\ExecutionTimeoutException
: `) D2 K( g( m6 J - MongoDB\Driver\Exception\InvalidArgumentException
. q. G% `1 B7 G" P9 q - MongoDB\Driver\Exception\LogicException
: c* v6 ~2 }: T- A, [ - MongoDB\Driver\Exception\RuntimeException" M; X, f1 v4 z: |/ U
- MongoDB\Driver\Exception\SSLConnectionException
+ X8 |; F0 }! {2 g% k0 W. i - MongoDB\Driver\Exception\UnexpectedValueException/ E* E6 n# o6 `1 L' T# }
- MongoDB\Driver\Exception\WriteException
复制代码
; u; \: C/ E1 F/ _$ X+ z- e' B2 h( Z/ @: T1 K
: |5 I4 Y( H& ^7 z6 j- R
点击查看全部! }- p; W0 m$ y3 |0 U* G
$ w8 |$ I- V( ?9 s# e
/ T3 n5 J1 V' Y" f: e |
|