cncml手绘网

标题: php7的mongodb基本用法 [打印本页]

作者: admin    时间: 2019-6-24 20:58
标题: php7的mongodb基本用法
提示: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不支持以前的写法。
8 ?4 |! m. V9 g+ e6 S* `  v
. ~$ ?+ i7 e- R: E下面用PHP7新的API总结一下:
* z# H' E- q) k: P9 {9 l1 c; [1 b0 O: y$ e0 G* V' ?  |
一:CURD
+ A; z* T2 F& W, D( h+ @. W1 |4 W
1:链接
* `/ q; ^5 {5 Y
! X- Q: D; o9 h
  1. <?php
    . m; T( y. A1 V+ e6 u9 Y; m9 E; ?' A" `  _
  2. //链接mongodb( C! W) y; ]) y% L- u
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');; D& o; _  P2 Y5 m1 c. i
  4. root 用户;123:密码;如果没有密码则不写
复制代码
: l5 e9 ^. ^7 h. i

) i3 p) i( `" w/ k8 ^+ I- t9 E2:查询
2 W. O% y, h( z4 O! A" j" L: x
1 U7 E5 A; c/ P3 f. b3 J: {
  1. <?php
    ) K" C3 I; Q- W% @( b# U

  2. + s' o$ M. \$ Z# D
  3. //链接mongodb
    2 Y4 l' U2 G( y2 N* i- q  a
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, l; q" t* T: n) n8 b: ]

  5. - g, N; v" v; @5 w: E" o
  6. //查询5 m$ a, w0 u3 e1 z' s
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0: j- z5 m) ^& Q3 l0 ^; K+ @# M
  8. $options = [
    ' w7 f2 h& O  r! K" F' _/ g3 C$ r1 F
  9.    'projection' => ['_id' => 0], //不输出_id字段# k. a6 W$ S/ W4 _/ N3 X' `
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    7 V. {8 I+ X% j. D; g; u* D
  11. ];
    , l1 w: Y+ F  r, T6 {1 J' w% b
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求2 p8 j: l$ C4 M* [9 \  R: E5 i9 u
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
      i, g' l  H/ s. w- r4 ?

  14. ! c& q6 V! P1 D/ l' Y" D! |1 \

  15. " z( u- q, R1 d3 }; ?. v# D, u
  16. foreach ($list as $document) {
    , [' ?4 i: s" R. W
  17.     print_r($document); 7 D; U* X' u& A- q) N1 w1 x
  18. }
复制代码
! c4 ?3 ?4 v: k
查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 j1 b: e; ?3 t' f0 B0 d" h5 M
# n! F0 _& o0 D. P6 o4 x3:添加
9 M% \0 n- ~$ D* I$ H. a
. a) t9 K! [4 H; b! r) B* k
  1. <?php9 W8 T! [. u7 }. U& V; t

  2. 5 J) ?) Z" O' j  `5 _
  3. //链接mongodb1 U  w5 {8 w0 c" \2 R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / H" ^# B5 ^8 c( X
  5. : y2 g6 V4 J4 T7 x$ f) B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 z7 J2 x1 D- S) t* Q) b
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- k+ C5 p5 c/ z) w& H- K
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);! K0 X& D7 E9 D
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    5 I( @6 t/ a% T, e  m
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* t5 Q5 I# g( @+ V6 S4:修改
- `$ p5 |+ d: x0 V: W; P! i
6 d: |# w5 A) a3 i( |0 K7 L
  1. <?php
    6 d% W5 l) Y1 n# Q. ?) ^2 n0 X& r

  2. 1 `9 o; ]" r2 H7 i, t4 w0 o) i+ s
  3. //链接mongodb
    , x. T, I7 g* m4 Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 p9 C8 _: |3 H4 Z3 _

  5. ) X6 W5 {6 G/ _0 |" t  e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & r  ?' r; W9 V% j* @; ~
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 \. h* L3 c; m1 R9 p+ P
  8. $bulk->update(! e% ]9 b7 J* G8 T2 X3 }/ D# s
  9.         ['user_id' => 2],
    9 G/ v9 a3 W. I. [7 ^& N
  10.         ['$set'=>['real_name'=>'中国国']. X# {( H; T. O; n) A9 {- [
  11. ]);
    " B( ?$ z6 Q1 F
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    + o- ~3 k! q- S8 i; u+ x
  13. //1:字段不存在会添加一个字段;
    ) Q; ]0 }) i4 u  s- {/ W
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    - Q' {2 q  x2 u5 ?+ m7 @6 n
  15. + m0 U/ D0 ~& Q& g4 Y
  16. 4 ^5 A; o3 c" R0 G) Q
  17. //如果条件不存在不新增加,可以通过设置upsert9 S2 m  [0 d( {! z/ {, t5 M! X
  18. //db.collectionName.update(query, obj, upsert, multi);$ K6 @% \+ e8 }
  19. 6 ]" k, ?4 w: @5 M& D0 B) V2 x
  20. $bulk->update(
    " o7 O( L4 S1 n7 Q
  21.         ['user_id' => 5],
    7 r5 r5 b0 A' L
  22.         [
    / n1 J# {! J) j6 _0 q2 e. J
  23.                 '$set'=>['fff'=>'中国国']
    # B4 e. p  g/ G3 A; N
  24.         ],
    & [! _6 v1 [4 r' n( t2 U; x7 d4 p' q
  25.         ['multi' => true, 'upsert' => false] / W2 x2 R; S( S
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条" C2 z3 v# ~+ g  e' V
  27.         //upsert为 treu:表示不存在就新增
    9 B& v( [# o0 F7 z0 L  B8 V' u
  28. );
    5 f& Y# E$ t3 b
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: O6 L& w& X* f5 U" P' V
, k, E4 Y2 R7 V8 t+ gordered 设置
) q3 n" X. L. b
' j# v+ p/ M& j5 r# I; C* _% G. c- h1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
  x' ~" }- V2 m- L3 O" X2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行. h8 x) |. E8 Y1 L
* w9 e( W/ _( J0 i2 Q4 T: K4 F2 d
5:删除! X5 k3 q3 T; g% n% N' A7 v
) h8 i7 D8 h. r
  1. <?php
    ' h3 N! M, `8 B6 s
  2. " O+ o+ X- T/ a; Q1 ?9 K1 ], y
  3. //链接mongodb- u" o5 h! s' M6 \
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    8 |2 @$ ]( ^$ d8 `6 F+ E
  5. , j+ }9 N7 G9 z2 m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ }5 n1 |$ z- q0 u
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - _5 Y6 Y# u# U  `
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    6 m; T5 A3 j( W/ y% Q/ \) s5 X7 r
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合5 F& F& e8 e: D1 h9 s
  10. delete还可以通过limit设置不同删除方式
    $ j$ X5 G. }: g% n  }% }3 R9 s

  11. 5 A9 q$ s+ H  ?5 M7 D/ s: w# g' r- Q
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据' _3 B1 X; v8 G. m! w; X
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

: l5 X/ a5 b, V; c
! i- |  ?) R0 `8 G, h) G# Z6:捕获异常
2 f3 D: _$ @* q# i1 P% ^+ V7 R  u" m. j- S6 l; X/ e7 C: I0 \3 \; m& w
  1. MongoDB\Driver\Exception\AuthenticationException
    * [* m" G) _5 U  [
  2. MongoDB\Driver\Exception\BulkWriteException
    " K6 J# Q. ?1 a1 C2 }
  3. MongoDB\Driver\Exception\ConnectionException
    3 @+ ^& M$ g9 E  j& O
  4. MongoDB\Driver\Exception\ConnectionTimeoutException# M" ^8 T2 A- L# y" x4 p
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    7 u4 `+ [+ B2 m; B* {: V
  6. MongoDB\Driver\Exception\ExecutionTimeoutException% m- r- Z! q- ?/ F3 V
  7. MongoDB\Driver\Exception\InvalidArgumentException
    % w4 _$ `  Z0 t  @9 h# [. {$ f
  8. MongoDB\Driver\Exception\LogicException% \2 {; x: d% [$ t, f( |. D
  9. MongoDB\Driver\Exception\RuntimeException
    $ D" m# ?, H5 J0 h" K) o% O, F
  10. MongoDB\Driver\Exception\SSLConnectionException1 M/ Z" Y% [6 y# v* U8 s
  11. MongoDB\Driver\Exception\UnexpectedValueException. H+ p5 v4 P; U  Z
  12. MongoDB\Driver\Exception\WriteException
复制代码
& g4 A- J9 ]% C7 R: s# ?

6 s, x# ^. B$ [+ D$ F2 ]6 @- i1 }
点击查看全部
) q% l  d) `( N, Y1 [4 h( D
' ~* _; N: T! v0 ~3 u; \$ x" o+ C7 W





欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2