设为首页收藏本站| vip购买 |

cncml手绘网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 141|回复: 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不支持以前的写法。! d  M5 D' q  ~
4 R5 |* \& ^" c6 |: B3 {) I
下面用PHP7新的API总结一下:
9 V. l# o% t6 H; a1 a: |0 p1 t! D3 x* t; N  p  |+ m, h9 G* A$ r
一:CURD
5 y+ @! `: d8 M% @- a& H% h7 f4 R2 K/ N0 F' I  r8 I1 c
1:链接( S0 {7 D/ `: R% y4 ~
, ], ?  c2 [" V7 B
  1. <?php( ]' d  ?0 I# w! p
  2. //链接mongodb
    5 d& ~, P) M) `0 Y
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    0 G8 K* z, _2 ?: h# [: X% j
  4. root 用户;123:密码;如果没有密码则不写
复制代码
3 p1 t  a* D9 o, t. s# g% w

' J+ I5 M: K. Q* v) t) H' L2:查询
7 Y, N2 R8 O- t' b# l$ ~# k, N) G; f7 W" O/ a' t7 {
  1. <?php
    3 b* R. @5 v3 ^& e0 e
  2. ! ^9 |0 y: q: l) p6 o5 s+ m
  3. //链接mongodb  F6 K' D, S  @5 B- D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' H9 l( y& l0 ]/ {. j  l

  5. $ k9 w( o; g; {4 n7 z+ A
  6. //查询- [! @8 y& \6 c, m
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    3 P$ p5 }% b5 h  ]# h
  8. $options = [
    ; ~* [/ T; @$ \; k1 f  N6 O
  9.    'projection' => ['_id' => 0], //不输出_id字段9 ]0 c, c' R4 a  U% C
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- {+ r$ s+ R" C) w- R: A
  11. ];
      u$ y, z; ^( W) g% Y' u' g
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
      O' f4 m$ A3 M5 u( p9 Q9 [1 i
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    * U% J# p. R. [" e1 g

  14. ! I3 u' S; c$ ^/ ^! z. D# z) O9 d

  15. 2 ]: \* P+ F8 E1 c5 \/ F
  16. foreach ($list as $document) {
    : w8 ^+ p, i% s: N+ z, W4 e
  17.     print_r($document); & D, a8 @. ?% X  T" S5 L$ M  V
  18. }
复制代码

0 H" E; d2 A% a( s4 K4 [查询更多条件使用方法,参考第二节mongodb基本命令,查询3 @% u( z! z4 M( j0 Z

; T, e1 G3 F+ H3:添加6 K# W* x0 O/ @3 [

8 C$ J1 S: m% o2 t  N, }
  1. <?php7 Y% S8 w6 b5 z' [% s1 P

  2. / d, F' \  z  T' ^: _; V. g1 ~% u
  3. //链接mongodb' y. C  H/ O3 n1 F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! v! B6 A% O! M  O3 `3 \  V# I

  5. " B3 `6 K' j( z$ _* w
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , U0 d/ [1 i, X) u  E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      k+ T# C! f' R: X
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    " ]2 c+ s: K/ i% Y$ G/ P. S6 C$ d4 S
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    * A7 p7 Q  x* x3 s1 y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; U1 W  x& C- b, J
4:修改
- M# a* d0 ]+ [: q& R4 J1 d: d$ C' f! E$ z/ y
  1. <?php
    / O0 C9 _; I0 P' g( K: U

  2. ; G! y/ @- G3 D- N1 Z" w
  3. //链接mongodb1 i) K! B+ `: C* ^' V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; Q5 k: `! w4 O' l& E3 _3 V# t: S! s9 Z
  5. ' K8 L! p0 j5 C6 n! q) S; E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    . z- M5 k  l8 w0 x
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % X1 T1 d" v% M$ b
  8. $bulk->update(% F7 D0 o$ t8 d- s% G+ i' l' y* G
  9.         ['user_id' => 2],
      A/ M! Y7 X" M8 l8 M; [4 U
  10.         ['$set'=>['real_name'=>'中国国']
    $ B6 ^8 Y# X# {
  11. ]);
    3 W# u* t' u) D0 o) r
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    1 i( p8 k/ l! C$ _
  13. //1:字段不存在会添加一个字段;
    ; g& L& Q! _- H- p' I2 w4 `
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    . g' L. J5 Q: [0 @

  15. ! R$ f0 `7 J9 X$ w# E
  16. 1 i- E" I, s( o$ O
  17. //如果条件不存在不新增加,可以通过设置upsert
    " E, i% w4 l  k" S) S4 g4 W" o
  18. //db.collectionName.update(query, obj, upsert, multi);
    7 Q9 R) I  Y9 S7 |" s7 j3 n. h: f
  19. * _, b6 \) n" F* J' U& o
  20. $bulk->update(
    , L! M5 Z# A# s" m0 E4 q
  21.         ['user_id' => 5],
    ) j" o7 `4 t4 |6 P$ P, q
  22.         [3 z" z+ u: z1 s, c- `: @( E
  23.                 '$set'=>['fff'=>'中国国']: w6 q+ l: m. w* v) z: V
  24.         ],( p7 e! O9 y( w# `- i6 |, f5 O
  25.         ['multi' => true, 'upsert' => false]
    3 o' D1 i3 s9 u/ F
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    / E9 z" r4 S# `) K
  27.         //upsert为 treu:表示不存在就新增. Q4 x5 x. f: w
  28. );* G: j4 }/ J0 G# m8 x
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ K/ Z" ^$ k7 L! [  h; `

1 I5 D( C7 P7 p0 V* |# z; Yordered 设置# ?6 T  W4 `. O3 S5 E" F

5 g/ N$ ~* N/ v& A2 j! S$ _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。2 \9 a4 _" P- \6 |$ |
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' z  o0 ?  H" v# @% c

) ]! h7 ?; T( Z* j; w6 p( B5:删除
, @2 s, j! n! B( v4 I
! T% e; H1 i* J& [% L' l5 ]& I
  1. <?php
    % C% m- J) @+ O; ^
  2. + m* c9 ^4 c/ o- U3 m& q
  3. //链接mongodb$ ^" q/ o2 G7 T' c' D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; `* K0 y7 ^5 f- J$ P+ G1 y  B
  5. 3 _0 W+ {" \, Y0 ~) }
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 [1 l; _$ M  \) g5 _4 s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行  x4 K) S8 T: j: i) g2 K  b0 C; x
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段" b$ d! |, K0 P8 z: d
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* ~7 C  V; O9 X, L2 E# g
  10. delete还可以通过limit设置不同删除方式
    4 R  i; q2 h, \

  11. # M6 ]. \8 A) h0 K5 b1 |
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    . F) `6 Z& c! l% j1 `3 F2 g
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
; g: N) @, v9 Z3 p- t; X

- z2 w  c) q  X" l. n- Z6:捕获异常
; i9 l+ T- t( P, j% L
7 p3 l7 V" ^  }- [/ L* {) M
  1. MongoDB\Driver\Exception\AuthenticationException
    1 B) u! \* C. w# Y# |" x6 N9 V
  2. MongoDB\Driver\Exception\BulkWriteException
    ! z/ g  J6 J$ A6 |! P( {$ @
  3. MongoDB\Driver\Exception\ConnectionException2 W# I" c/ |. E. r! D2 X
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    . Y) R3 Y% Y2 t# q4 r
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    6 C* H/ e/ Y3 U3 Z
  6. MongoDB\Driver\Exception\ExecutionTimeoutException$ K8 J6 x2 ?3 v$ V1 r# Z+ t
  7. MongoDB\Driver\Exception\InvalidArgumentException# {: H# F- \& Q
  8. MongoDB\Driver\Exception\LogicException
    / R+ u) }7 x: n+ M4 p3 d* ~
  9. MongoDB\Driver\Exception\RuntimeException: Q1 p' N1 O7 O' p: Z5 Q; |$ D: w
  10. MongoDB\Driver\Exception\SSLConnectionException
    . i/ c; y3 G1 F7 S# x- Y
  11. MongoDB\Driver\Exception\UnexpectedValueException: z1 ]: c+ {5 G' S( r) k
  12. MongoDB\Driver\Exception\WriteException
复制代码
5 y$ S# F) Q2 ^' y$ ~* V. O2 s
5 j7 l# A" K8 c  c. M, }
游客,如果您要查看本帖隐藏内容请回复
+ k  h* x& ?4 C' X# J) X6 P0 l
点击查看全部
* K2 w$ c( m+ n* h
8 \) W; V6 O: L2 q7 q0 x# X) h' h
4 d! b1 B2 B( [& a  h
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则