管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( J3 Y2 m1 f" k) M8 O: x6 d
3 X t1 R5 ?& z/ F, F下面用PHP7新的API总结一下:' `* i4 p9 o- w& j% |
' }- M4 G. u- b6 i" r; `# c6 U
一:CURD2 k% o0 s2 r. F8 U; ?
' c6 U) `/ e S S1:链接
4 r# T) F% y# p) V) o n# j' s1 ]. b3 g- X5 v* A
- <?php% T& R L1 `- l; Q6 o
- //链接mongodb
8 d+ w+ C, ?+ C# ? - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
) B4 |7 j1 t, H - root 用户;123:密码;如果没有密码则不写
复制代码
& a. g! [& Y+ j5 f. _ }
5 Q. [ a8 Y9 d2:查询& O t9 ^$ f+ A c
& Z q. O% r0 e) z$ O5 ~
- <?php5 G% S! i+ \2 G
- : D% D% [1 `8 i0 [) ?7 c2 a$ D3 }1 ]
- //链接mongodb% x7 j0 p; A& I
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- m$ l. F( x! i! j6 I( { - * ~* D; b& m$ U: ?
- //查询
) x/ z0 K0 D8 I - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ R# u% E# B/ _2 N9 N, u7 O
- $options = [ O0 u1 s4 t S0 ?8 M
- 'projection' => ['_id' => 0], //不输出_id字段
5 ^+ L6 j5 J2 v, @6 V* m - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
2 ? m! A% b. v) p, D - ];
" W& U. j0 T4 U5 G5 p9 v; S! d2 c - $query = new MongoDB\Driver\Query($filter, $options); //查询请求+ z; U0 T; J7 F. m
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
; i5 K9 L- O% m, g - 2 L' ], `8 P" q4 D
+ _# J: C& T- h2 `2 V- foreach ($list as $document) {- C2 i9 h1 d# C: o, [) I8 B1 x
- print_r($document);
' |7 b$ c3 ~: r) ^1 Z& k: K - }
复制代码 : C3 a6 u X3 N: l; C1 ^. }5 u
查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 ?6 l, H3 t. N+ b+ N
v& e2 J1 d0 c3:添加& ^- L8 x4 v0 L3 n
7 z. @1 F: B: f: h; a1 C, @: ^- <?php' X. g( X( s, J( C$ ?
: Q: U% u" K& ^* V: ?+ D6 k3 w7 Q- //链接mongodb" ~/ t6 x' I. y5 R; l5 ]) i8 @% B
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 |6 T1 v: u! I9 J! P) K
; W) w. u0 g; k9 u- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; Y% @. P+ g' J6 L# l - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( N# |3 A# _/ t
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);/ b/ C$ `7 ?6 Y+ o$ {3 `
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
# `+ O) c( ]1 l- l& I3 @6 f - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- H2 k0 d% E$ x4:修改2 |! C6 e0 J5 a8 m, f
) C2 F7 d+ _: h* i, y y1 _- <?php
# L& m$ n, V7 H6 U/ w
! N! M) w5 y* ?) V: U) |1 z, O- //链接mongodb
8 _, C; [* A% P3 a" O - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
+ R% U) w# `7 L2 `. [ - 1 _2 @ \% |! q0 o; Z: V7 s- e
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
9 B; b" O- b7 w! M - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% f' S3 _9 z3 v: F
- $bulk->update(3 ~3 C; a- G! x( f2 I* s
- ['user_id' => 2],
' t0 v7 n* F/ s$ W/ g - ['$set'=>['real_name'=>'中国国']
: T2 F- p$ c- T$ Q) I# y - ]); 6 { Z" G! m/ ]% a
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
; E7 f }2 v2 ]$ |! T - //1:字段不存在会添加一个字段;
7 U6 ]" M+ j: d) h - //2:mongodb默认如果条件不成立,新增加数据,相当于insert. u- x& X1 R8 w0 J
- 8 c8 O2 L$ l/ o; n- a
$ K+ }) v* B* v- {9 s1 U0 N% e7 o4 X @- //如果条件不存在不新增加,可以通过设置upsert8 S4 s3 b' n, C) f* N! r, a2 X
- //db.collectionName.update(query, obj, upsert, multi);) c4 ?7 k ]3 W0 C5 Z
- & a$ g: U% K. s K3 i. `
- $bulk->update(& P9 |( x. V R n: H
- ['user_id' => 5],
/ f* t4 L8 b# p b+ p! I - [ \; m7 |' [; u2 }6 a
- '$set'=>['fff'=>'中国国']/ `- t- a4 _/ t/ D! b8 w' N. Z
- ],/ c/ b# y# u4 t) i
- ['multi' => true, 'upsert' => false] 0 l7 ?( L8 D9 R% F
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条4 B4 `2 M: L$ Z" q' m+ Y0 i5 q) {/ B
- //upsert为 treu:表示不存在就新增" W# X9 b: c) D. z) ~2 [
- );+ |* L- S' o: @/ H7 k. s
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 e8 ?) p1 m% Y* f
# e$ }( ]5 c4 O4 [" F8 `ordered 设置/ _( B* w0 _; }/ x. a0 B
6 X4 d3 }, y6 F1 K) T8 t1 V8 ?$ n3 A1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
8 z6 g" p1 ~3 X6 ~) t4 B2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
9 I# k6 z8 j$ b) U) ~/ R
9 w" F$ E/ W" M5:删除
/ _1 U0 Q4 l5 v" a; u6 p& P% M) `6 L/ Z8 s; T! B: W3 k/ U
- <?php1 Z! e& p8 |) l( @& E8 c0 C& {
- 4 d" p w2 J: f: W# c" J" p0 c
- //链接mongodb# |8 R! p' g! K
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" t0 w+ A3 x, w/ j' T! ~" j0 s! c
- p3 }1 N: g9 m+ B! N; ]" {; W/ i6 v6 U
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
3 r! v9 G5 e- Y/ B - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" R- v+ j* J0 E; H$ L8 N - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段" e2 {/ U! G' ^/ }
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合7 w, ?6 ~" L. P* Y$ ~) A% S
- delete还可以通过limit设置不同删除方式
4 [* ~+ m: Z2 h6 @& K' E# l0 } - . |6 m' ?6 v- [+ x! ?7 J
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据4 I R0 }$ R' o) Y# b! J3 _
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 # c* \: R' U% ?# O( `
5 N( n; B, k2 k
6:捕获异常& }3 Y( L2 Q. ?) _4 x
; K6 E+ i6 k; T1 X- MongoDB\Driver\Exception\AuthenticationException
, }* h' `: k0 n6 N) c% ] } - MongoDB\Driver\Exception\BulkWriteException
/ y; ~# V' i, P7 w3 P+ H' x! a& m& @ - MongoDB\Driver\Exception\ConnectionException
; K' [8 o; Y$ L5 Z* V) X5 t - MongoDB\Driver\Exception\ConnectionTimeoutException
( o6 k3 ^1 A. A8 j6 J7 V S - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
6 K0 g$ O. v4 c, V* c4 ] - MongoDB\Driver\Exception\ExecutionTimeoutException+ Z! t4 l+ T( q1 c' F
- MongoDB\Driver\Exception\InvalidArgumentException5 \0 h6 P7 U) h s1 Q) v( |7 x9 C
- MongoDB\Driver\Exception\LogicException. o! p4 o# h0 Q
- MongoDB\Driver\Exception\RuntimeException2 z7 T5 Y9 {' k
- MongoDB\Driver\Exception\SSLConnectionException1 T7 t2 c/ i7 V( y$ ]
- MongoDB\Driver\Exception\UnexpectedValueException
, i0 f7 [3 N5 f - MongoDB\Driver\Exception\WriteException
复制代码
9 T& {, D9 m8 B0 f" \! c5 j
* D/ R7 O* t* E( K! Y# o- t! R" D6 D
点击查看全部% V D' e; o, c$ o$ {0 ?/ o& l
6 `3 \) e- I( ^6 c
: [+ E- }9 p6 l8 N; N% V4 g
|
|