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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11552|回复: 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不支持以前的写法。
: l9 X: I' t1 j( @6 y1 v+ l
0 g$ r8 Z  t1 \5 C3 X4 O下面用PHP7新的API总结一下:
/ c: P  J) l6 H# K6 }& @1 K! Z! q1 P
一:CURD4 `% `& B% k$ A5 L- }, }8 ~

" @- H' ~2 g9 l1 q1:链接/ }4 x, A3 A4 d+ ]5 C+ B$ E

$ r; E# X6 z9 ^/ {  A
  1. <?php: l. J/ _/ T7 O7 H# }; Y& P# a
  2. //链接mongodb, _2 J& J' _5 O" a( z6 }
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
      Y3 h* Z1 u, Q. R# M' B1 u' w6 Y
  4. root 用户;123:密码;如果没有密码则不写
复制代码
8 N( s3 @( c' ?# J5 B6 J

6 m  j3 e5 b7 M4 j. h3 p0 e2:查询
2 A; b( A" o7 s8 ~1 g% q+ B. |! r* R4 l8 h0 ~% T
  1. <?php( f- D7 N& H' t0 y
  2. 4 {, C2 c8 Z9 k' C
  3. //链接mongodb
    & d5 p& T" L6 ?# L' h+ o3 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " ?% B  z- [8 e% T2 z! Q6 d7 r( h
  5. 8 [8 k* g6 B0 c* y0 K- q* i9 _
  6. //查询
    - q* \* W7 f$ L# s7 l9 Y
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    1 w/ E0 J$ [& N
  8. $options = [" d, z) R9 A* I4 j: S5 i- p/ o2 F# o
  9.    'projection' => ['_id' => 0], //不输出_id字段1 [4 x! T# _) y, I, T# ?+ G0 |
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序4 \! W7 g) F; Q4 z& r; u
  11. ];
    ; I+ J, |8 f' \5 H
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    . S+ K$ U" w) ~) Q& `1 J, L' R- P5 m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    6 v7 `  A: ], s4 B+ R

  14. ) S" T5 p3 v: [+ f; M

  15. ) x4 u4 \  x. Y7 \1 {
  16. foreach ($list as $document) {, O) _* j) e9 C2 ~
  17.     print_r($document);
    7 p' m! f2 J0 P/ U' [4 r% s( ~; @
  18. }
复制代码
! @8 S! l% v/ {- V' e! n
查询更多条件使用方法,参考第二节mongodb基本命令,查询
. E0 q* J4 b8 Z# U: |7 K9 q% d6 `9 t" D7 f6 d& d- B
3:添加
9 G4 T  S4 }+ P, X+ l* J8 G! |# r+ V7 a# L! b# s6 k
  1. <?php, \) K7 H8 s8 r" T# n% W

  2. % L: E7 l0 \% A0 J# g; s5 q" a. a' B
  3. //链接mongodb& w3 Y* D. D* Q, e& h3 ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ R1 \; O* R# o! e. S% U

  5.   M' q2 Y. O2 \- ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + ~* G: G! V0 q8 i) Y( q/ Z; J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 |; v, y0 `# k4 Z+ k  G
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& v5 S$ b' [+ ^! m" f+ H
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);  J" t5 D6 e3 Y4 `
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

$ q0 J9 g6 Q  n3 o" c' q4:修改
+ P( Z9 U! t4 q( C: u3 f
( P  o- j6 O7 i8 @, N; z2 M
  1. <?php: W" _, l& E/ V( |) i, o/ b
  2. 3 V" ?4 A- S; Q4 b
  3. //链接mongodb+ T0 N( `: Z; q6 f9 b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ i2 `4 v5 C* M) z
  5. 1 G& r, R$ @( r
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 j2 g: Q3 f. C$ P3 b- t
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行" B) K3 c  H/ q
  8. $bulk->update(
    ' e! p6 [% |3 O# t. D
  9.         ['user_id' => 2],
    1 D. u% l7 J0 m6 o
  10.         ['$set'=>['real_name'=>'中国国']% S6 ^0 y2 L3 N
  11. ]); 3 _4 i- a9 u# B3 g) [
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 B1 a  }6 j( g: o; G$ Y' _
  13. //1:字段不存在会添加一个字段;7 y) g8 p$ b) W9 }8 N, ?0 Y; |0 b
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert; c0 W5 S3 g$ T6 I
  15. 3 O6 k/ C" O6 I- m: _7 J
  16. * u% y& h! ]. c: v
  17. //如果条件不存在不新增加,可以通过设置upsert
    ! H, c/ K5 K4 a2 P+ g. s, `
  18. //db.collectionName.update(query, obj, upsert, multi);8 Z5 S& ^; ?* D" K
  19. / x! Q9 J' K# ?" Q( W9 g% y& \
  20. $bulk->update(
    0 C% L- p2 Y; s+ R$ \8 w4 b
  21.         ['user_id' => 5],
    4 a5 A0 l1 I8 U% T) F$ O$ v1 r4 u
  22.         [* b- v6 U9 b7 P: d
  23.                 '$set'=>['fff'=>'中国国']
    & \1 T, E& \- ^' @" y. r$ x5 A& C
  24.         ],
    2 {+ V4 ^/ B, F1 C4 H
  25.         ['multi' => true, 'upsert' => false]
    , v8 N" I9 _/ L' m2 D& t" B% D/ d4 T
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    0 h  J( X% U) R! A- N7 q( s
  27.         //upsert为 treu:表示不存在就新增, G$ ?0 g0 e/ U
  28. );
    ' w& b) Q' e" n
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

6 N" P7 y- h: |0 H: _" s$ a/ f! B  t; m: X# F& w1 Q4 F
ordered 设置9 V  h4 T. ^/ Y) \" O
  k& G" l" b4 E3 B3 k+ @1 l
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。, e3 V0 g3 [: V( o' t
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行/ N% j. b0 I: S% ?1 M* W& g6 |
/ X; ^5 R/ J' M( v
5:删除
+ i& W$ W, B( h2 R; x7 w' Z6 j  J/ L) t/ s" G
  1. <?php) X2 M! Y1 Q& S7 V$ R
  2. , v/ u; A, G. _. u$ _
  3. //链接mongodb. @0 F% S" {$ n& i  ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. F9 a- g  k% [

  5. - S9 \1 C; }- l8 F' b
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    $ ]4 R* o0 U' J; i' F: K4 k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ' x4 z8 {, G& E; {% l% T( I
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ) B4 r$ k* t1 m; ^3 l
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合  g$ e( I$ n3 X  I4 U9 m4 |" G5 [
  10. delete还可以通过limit设置不同删除方式
    3 u5 [5 X6 e2 a& z- [. X# x
  11. 1 ?9 C8 n* I0 u& f& J
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据1 F* A5 X6 e% _, s
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ U8 i9 K8 e# ^4 u( N0 ?$ Z8 X9 R- R4 R: k, {; n4 s
6:捕获异常
) f. s& \6 N7 ~7 }  u
0 R7 V- h+ p8 q8 x$ o
  1. MongoDB\Driver\Exception\AuthenticationException( A: ?- }4 {. @" h! I
  2. MongoDB\Driver\Exception\BulkWriteException: @; }/ R$ v5 j9 }6 W
  3. MongoDB\Driver\Exception\ConnectionException, x" F. c8 \) i8 r
  4. MongoDB\Driver\Exception\ConnectionTimeoutException. u; ^2 Z* @2 P/ |4 {6 U/ K
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    0 F; {6 ~" n5 I1 l$ s
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    1 y4 _1 W2 k7 u4 m
  7. MongoDB\Driver\Exception\InvalidArgumentException
    7 ~& j5 F: U& k. ?
  8. MongoDB\Driver\Exception\LogicException
    # d' v8 |8 a# b0 w9 Z
  9. MongoDB\Driver\Exception\RuntimeException
    6 \2 T1 ^6 e7 Y6 M- K! i
  10. MongoDB\Driver\Exception\SSLConnectionException
    5 K; V3 ^: m; v% ]
  11. MongoDB\Driver\Exception\UnexpectedValueException
    " T! A' B1 C* u' a) x- U! F
  12. MongoDB\Driver\Exception\WriteException
复制代码

5 R, r# l9 Y1 M; y) _) W) U% ^, y' ^5 c  a
游客,如果您要查看本帖隐藏内容请回复

/ W4 c. r" z- z点击查看全部
2 C; k& x8 Y7 F: q- u2 g" _/ w9 b
3 {; q0 g0 M( O) Q" H4 V
- p& ^( @5 k3 h: X! D! p9 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:19 , Processed in 0.111217 second(s), 19 queries .

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