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不支持以前的写法。( F4 n4 Q0 S" E1 b& r4 s/ e4 m
, s  ^% `3 Q8 `8 m/ C; N) z
下面用PHP7新的API总结一下:
0 E; S4 {5 M# h" L5 j9 u* u8 f3 @0 U8 i
一:CURD
% _- r9 E4 x: W" M
$ q3 H, X- K# |0 l1:链接
. I3 Z2 r1 a! V- N5 V0 K6 x7 E: e  i  a/ l  o
  1. <?php, s. N" N+ R" |, H/ u
  2. //链接mongodb7 W& r# U3 z6 s- n  ^, E2 O7 {
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');8 g; p9 T0 H' L
  4. root 用户;123:密码;如果没有密码则不写
复制代码
" d. O6 E0 S3 O, N8 _9 |/ ^

8 s" S$ ]1 |  |' H2:查询
! W  {+ O! x4 N! Q! v& T
' x  c9 x; y" \3 V' [, A0 W
  1. <?php
    $ H& j! p; Z. O* b4 ], `

  2. 1 e$ r( C4 N- A( g* C# t
  3. //链接mongodb
    % `# ~! d7 l; N& t0 K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" b) T  E; n( @& ^+ E, s

  5. 1 P7 Z4 V! p+ A! t5 k- L6 f
  6. //查询: I( s( L% C) Z4 \! Q% a1 d* f8 [6 |
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    5 h) j- }3 `* p0 w' a9 n* g
  8. $options = [, }* v. |* p4 F4 A
  9.    'projection' => ['_id' => 0], //不输出_id字段
    7 s  n* b/ R- m0 z- k! w1 ^
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    - {0 g  C, u2 u9 v: J' k4 S
  11. ];- W( t" h( w1 N. B7 l
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    0 ~, A4 C# ^' `. i5 P
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ) c. n  B4 {7 B* j4 H& B% j
  14. 7 m( @7 W" O8 J4 s7 s
  15. / w! a$ d% q9 }5 K3 I" I/ X2 E  P" W
  16. foreach ($list as $document) {
    7 r/ i9 O- c: N8 a% l
  17.     print_r($document); - ~5 J9 Z+ X" e
  18. }
复制代码
$ O# U: A5 L- p- q+ v
查询更多条件使用方法,参考第二节mongodb基本命令,查询' d6 l! ~* J* E+ I8 }

' I! Q! E; y* u- D  W% N: [( Z3:添加
& j8 \8 _% a: l# D. q. j  s
# w& W* H* ?; {
  1. <?php
    1 D" O7 k1 O# [, k3 R3 }* U
  2. * X/ @  A+ \! N1 P& E( I+ n. G
  3. //链接mongodb
    " {* U0 G. `$ L
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- o0 x8 k+ n/ ^' w- Q
  5. 5 u3 }1 W! a; }" N+ w8 g! e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 Q  G# W. g- m* e4 n
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 W* l8 u* @( m  G' p! @; l
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);. F( W) v, t1 [3 h8 I$ {; T0 K* I+ t
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);2 |& L& E1 o, U, X- V& P5 C8 N
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

' r: [4 w2 A8 F* d  e: M" z3 k4:修改
8 l. Q. S  |6 _  w  N" I: K9 i. x1 i
  1. <?php
    - v/ P/ J* f1 z( I. C. V

  2. % ~$ G- M# s" _9 Q, H+ l
  3. //链接mongodb
    , H- d; ]& C( Y. X1 U6 v: z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) h' A% Q5 c( z+ y# V
  5. 0 W8 [6 Q% C/ q. T5 C8 f
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    * B3 t5 P2 X3 ?3 \% L
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ) P+ \  z' r7 z) V. b$ ~
  8. $bulk->update(
    ! P% l& E4 Z0 ~' o! `8 Z0 Q2 b5 s  i
  9.         ['user_id' => 2],4 _( U7 E9 g; Z! w& g; @0 r
  10.         ['$set'=>['real_name'=>'中国国']+ A1 t! B7 i* O4 d$ t* b/ \8 b/ u2 f
  11. ]); & a; Z' o* T6 @2 K" M9 D0 N- V
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,0 a" h0 v: M4 K9 X
  13. //1:字段不存在会添加一个字段;
    * A- j3 E! l' W* ^! ~
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert# @7 G) b' {5 L' r( j+ \1 w+ ^
  15. : _6 F/ h# I# O  d! Y; U& p. O
  16. ! I+ w' _& h- w6 N5 x
  17. //如果条件不存在不新增加,可以通过设置upsert; g# E3 J8 H  w# I8 W3 T
  18. //db.collectionName.update(query, obj, upsert, multi);2 H; V6 t6 Y; x9 R, o

  19. 9 T: d( U9 b+ N$ |/ {" I# e
  20. $bulk->update(
    ! B9 ^4 a  e5 C* k
  21.         ['user_id' => 5],
    3 c5 T8 q- v0 W2 t0 Z; x* x$ n
  22.         [
    2 `' c; }- e; \! W' J; i
  23.                 '$set'=>['fff'=>'中国国']
    1 i4 y4 e2 R. u* J; \( j4 L
  24.         ],, y0 t6 |  m  a  g% c
  25.         ['multi' => true, 'upsert' => false]
    # b# _( a  i4 h7 F
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    " j6 A0 Z* R( r! X/ n7 S+ K
  27.         //upsert为 treu:表示不存在就新增, i$ z' Y% T; [5 O8 M5 |7 v
  28. );
    1 J: e$ \& s3 W5 e! r
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

/ m9 z6 `3 v9 c# |- u/ s3 A% q; T0 A+ _5 R5 y
ordered 设置7 K0 Y$ s$ h: I, G9 V, a6 K9 p$ \" C
1 x7 A& e* i/ J/ J: O  |0 b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
. v- p" ^# Y. c& A0 F, e2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行8 e& w- S3 ]0 H2 A: i& V! `

# @0 h/ t" F4 h. T! {7 _5:删除0 I* S7 e% H/ r
' d/ a' I2 F/ E: a$ g
  1. <?php7 T! m# H3 N* T6 f# y& B
  2. 0 }* V8 ^) W* P
  3. //链接mongodb
    / i5 P6 b) ?' K) U) D- R) J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " z1 |% j& _0 G- e4 K
  5. 1 W0 Z9 ~& I7 Z# U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    . M8 O* q. g" `. k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ J  F! k: _) i* r" p0 A* z+ @2 p
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段$ I( T9 l! C$ H% E) l
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    # G. ~; w* B& R( Y% Q* j2 l
  10. delete还可以通过limit设置不同删除方式
    + Z- Z; w+ v$ w) A5 C6 H; K
  11. % J* X& s7 H% Z; X3 g% V
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据9 ?# R* n5 i4 h
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
) z4 T; e' ?/ a: G
+ [' ?( _1 f" ~0 s; D: s  y
6:捕获异常
. c6 M  C% Z$ z. k! j0 [+ ~* ?, Q  s$ D2 X: u
  1. MongoDB\Driver\Exception\AuthenticationException; d6 ]5 M3 G2 K9 F0 O* r9 s
  2. MongoDB\Driver\Exception\BulkWriteException
    + v( T( E" L3 X" f4 M; d1 b
  3. MongoDB\Driver\Exception\ConnectionException
    ' G0 v  ~) @/ Y: A/ d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    2 [& r7 E/ R  t) E' `
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    & @% B  q2 |! b* c) V9 R/ Z
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    " A2 i# d+ V$ |4 ?: k1 d
  7. MongoDB\Driver\Exception\InvalidArgumentException
    8 H7 r) r+ j2 R
  8. MongoDB\Driver\Exception\LogicException
    , P. s. z" s9 |7 Y/ p! V) a
  9. MongoDB\Driver\Exception\RuntimeException
    # }: W' S/ F' s+ \) l  g' v' G
  10. MongoDB\Driver\Exception\SSLConnectionException
    # F& g6 \# X* i5 f" @: A  ^0 ?1 t  ]/ M
  11. MongoDB\Driver\Exception\UnexpectedValueException1 k" R0 _2 R& ]) a
  12. MongoDB\Driver\Exception\WriteException
复制代码
5 j6 V' u' ?6 b. d4 T5 t! P+ {
- S5 ^. A5 d% N+ p

) S" P, |' g1 T' s9 W% B! K! P6 S' g点击查看全部, B% K/ Z& S, J) E% h- w2 ]7 Q

9 v# j; [/ o7 i6 R: z
/ R; W+ `! K. G0 H




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