管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( c* l& m- O" f/ v/ r4 r% h
4 E3 W4 }3 g& P) n3 R7 w/ v! @
下面用PHP7新的API总结一下:" Q5 v7 E* }$ j. G2 g5 [$ b' ^- {/ s
1 F+ Y+ X4 E# |, P" g5 v; M% c( k一:CURD
( L* C' m0 Z: o/ C, O
* |- G9 L5 N' l4 j+ P# F1:链接0 I# }$ {7 U0 f( @' T& v3 l0 [% ]
$ V9 H0 `' i$ w; i" _$ q) |
- <?php% r9 e9 |' v9 N) f
- //链接mongodb% W( Z- \; v9 o, ^- S
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 p7 \6 r0 s! A! X$ J0 t4 t
- root 用户;123:密码;如果没有密码则不写
复制代码 1 y6 U* H" |/ H, R4 l B
# I8 I# N. \; H4 j. \! S( U7 s8 G2:查询* V' f& j4 a* n
& c( V4 Y; n+ N- }7 E
- <?php- {6 k. X% Q4 ]- M1 m
- % w& d7 J. j8 v0 y- t7 C" J
- //链接mongodb
/ c5 D# t: o& p8 B: @ s9 w9 Y - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');( N1 \3 X2 O! V7 r
6 m6 f1 F( C' b4 C( A- //查询
: ]8 G" N2 I" I T$ f) h# F: b1 X - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ m$ O3 _! R8 v' o& }
- $options = [$ U8 [ b' f4 ^- F. q7 e; t8 \9 B
- 'projection' => ['_id' => 0], //不输出_id字段
0 b" n8 \- f7 r: p - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
/ M0 O& w0 h. s" _# f+ U& Z - ];
) _" ]# y$ @/ m% L S - $query = new MongoDB\Driver\Query($filter, $options); //查询请求% B7 ~9 g- j1 e" F. }
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合8 _, t/ V) g+ T6 X
- # a: E: W1 G) c$ W! F) O( {
. H0 O. o4 Z, h! x% @2 T* {; ?- foreach ($list as $document) {
* o3 `5 `4 ]) V( u0 c - print_r($document); ' L r; U$ E) L% L
- }
复制代码 6 S1 H: D! \+ k; |! s; `; a5 w
查询更多条件使用方法,参考第二节mongodb基本命令,查询+ ]' S. J3 Y# D7 W2 V
7 G2 r6 o# f5 J3:添加) R# l& P& r, S" U7 L
- O, }, P: z6 `3 [3 d7 o2 N! x+ J- <?php* N" ?0 t! f9 Z; `
) z, w+ G3 F) a- //链接mongodb
8 |" P/ Y& |+ ] - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) Y" [3 ^ V0 c8 w - 7 Y# S6 @4 T6 R& n3 l
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 f( ?" P7 a& Z, Z+ T
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ u ^8 {# _. U9 [% \' u
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
0 ^( k* @ Q& [$ H5 T' S( S1 e - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);' }+ z' A1 s! y6 j8 w4 D+ c8 X
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ S4 `, g9 s1 t) K, ^' _* W4:修改- `4 l4 n( w3 @) U3 \; U
2 A8 d- F# e: [
- <?php
9 }9 m* Z, M, N* F% x% R- e+ E - , ~% p A& \' ]/ @
- //链接mongodb
( C/ C; M6 i2 F& y: X9 b* ~! L; {8 I - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 |0 ^* T4 @# ?0 ~0 ^
: _$ T1 r" F" W' R7 T) r% m- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ y4 l! f) k' i
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" N# z3 U8 C4 ~6 W/ `5 e7 t/ p - $bulk->update(
7 _7 u8 ~6 W& r: u4 j1 h7 { - ['user_id' => 2],' r0 x+ a; R5 k0 X$ E' {/ g
- ['$set'=>['real_name'=>'中国国']( d7 h: |# ?" R$ T4 o, j2 _+ F
- ]);
/ ^+ @4 S2 t; y; q( @ G$ j s" |. q - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
4 M) e8 i, M a: A$ o - //1:字段不存在会添加一个字段;: y! a6 v( i, {; f% |
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
# J5 Y- L. M* ]% p/ K' z% ^ - ! G* J: u+ J& C1 I
$ U6 |8 w- C% t; X1 Z# s- //如果条件不存在不新增加,可以通过设置upsert
/ s( L) X- t6 g' a' c - //db.collectionName.update(query, obj, upsert, multi);
4 |' B1 ?. {" S P# p - " L( T" K+ w' |9 y
- $bulk->update(3 U$ z7 f6 P/ }
- ['user_id' => 5],
; W6 t: x: a" u - [0 _+ {1 `* G* Y8 F. H( W0 s
- '$set'=>['fff'=>'中国国']
3 t# L! i/ c% G+ _+ r9 s( D - ],7 f: X0 y. C4 I" A+ J- R6 G! {
- ['multi' => true, 'upsert' => false]
/ k$ H' ?6 T1 { - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
) Q+ l \# \( C2 Z" J4 A - //upsert为 treu:表示不存在就新增
% j0 m' H _, @( I6 } - );
" n# B7 d$ j8 ^ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ C8 K4 y$ ^+ Z" v" {4 R+ x( f- g3 p0 z+ b; j5 A7 i: @! \' m2 y
ordered 设置) y, N7 c' r. Z3 g0 U( y/ c
5 l- v: r M5 L3 M1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 |$ a5 k, Q* U8 e2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行* F$ @/ Y; b+ y3 d6 w0 [" X
) F! D e) \& `& x6 U+ [- W- U5:删除2 T4 e/ R: N. F2 T& s
+ W% Z' [ @0 k5 @" P* c \" ]- <?php
1 X9 K" z, R; ]/ @9 B2 j
" \) Z+ S9 F6 ]8 [- d- //链接mongodb5 s* A- B' H+ g) A9 c- q! N) o5 l
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 b; ^( h8 o2 W' F
2 y" [6 `3 r, |/ D9 W4 |; `( w; M E- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% e# @5 ~+ N5 A; G/ _' V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 n: i9 g7 X- ?3 [) S - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
^9 k9 ^2 n. H8 t - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合1 d0 a, H& D' w# _
- delete还可以通过limit设置不同删除方式. C {# h/ u- }! p
- / p5 ]5 _9 S$ @' P0 R" {$ i
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据: w$ p2 h/ ^- Q% l
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
. D$ J2 m& X% ]* k* X2 X- h) g: x L2 i
6:捕获异常8 v+ y' R* d$ \# k# y S7 r
; l1 a7 \3 _4 x2 [! n& d
- MongoDB\Driver\Exception\AuthenticationException9 @5 `) s. |, l2 g i, c! l
- MongoDB\Driver\Exception\BulkWriteException
# z& o: U, m) [; Y: a. E - MongoDB\Driver\Exception\ConnectionException4 r1 G9 N0 Q6 t) N* y5 ~: _
- MongoDB\Driver\Exception\ConnectionTimeoutException
C9 H9 |& v6 A$ P/ d% l. s! W - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, C. K+ o5 g; j& f
- MongoDB\Driver\Exception\ExecutionTimeoutException6 ?/ c- t' r# B
- MongoDB\Driver\Exception\InvalidArgumentException+ k: g; e4 G: q
- MongoDB\Driver\Exception\LogicException# {0 A1 g+ O$ e4 r4 U( h
- MongoDB\Driver\Exception\RuntimeException/ l7 [( R' H5 i2 v$ ?, @3 w5 P
- MongoDB\Driver\Exception\SSLConnectionException% S8 V+ |8 D$ w; k( k
- MongoDB\Driver\Exception\UnexpectedValueException
) Y1 ~ M+ F0 z. _4 L( L) | - MongoDB\Driver\Exception\WriteException
复制代码 ; U3 }- c, K% v. v* B+ p
# [6 z, h2 _! m1 f* \, U( j U T
) c$ O( X' R& o( z" `5 o点击查看全部
; e5 ^8 m. U1 a. S: o0 O7 w) v( v8 J+ E! R+ }: n- B
$ `: N3 N# k+ C' w6 H" c- y |
|