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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15888|回复: 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不支持以前的写法。
. e' Z3 A& @( _* w/ _5 C# E& A6 P! H! {+ B. Q
下面用PHP7新的API总结一下:, L0 V6 W9 ]0 Y: d5 G/ h& `

$ I8 R" n  F& C# H一:CURD5 W" Q% k0 T) z# x* A/ {
$ m+ p, `/ ]$ b
1:链接- l9 o; d. t3 l# D5 X0 A
) r2 ?  {6 g( w4 t% S. l
  1. <?php
    ; X5 v, M, n' T
  2. //链接mongodb4 t/ ?" X9 n6 y' }
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    + U! D5 `2 a1 E& M
  4. root 用户;123:密码;如果没有密码则不写
复制代码

! A( D7 O9 B1 m( `
0 E8 ^/ }& ^, |2:查询
& a+ l7 Y6 I) C1 l, P' e( S' Y  W
8 X3 H! e4 h3 Q" ?
  1. <?php% J+ C/ k( _/ a2 \5 B" m. M

  2. . Z# j8 M7 H1 x- e9 [; @! k+ \( E+ ^
  3. //链接mongodb5 O7 N( Z# o; n5 b3 T# t) H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 I5 }! k$ W2 L# \: U; d) j$ I

  5. * \9 w2 X0 F; s  p
  6. //查询
    ! A8 E( b, o; i- n; Z% Q
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    " a  I% a( i9 Z" ~9 n
  8. $options = [1 b7 i1 g) n. U3 V! Q7 F
  9.    'projection' => ['_id' => 0], //不输出_id字段
    : j. c: _! e4 g2 \, U7 p. E8 e
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) ]8 U  R  O1 U4 @$ H) ~3 L
  11. ];& ~/ B# A5 [9 Y6 y7 _1 ]
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    + W: A2 I5 c8 O) e7 l$ R
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& Z, }' ?% r: K0 B

  14. ' r: W6 ?1 o- [  }9 v6 k' J" b

  15. 0 j9 ?4 J/ R: }# o; |
  16. foreach ($list as $document) {
    $ `. T6 C% s3 X4 x
  17.     print_r($document); 0 D1 }) _. y+ l2 S% V( y
  18. }
复制代码
, L+ ^: R7 \' [3 R0 S! `
查询更多条件使用方法,参考第二节mongodb基本命令,查询
/ ?7 v8 B: J# ^/ O  I( u) w$ J7 W  s5 \1 h- l- c3 O; G: S& ~
3:添加; a& b9 Z! D& G7 t; {, s
/ _+ e, q8 q! s( w. O
  1. <?php" v) K5 R. y7 `" k/ Y6 Y

  2. 9 l" R3 L: Q) q. y; o0 y
  3. //链接mongodb
    & A: _% R6 t* E$ I7 y4 S- m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      H9 q- }0 ?7 V$ q

  5. 7 m  G4 J0 s1 b
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    6 |# l/ X( c5 A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " b4 `; D) U* r2 x9 ^  i6 Z
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 b0 D) h5 t9 M
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    2 t0 ^$ I. M1 }& k! W7 e- r
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

; e7 s& `- b1 V& }5 ^- z9 G; h4:修改
# [2 t5 z5 b# Z# `: d, _" Y; k' U+ U+ J
  1. <?php; K8 C: `( ^8 E6 F8 g: m* V
  2. % e+ F, x. M, q8 |; n: v3 L
  3. //链接mongodb
    # K% r- `9 L0 A; D' s# j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 N5 D1 x, y" v' b( _! m% |9 v

  5. 1 ^+ K% j6 b/ c& D) _5 }
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# [! {5 T+ `9 c5 l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- g9 P2 M1 j4 M
  8. $bulk->update(/ K3 ?9 y4 z- S  V
  9.         ['user_id' => 2],. Q3 |/ Y; R. ^
  10.         ['$set'=>['real_name'=>'中国国']
    & c0 ~; E2 V3 l  T1 m7 h" ^- x
  11. ]); ; m% x8 O' s+ l1 N% g: f0 ~
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ ~% u+ d0 V% Y* b
  13. //1:字段不存在会添加一个字段;
    8 D+ M% `7 {0 ^5 r
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    5 C- ~7 L/ ~" r# F$ N
  15. + p! h7 {6 H0 \
  16. 3 b% `# q( q8 Y2 E8 r9 \/ J' w2 F
  17. //如果条件不存在不新增加,可以通过设置upsert3 ^% u: [1 L( q  u3 E8 o- z
  18. //db.collectionName.update(query, obj, upsert, multi);4 ]1 m5 _% d3 D. j5 s
  19. / H2 I  t5 K+ m8 Q
  20. $bulk->update(
      b0 Q" v% B, X4 u$ I' Y) W
  21.         ['user_id' => 5],
    . o$ @1 d( r0 r' Z7 K# y) O
  22.         [& R% f! u0 [" J' v5 w1 Q
  23.                 '$set'=>['fff'=>'中国国']
    ) S! |2 d/ s1 N
  24.         ],5 z- @: n: P! T5 I" K: J; g$ a% ]
  25.         ['multi' => true, 'upsert' => false] : @6 S; a/ e+ C  e0 f4 c
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 u: V) W; d% l
  27.         //upsert为 treu:表示不存在就新增7 ]1 ]. n8 m0 m, c8 U
  28. );
    $ p! u1 a0 k7 n3 M1 H1 E' p) _5 p
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ w/ R! N* M" Y0 C! m
+ D1 Z8 g8 v$ s3 e+ _
ordered 设置- K0 c' q- R! g% y

% g: D* }8 u$ o9 s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。& t3 k: V2 [- P
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 n" g$ \$ l, q: s- r% F

: x' h6 c9 c* C+ }: m5:删除6 F: |) x# T) A' x
& ^) [1 ]7 |5 |! x  z
  1. <?php
    7 o  j( Y1 _& V# b8 G

  2. , Y8 I* J7 O2 z! ]
  3. //链接mongodb
    9 W! k/ d! z$ [. C/ g# P: s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 G; [2 U2 C* E5 q1 e
  5. % j4 |3 _2 m1 ]" \9 g+ v0 ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & A2 u" B# C" v, k, Q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    6 M3 n8 Q! ]5 K% n" {8 v9 s
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    - L$ r: |9 Y8 N  [. }
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    3 A) ~& m- J! T; @
  10. delete还可以通过limit设置不同删除方式! [) ?/ [7 e8 E  j4 o- M
  11. 3 E+ o$ E0 b8 k' X
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    # E4 h! b4 ]1 e% V
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

$ ~+ C& F7 X9 v) p; A- f' ^" \- t4 A& N. W  I6 T
6:捕获异常# [4 C7 R( G8 g5 E# h) j0 u5 D
0 A1 w2 K7 E" [( X
  1. MongoDB\Driver\Exception\AuthenticationException
    % z8 G4 v) _7 @& Q$ K# T
  2. MongoDB\Driver\Exception\BulkWriteException
    : h# G5 A, v7 h# |/ H( g: }2 z
  3. MongoDB\Driver\Exception\ConnectionException: ]* g2 W8 T7 G6 g8 s: s! J9 x
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    3 g. _" J+ V4 ~6 }9 [
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口" Z8 K) b* p# r: q+ y+ H8 n* k; L- G
  6. MongoDB\Driver\Exception\ExecutionTimeoutException% i5 s6 G: @; Z
  7. MongoDB\Driver\Exception\InvalidArgumentException
    0 i- p7 {' Z: s) u6 Y& i) D- k% w
  8. MongoDB\Driver\Exception\LogicException' F8 G3 P  c% w6 @
  9. MongoDB\Driver\Exception\RuntimeException) X, ^9 J) n7 {- E
  10. MongoDB\Driver\Exception\SSLConnectionException
      n3 x! j7 x% M
  11. MongoDB\Driver\Exception\UnexpectedValueException  g4 n& X2 u6 U
  12. MongoDB\Driver\Exception\WriteException
复制代码

) \+ h/ e  {& M( W2 n8 i
. ~. E, |+ R& m) `1 M$ D3 X
游客,如果您要查看本帖隐藏内容请回复

" k4 @; k6 H* Q0 o0 R, G点击查看全部+ |5 k: p& A5 I8 [
$ L) x( o* `- B
2 I2 i! K0 ^& O0 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:15 , Processed in 0.056482 second(s), 19 queries .

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