您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14346|回复: 0
打印 上一主题 下一主题

[php学习资料] php7的mongodb基本用法

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-24 20:58:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: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
  1. <?php% T& R  L1 `- l; Q6 o
  2. //链接mongodb
    8 d+ w+ C, ?+ C# ?
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ) B4 |7 j1 t, H
  4. root 用户;123:密码;如果没有密码则不写
复制代码

& a. g! [& Y+ j5 f. _  }
5 Q. [  a8 Y9 d2:查询& O  t9 ^$ f+ A  c
& Z  q. O% r0 e) z$ O5 ~
  1. <?php5 G% S! i+ \2 G
  2. : D% D% [1 `8 i0 [) ?7 c2 a$ D3 }1 ]
  3. //链接mongodb% x7 j0 p; A& I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - m$ l. F( x! i! j6 I( {
  5. * ~* D; b& m$ U: ?
  6. //查询
    ) x/ z0 K0 D8 I
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ R# u% E# B/ _2 N9 N, u7 O
  8. $options = [  O0 u1 s4 t  S0 ?8 M
  9.    'projection' => ['_id' => 0], //不输出_id字段
    5 ^+ L6 j5 J2 v, @6 V* m
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    2 ?  m! A% b. v) p, D
  11. ];
    " W& U. j0 T4 U5 G5 p9 v; S! d2 c
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求+ z; U0 T; J7 F. m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ; i5 K9 L- O% m, g
  14. 2 L' ], `8 P" q4 D

  15. + _# J: C& T- h2 `2 V
  16. foreach ($list as $document) {- C2 i9 h1 d# C: o, [) I8 B1 x
  17.     print_r($document);
    ' |7 b$ c3 ~: r) ^1 Z& k: K
  18. }
复制代码
: 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, @: ^
  1. <?php' X. g( X( s, J( C$ ?

  2. : Q: U% u" K& ^* V: ?+ D6 k3 w7 Q
  3. //链接mongodb" ~/ t6 x' I. y5 R; l5 ]) i8 @% B
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 |6 T1 v: u! I9 J! P) K

  5. ; W) w. u0 g; k9 u
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; Y% @. P+ g' J6 L# l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( N# |3 A# _/ t
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);/ b/ C$ `7 ?6 Y+ o$ {3 `
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    # `+ O) c( ]1 l- l& I3 @6 f
  10. $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 _
  1. <?php
    # L& m$ n, V7 H6 U/ w

  2. ! N! M) w5 y* ?) V: U) |1 z, O
  3. //链接mongodb
    8 _, C; [* A% P3 a" O
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + R% U) w# `7 L2 `. [
  5. 1 _2 @  \% |! q0 o; Z: V7 s- e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 B; b" O- b7 w! M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% f' S3 _9 z3 v: F
  8. $bulk->update(3 ~3 C; a- G! x( f2 I* s
  9.         ['user_id' => 2],
    ' t0 v7 n* F/ s$ W/ g
  10.         ['$set'=>['real_name'=>'中国国']
    : T2 F- p$ c- T$ Q) I# y
  11. ]); 6 {  Z" G! m/ ]% a
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ; E7 f  }2 v2 ]$ |! T
  13. //1:字段不存在会添加一个字段;
    7 U6 ]" M+ j: d) h
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert. u- x& X1 R8 w0 J
  15. 8 c8 O2 L$ l/ o; n- a

  16. $ K+ }) v* B* v- {9 s1 U0 N% e7 o4 X  @
  17. //如果条件不存在不新增加,可以通过设置upsert8 S4 s3 b' n, C) f* N! r, a2 X
  18. //db.collectionName.update(query, obj, upsert, multi);) c4 ?7 k  ]3 W0 C5 Z
  19. & a$ g: U% K. s  K3 i. `
  20. $bulk->update(& P9 |( x. V  R  n: H
  21.         ['user_id' => 5],
    / f* t4 L8 b# p  b+ p! I
  22.         [  \; m7 |' [; u2 }6 a
  23.                 '$set'=>['fff'=>'中国国']/ `- t- a4 _/ t/ D! b8 w' N. Z
  24.         ],/ c/ b# y# u4 t) i
  25.         ['multi' => true, 'upsert' => false] 0 l7 ?( L8 D9 R% F
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条4 B4 `2 M: L$ Z" q' m+ Y0 i5 q) {/ B
  27.         //upsert为 treu:表示不存在就新增" W# X9 b: c) D. z) ~2 [
  28. );+ |* L- S' o: @/ H7 k. s
  29. $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
  1. <?php1 Z! e& p8 |) l( @& E8 c0 C& {
  2. 4 d" p  w2 J: f: W# c" J" p0 c
  3. //链接mongodb# |8 R! p' g! K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" t0 w+ A3 x, w/ j' T! ~" j0 s! c
  5.   p3 }1 N: g9 m+ B! N; ]" {; W/ i6 v6 U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 r! v9 G5 e- Y/ B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " R- v+ j* J0 E; H$ L8 N
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段" e2 {/ U! G' ^/ }
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合7 w, ?6 ~" L. P* Y$ ~) A% S
  10. delete还可以通过limit设置不同删除方式
    4 [* ~+ m: Z2 h6 @& K' E# l0 }
  11. . |6 m' ?6 v- [+ x! ?7 J
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据4 I  R0 }$ R' o) Y# b! J3 _
  13. $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
  1. MongoDB\Driver\Exception\AuthenticationException
    , }* h' `: k0 n6 N) c% ]  }
  2. MongoDB\Driver\Exception\BulkWriteException
    / y; ~# V' i, P7 w3 P+ H' x! a& m& @
  3. MongoDB\Driver\Exception\ConnectionException
    ; K' [8 o; Y$ L5 Z* V) X5 t
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ( o6 k3 ^1 A. A8 j6 J7 V  S
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    6 K0 g$ O. v4 c, V* c4 ]
  6. MongoDB\Driver\Exception\ExecutionTimeoutException+ Z! t4 l+ T( q1 c' F
  7. MongoDB\Driver\Exception\InvalidArgumentException5 \0 h6 P7 U) h  s1 Q) v( |7 x9 C
  8. MongoDB\Driver\Exception\LogicException. o! p4 o# h0 Q
  9. MongoDB\Driver\Exception\RuntimeException2 z7 T5 Y9 {' k
  10. MongoDB\Driver\Exception\SSLConnectionException1 T7 t2 c/ i7 V( y$ ]
  11. MongoDB\Driver\Exception\UnexpectedValueException
    , i0 f7 [3 N5 f
  12. 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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:56 , Processed in 0.070551 second(s), 20 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!