管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
" |0 g9 M, k2 W+ N9 z- {: ^5 @5 m4 ]3 z! o# B0 M
下面用PHP7新的API总结一下:
4 Z4 F! s7 t2 {3 U( h& z# h" c; q) p% D8 a$ b
一:CURD. ?/ |. F. G& ?1 d! @5 p
% h6 s: ]: {2 z( G% q7 W1:链接
0 H4 y s7 v- G9 k
( ]4 J9 K9 Z( N+ S4 f; ]' A- <?php9 B% t/ r+ k& @: d/ A: {- L! U
- //链接mongodb
$ `0 B/ l v& w% O, {4 e - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 f4 `$ m7 T+ \4 X
- root 用户;123:密码;如果没有密码则不写
复制代码
\0 v0 `; X0 z( X9 k2 s
( F1 ~8 e! N8 b: m/ r2:查询! O( h& f0 L& i- t g" ?
, C. U) D% a, @3 O) P- <?php* f" H7 J( l8 @' W7 G
- 3 X. x. [- C1 G6 c' P) p
- //链接mongodb/ {5 f# J6 a( `) I9 O" E; [
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; q1 t, e/ V7 p1 f, d
/ a/ e4 w% `! r- //查询
) [! E/ M% i" o$ ~3 J2 E - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
0 R2 Q F( |! z6 P0 b* C* F - $options = [1 I* w0 p$ k5 t8 T& d u
- 'projection' => ['_id' => 0], //不输出_id字段
7 M' G) Z$ n9 N* {. [* ? - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
; I7 F/ r0 R3 }* J% A8 R4 o ~* S - ];
2 k. Y m% h4 a: f) X6 m - $query = new MongoDB\Driver\Query($filter, $options); //查询请求4 j) S2 y7 O6 U$ `
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& U& X5 X: y/ }) m: x* c
- 6 a- Z& q, j8 O! z
9 j. V: l( O" K5 q; ^' U; I- foreach ($list as $document) {
! D2 e; ?; X4 r - print_r($document);
, P. R; r8 R% Y3 b* V6 O6 P - }
复制代码 $ n4 @" r4 w, B
查询更多条件使用方法,参考第二节mongodb基本命令,查询5 i* [9 h' @/ z: A1 `
+ Z7 y% d* j0 O1 b! b0 g! @" \3 s
3:添加5 X# W# @% ?; l9 Z
C' C' x- d: b+ W& d, J- <?php
R. p9 {! \2 y0 h5 Y1 H4 ^ - ) z7 ? R6 ~3 A7 U
- //链接mongodb
1 i+ L: j8 x0 M" r - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
( R f: n/ ~. u2 u0 U- l - , |& F3 T b2 [7 ^% Z7 G: j3 v) S6 a6 E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, \" |1 |7 Y( ~
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! G/ @. v/ s* s' l+ D - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
, G6 e' ^1 k/ n! |* b: Z) C - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
7 R c* N: M* L0 y6 E2 T - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" k4 E3 g$ t1 n4:修改. i' `$ S( D3 W
0 m0 a: O& A& |6 |- <?php8 q' I& U% I5 L4 ~1 A" d, ]( G8 C
( F0 g7 ^3 P! z6 Y+ X: S! r/ {- //链接mongodb& H e' [ j& V- Y1 L I5 T
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 m* B9 c0 S# l( e$ Z6 L
- 4 p1 b7 q/ o/ h1 E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
" g; B' g6 d7 k: J9 r$ ?7 f [4 L - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 G3 ?+ X: d% Z" j, f2 a - $bulk->update(% I9 F* \$ X9 K: }
- ['user_id' => 2],
$ ^. _$ C7 U; m5 K, J% w* S# Q - ['$set'=>['real_name'=>'中国国']
! P3 |1 v6 c" m5 L/ } - ]); ' K" c) [* u( A1 B4 @
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,3 G* k, J2 V& G; c# n9 _
- //1:字段不存在会添加一个字段;
8 a4 z8 m6 X2 I& j9 z6 l, K' z- k - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
: R) B, O" J( |
2 ?* f; r# B9 T9 i- # I1 x4 X- t9 k4 m5 L9 k8 V
- //如果条件不存在不新增加,可以通过设置upsert. J1 H- n; L4 s1 H: N8 f
- //db.collectionName.update(query, obj, upsert, multi);
8 ]0 g* f6 X$ O
" l. N+ Z- D! L/ `# k- $bulk->update(6 W: ?$ _# l4 G* y. J) V
- ['user_id' => 5],+ ]; T5 R' C3 c
- [
+ n! u' L5 a4 U0 l& o1 a - '$set'=>['fff'=>'中国国']
! P, H/ ]) `* K - ],, q+ J# K+ g# ~ D) I
- ['multi' => true, 'upsert' => false] ' l0 d0 U1 }( X, s! l
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条: @5 [" P2 M& ^' W! b& b/ k
- //upsert为 treu:表示不存在就新增
6 T; Y; W+ J- X% c2 S3 ~ - );( s7 \& R( x1 ], T8 H* p
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 9 h z+ Z5 k* l1 i- a9 B/ j
8 H a; G0 b# `0 F0 {ordered 设置
9 o; I/ M$ {4 D+ p4 W2 M2 q& I) K4 y) ~/ d; ^6 h' Q
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 [$ E( t w S# `$ R2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行9 [: ?; I& t' ~$ Q: u2 T! }5 ~: P
' [$ p, v2 X2 t" N U
5:删除# z+ S' D+ \7 g# V
| [( ?) g* N0 P5 U- <?php
5 E- m8 i: M& Y3 f9 x* J
3 T# |- X7 w0 A7 W+ y( g) V* }- //链接mongodb* g: G4 _* v% r3 r; q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
~0 t5 J4 s% k# Y4 Y+ \
3 G* m1 F" j8 i6 Y4 l$ V- m M$ b- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) o* _+ n+ G2 i3 ~2 |! M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 E" U$ c; o& b3 K
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
/ V, s+ P- U. e3 }7 a - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合7 E1 m5 G9 M% V! L
- delete还可以通过limit设置不同删除方式% c" D5 f# R( e" z6 T
- & l9 T B O: q1 H# P. J6 x
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
& S) Q4 k; w) P - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " F; `! B9 w- G6 `9 o
7 W, a E: q) ~
6:捕获异常/ E- r" p. h/ U1 s- l
$ D2 J; X/ ` M7 Y6 o7 V
- MongoDB\Driver\Exception\AuthenticationException
5 L ], C& M8 o+ P5 S0 t. |4 ^ - MongoDB\Driver\Exception\BulkWriteException
% R. d" X0 E4 A0 I( V4 Z4 C - MongoDB\Driver\Exception\ConnectionException t1 g$ I3 P% I! f. |: i
- MongoDB\Driver\Exception\ConnectionTimeoutException
1 d) C( L) l$ A8 W - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口; H2 @2 t9 k! e& f
- MongoDB\Driver\Exception\ExecutionTimeoutException
/ k2 S! W9 Q( ?% s4 q1 ` - MongoDB\Driver\Exception\InvalidArgumentException
; m4 v& o' m8 y* J* U- ?7 m5 ^ - MongoDB\Driver\Exception\LogicException- x$ }9 I3 s' m( y5 d8 p, J0 _
- MongoDB\Driver\Exception\RuntimeException
1 U) u% m6 y0 d! m2 c - MongoDB\Driver\Exception\SSLConnectionException7 p6 U8 @( t" m/ U7 G# x
- MongoDB\Driver\Exception\UnexpectedValueException
2 t! z% }7 d: I: X5 Q% T @ - MongoDB\Driver\Exception\WriteException
复制代码 ( [3 O, S) D/ C; [) ^# W' ^
: m( g# A, e0 u# D _8 g
4 c1 Q, o2 P1 N5 u) c+ q6 a$ ^6 }, g点击查看全部
2 [% B/ r3 j- e- g& D K
* r, M: B7 b* u$ I7 P; w9 d! ~0 H6 Z6 x( \! _5 h. m
|
|