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不支持以前的写法。- J1 y- H) {' P* o7 I
* _% J5 _, Y" ?- @9 u
下面用PHP7新的API总结一下:/ F0 M0 e, C9 _1 i) s

( ^: h( @# g" ]3 o$ |9 R; p# U一:CURD
2 S0 h' O3 t( P$ D% _% y
9 G, `" n4 B+ O: ?1 @1:链接( y# O9 d5 I. f& P! v. _* n: d& C

+ z6 W5 n! h2 O+ J; @
  1. <?php. j& ~& e& ]4 f3 h
  2. //链接mongodb  f0 n( `3 H+ F
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    2 j) [/ X' k% }) z8 Y6 Q) [- i9 i
  4. root 用户;123:密码;如果没有密码则不写
复制代码

% c3 F) |# K+ E- V+ J6 M6 Z! T- K; o. z) s" r+ I6 f$ r7 }; Y( q
2:查询
/ P  h# L, ~! r, Z$ u2 }
3 j: q3 M9 ~4 H: s+ m# N  C" p
  1. <?php
    : X0 R$ W' R4 Y, q

  2. * i7 B9 k; `7 J" _3 [' s. A
  3. //链接mongodb
    8 l# {* p7 x$ ?) ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: u* ?: P2 |) W+ J
  5. - a1 D. W+ A2 O& g7 d1 _# |2 ?$ _
  6. //查询
    ' @% T; x6 i! p2 Z) p
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 V7 S2 X$ e; t/ S$ W6 S
  8. $options = [
    9 _' p1 L8 o, b1 u6 {) f
  9.    'projection' => ['_id' => 0], //不输出_id字段
    2 @7 S# l/ v) v3 P" X- G% L8 o
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    2 y" u. {! r! M$ s. G5 x3 g
  11. ];
    & j: q% ^2 R; v: r9 G; X+ F; d- y; U
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ) O1 ^6 T8 t9 R, X8 S( @, T  Y
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* V$ P; S' n2 t' C- R1 V$ Z

  14.   x0 Q, |/ J6 O0 {4 P3 n
  15. : t5 a% U. C! @' l/ q0 s
  16. foreach ($list as $document) {
    2 e6 r$ }/ C2 H4 \2 x
  17.     print_r($document); 8 ]  t7 q+ \' H; i
  18. }
复制代码
+ c8 T1 E: T; S' F
查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 Y4 _+ w9 X1 c' w+ d+ k. n% Z6 Z
1 ~: ]$ E2 U* f" i/ G3:添加1 H5 }8 t7 ]+ c3 [# a' e
) y7 h3 b! i2 J% a+ U8 O
  1. <?php( B  W# }2 V9 u

  2. 8 h$ e7 ^7 r' i# ]
  3. //链接mongodb
    8 b4 q! `# ~8 g2 |8 A+ ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * r( t9 ?! k9 }
  5. , h5 ?" b3 f6 e+ c, V8 s. ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) s' N: P/ C, |" ^2 B  ]4 o
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    , ~+ `$ s1 y* i+ r- L
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 c+ G: T8 L, ~8 `
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. H' E3 t1 S% d  P. J4 o: q+ M* ^
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: Z2 \# O  F2 |/ G4:修改
7 s( {; u- [$ k9 Z: P0 R. c, f
0 r+ M  x  y( ?" I' S
  1. <?php
    ( o! I( y. \* A  O! |1 b
  2. ) V  m) q, }' W& N% Q+ w5 [
  3. //链接mongodb5 D3 C  ?. ]/ ^9 E9 t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + A2 N' d" n, T. X2 J/ H* ?4 ]

  5. 8 C" q7 h' y* Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : X# z: f) a. t% U) b# [0 I; {
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * F  U1 r7 @) A, u) B9 r3 u
  8. $bulk->update(
    - k: `& d$ z7 A& t
  9.         ['user_id' => 2],) D4 E+ `' ?/ |& q# e
  10.         ['$set'=>['real_name'=>'中国国']
    6 Y( b$ K' E1 {) r
  11. ]);
    , S+ x: D( l( E  s7 v" o) D5 W
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    - i+ ^1 j% z5 N, D3 _! Z; ?, R7 ?3 E
  13. //1:字段不存在会添加一个字段;
    2 v/ G5 u- ?$ [( I  U+ T. h5 L- w) B6 C
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert+ Z3 l. R. q2 ~/ D1 I6 o

  15. : H1 V- ~$ _! \7 [* Y
  16. ( r9 O& L* ~, L: ?) u
  17. //如果条件不存在不新增加,可以通过设置upsert
    $ |5 m7 M8 _' W% h
  18. //db.collectionName.update(query, obj, upsert, multi);
    0 W; S( E+ t  V
  19. ! @. Y, b+ P! m, c8 s
  20. $bulk->update(* v$ o& p6 A3 w. R' t
  21.         ['user_id' => 5],
    8 q  c* ?' f' ?" F
  22.         [$ g  l0 k, [- V/ |
  23.                 '$set'=>['fff'=>'中国国']
    3 I4 j* l3 a" _! D8 R( u# F
  24.         ],; U! P8 j5 Y" z9 b
  25.         ['multi' => true, 'upsert' => false]
    + h9 F$ \  F0 }5 T7 o
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    9 c4 K% g/ I' B* J# W% ]4 e
  27.         //upsert为 treu:表示不存在就新增9 V  W) P, }& [7 ^2 [' _+ Z
  28. );
    * g  c3 r, n" k( i' y
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

# v0 q2 e3 \- @$ c2 T. D( d' o
9 b' z! ?5 T: \' x, `/ C* @ordered 设置
+ S' Y7 a  T( d6 W" \: d; Q7 R6 H/ k: x, X
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。1 R9 F  E$ `4 a: y9 C( D' i1 h- _% {
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行* D6 Q/ W9 k3 z- L

' H3 Y+ o8 {9 D: {: ?4 B5:删除. I2 _7 x' M. J( w. c8 a' u: p
- I; w% m9 \3 M  I: y
  1. <?php, l( _, H& T( q
  2. # Y$ Y6 s4 i* U2 d) B
  3. //链接mongodb
    0 d; H; ~( ~3 q6 |; [- r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' E% h( e5 c+ ]0 U2 Q/ L
  5. , u% a' E- [) q: e4 Y; `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( i, d$ j# q: D- ]2 k  X+ `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行# C% q. P) E# U! \7 T# V+ Q& x
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    7 h, n; ?3 v! ?: ~5 N& o
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合1 m. t% N% O  j; A3 T
  10. delete还可以通过limit设置不同删除方式
    1 h6 [; V& l: c: n- w

  11. & Y& \; W6 [- R  F2 m
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据  x9 q, e6 {& X% s' L, A5 W
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
8 i7 k( i8 e, Z4 @# A( ]0 @2 [
( ]3 @# L1 H4 G0 N8 L
6:捕获异常9 d. B4 g) u: _
% U0 ~, D. R( u/ H
  1. MongoDB\Driver\Exception\AuthenticationException
    ( x4 B. p2 }" j
  2. MongoDB\Driver\Exception\BulkWriteException
    3 n! O7 U. |9 @! h. Q% c
  3. MongoDB\Driver\Exception\ConnectionException
    4 }4 a, O! D( |+ Y$ U
  4. MongoDB\Driver\Exception\ConnectionTimeoutException* M/ e0 k# ]; J' O  m& ?
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口6 ~' ?' @( x% n( B
  6. MongoDB\Driver\Exception\ExecutionTimeoutException4 `& z9 r) r4 M- Z' B2 {; s
  7. MongoDB\Driver\Exception\InvalidArgumentException
    : X7 u9 b) O$ Y- ?, W# r( {
  8. MongoDB\Driver\Exception\LogicException
    0 j- v* ?2 G6 F7 H+ M4 H! ^5 K. ~
  9. MongoDB\Driver\Exception\RuntimeException8 R+ X6 C6 H# q
  10. MongoDB\Driver\Exception\SSLConnectionException
    8 N7 n: a! L" i/ i4 X
  11. MongoDB\Driver\Exception\UnexpectedValueException! O' c8 w' Y$ S4 @$ F( I
  12. MongoDB\Driver\Exception\WriteException
复制代码

, X% |" G& ^6 l6 c
' b/ n0 h  X6 }+ n; w- O$ {5 }) [. f& @4 j" W4 x+ {' ^) n( S
点击查看全部
+ S' O/ ]) d% @5 B
! n! G0 U+ n: A8 V& |- y, K  n; b. C3 }, M( d( b" _





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