管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
+ Y; W0 ~+ v( {0 W* C
) d; ], g+ g7 f; d7 b7 y下面用PHP7新的API总结一下:
$ J4 J* E9 o4 Y) J* n; J" y* V" s+ ^
一:CURD2 @5 K. _4 q" [. z& O
" S9 [) L* z2 X0 z! M0 ^3 S, \+ r1:链接! P' J' _1 g( [0 b; W( x* _+ b, p% W
8 ^5 J5 s& N/ N0 J$ ~9 c( i9 B
- <?php
% N, P# ]3 B! K+ F; H. ^: X7 t - //链接mongodb: T$ B; k! Y5 C! U" [
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
3 {$ P) j+ E$ P, _) H - root 用户;123:密码;如果没有密码则不写
复制代码
0 Q) M5 q% I# }6 s
u7 Y) S7 C( o- C" R2:查询
& I- o' g) X7 L" @% B1 ^
9 G4 N" p1 [. }* N4 }. f- <?php; t+ z! z( }' H7 Z9 T* ~, m4 H
- 6 M' J1 S/ K8 J, \# ]# C: j
- //链接mongodb
/ R/ E0 b" `6 q4 I* b - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% h. V& q e E+ e) J8 ~' V
- % E3 q, f" d3 o. k
- //查询; ?. d, h3 }8 a
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
$ I! P/ T$ P F" u - $options = [; ^ W4 J! [3 \# O1 ]5 Z/ o" ^8 r* j/ W
- 'projection' => ['_id' => 0], //不输出_id字段
. e- I2 s( r2 M& Y1 M' `: D( o1 v - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序+ |7 ~. E6 b+ ]) i4 w2 Y% u
- ];# ^$ B1 L8 T) M. V- {+ K j
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求- [9 J8 O! @8 a' l) r" e
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
; u; K- Z4 s# m* M- I
1 b# f- H3 F8 H0 ^4 g5 L& N
8 y" N1 U6 r$ N6 t% V9 I5 j, U- foreach ($list as $document) {
/ K( [9 c6 }* P! J) s5 H- ^' P3 f" p - print_r($document);
~: {: F1 ?+ q W - }
复制代码 & Z* z9 e3 A3 \$ f
查询更多条件使用方法,参考第二节mongodb基本命令,查询
( e& N3 j8 X1 B" i5 H, T, l1 f
3 M! z+ O, t5 E7 g3:添加
! z2 b: l% ^* q+ C/ G* \( i
- M5 [9 v8 y+ ?. L. ?- <?php+ {" O$ d) t* L% n
- - U& o4 b1 n3 a4 T! m5 Q
- //链接mongodb/ j, L% @, H0 y$ u# O
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 F! z# o& y# x# n! X
- # G" F8 D2 E Y( ]1 A
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 \1 \1 G9 V9 I3 ~* U/ k* \- |
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ M+ |0 g+ u, j+ p+ b
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
% J) f: u$ e! I - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);( l$ M3 g+ @9 B- \
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 " Q6 D& Q3 [# @$ K6 o* x) x5 [" M
4:修改" `! x3 `$ M" J% i$ K. A; G
/ f2 S* ?7 q6 Z# R" h- <?php; k1 K3 Q: P# \ |
- 5 P; S; h- z- F; V% S8 e
- //链接mongodb- _% B9 C, u5 ?7 {/ G
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 L) ?! w2 j% ^* o - ) j! e8 R; y) A. R7 r9 a1 h9 V0 N+ i
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 _$ K6 A2 @+ a* q1 J2 u& h/ Q
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
: y- l4 `# J7 R( d - $bulk->update(6 G# H( X) q- e/ E6 o5 ?
- ['user_id' => 2],
% A8 M* U, O2 a6 ^* A- X - ['$set'=>['real_name'=>'中国国']! U6 `; L0 c* l
- ]);
% a2 u% V% ^7 T+ S: k4 v6 ^ - //$set相当于mysql的 set,这里和mysql有两个不同的地方,% o6 u! J: O' ]+ G
- //1:字段不存在会添加一个字段;$ C( y/ W9 G# m8 O" d T3 q
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert; u7 B6 @6 Y$ ^3 P( ^ f/ B
* ?) `" s6 F: H% k. i- $ x( i9 C) T- p9 M f0 d
- //如果条件不存在不新增加,可以通过设置upsert
5 } v/ H. P2 h; D" H - //db.collectionName.update(query, obj, upsert, multi);
2 t$ l0 \. d8 e s
5 B& ^% ^& h; x- $bulk->update(
5 E$ x1 y6 C( R8 \$ p+ R, _ - ['user_id' => 5],) o6 ]' f) K6 L" A4 o7 U4 \
- [
: [- B/ B. I1 u" r6 { - '$set'=>['fff'=>'中国国']1 X0 _# }2 {+ ^9 V
- ],
9 A u q& h u - ['multi' => true, 'upsert' => false] ! _, x5 w2 g& |, b5 I" u: X3 l
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 O1 q; M( R q1 N) M3 p# e
- //upsert为 treu:表示不存在就新增6 j% Y/ w: C) U' m
- );
6 h7 R( W# l$ M0 l - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 , X/ u J m' N4 `6 y
+ E$ `8 _+ W$ N- Zordered 设置) \1 d" s" T! h. G7 b2 O- q8 n, Z
* Z& @$ C D4 t" m1 T/ M+ j1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。0 A2 |; q( i8 J1 B' v6 r
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行; C( |) a" U: z7 ]- p9 A% q
% X5 Q' M* ]$ I$ a3 ^) s# h
5:删除
! u" j9 f; C) d7 f' L& y' @ k. P
/ f1 j. c+ C9 N, i) f- <?php
4 c* f; k. I- K* i W) E
$ C( J: J4 a$ p4 e- W# k) W- //链接mongodb, T/ ^% G1 X( K, } j' L
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); { E9 J2 w: ~
6 `- C1 y- x$ Z; {% g- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
1 I" b8 a) T/ O" x; K" G: p; f6 ` - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# C9 Q: j5 ?8 }5 b) U - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
" e) V& R$ w" D) S' o: l( O( { - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* H. e/ b3 Z5 q8 `! Y# l
- delete还可以通过limit设置不同删除方式
6 R8 b( p2 l6 M+ \) Q - " x9 E, p' g' N7 e, T( G
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
3 P( p1 p6 s0 P4 y - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* y A2 R( P# l! K" b% n4 W- k/ y% P! T- c: p# A
6:捕获异常. w r& H# a) v! ?1 P3 [- }2 A0 E
2 y( L1 |+ e+ H/ A$ e- MongoDB\Driver\Exception\AuthenticationException) b; o) [7 S O* ~& @3 `
- MongoDB\Driver\Exception\BulkWriteException
1 X/ x" T- V1 u k G& f - MongoDB\Driver\Exception\ConnectionException
. S0 i R# ?) S4 M" W" p( G - MongoDB\Driver\Exception\ConnectionTimeoutException
3 w0 s+ Y8 l+ K0 F( O% H- e# H, q - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
) @1 l! |2 ]. _1 M7 x - MongoDB\Driver\Exception\ExecutionTimeoutException
' @+ R+ t9 j$ K9 |$ t - MongoDB\Driver\Exception\InvalidArgumentException2 z- w, K( k* ^4 G
- MongoDB\Driver\Exception\LogicException
1 E$ t# P7 S) g$ e! K! z - MongoDB\Driver\Exception\RuntimeException
7 a9 A6 h+ V0 J+ } l - MongoDB\Driver\Exception\SSLConnectionException9 Q# _; L5 \' k- S" ?/ q" h. ?
- MongoDB\Driver\Exception\UnexpectedValueException- p+ O+ `/ O3 B. x# A( C5 Z
- MongoDB\Driver\Exception\WriteException
复制代码
5 ?5 Z, ]) h2 i( ^& R7 Q& f% A; i4 g) Q
, g6 L$ ^3 B% U" h点击查看全部1 F: A1 g+ C) I" L# c& ]
8 v& b) C, C2 p
$ L# i9 G+ ^2 k7 G |
|