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不支持以前的写法。
! l" I1 t0 `+ e( O" e' j
5 ?0 |- H: h. C& a8 j下面用PHP7新的API总结一下:
' a! n, T8 A; \! a: a; m8 E7 @0 w( d
2 _( Z; P. X9 [- b* }一:CURD: m& B. `( g+ U% B# s; ?

4 A, Q4 i2 E( _0 N6 e* f1:链接+ }& C) F# x* [  Z; L
6 Z7 ~: [" r/ A  W4 w
  1. <?php- B8 B8 U. ?6 X9 ?" V  a
  2. //链接mongodb
    9 N# W: O" c0 C8 y& r; N! K
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');! ^: Y* D2 j) M* a% T
  4. root 用户;123:密码;如果没有密码则不写
复制代码

: e/ I( E1 C6 o1 |8 q1 ~8 `' x7 E" S. B/ p, K$ F
2:查询& j/ B1 ]# c2 W7 ~8 x  h

1 G" {5 `" [9 m0 e7 |0 _! H' G; I
  1. <?php
    ) ^! C% k  ]" H; i4 Z8 X

  2. ' N, K$ j; f. Q
  3. //链接mongodb
    9 j8 j! }6 G/ o) t4 O
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" F  u/ K7 \$ _# }0 r

  5. / t% s' C; y- `6 @. H2 H
  6. //查询* E6 T! T8 U' F. e
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
      ^9 R3 i( o+ o& @6 L9 F3 {
  8. $options = [1 x, b* j: ~' A& G7 L
  9.    'projection' => ['_id' => 0], //不输出_id字段
    + _. q6 P$ k( k& }2 K& S) k( X
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序# t) N5 l9 j) z& f  b
  11. ];: s8 j) ?7 L: a5 j' T7 \8 X
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    $ Y) V6 |( `6 @' h2 w
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
      d- @  s. @2 v
  14. 7 ?$ x1 M$ G$ E& O' Q

  15. ( F: Q& x/ z) |) m& N2 M
  16. foreach ($list as $document) {
    ' {2 j% s' Z1 p4 x0 r8 p- [
  17.     print_r($document); * F* i0 |2 n9 N2 b# E
  18. }
复制代码
  J/ F0 H6 A* O0 |. d& A
查询更多条件使用方法,参考第二节mongodb基本命令,查询
/ }( {3 E3 w) m1 i
' p  K, a5 m! D; O! c: i. ?. t% b3:添加
6 }9 R" Y! h) e$ H3 ^1 r2 q7 {, u) e+ `  u
  1. <?php
    1 N1 g* \: R6 l  N! }

  2. 3 V, m& o$ m/ }; Q/ G7 R
  3. //链接mongodb
    % Z. T4 d2 x& |2 ]# K- I9 |0 h' l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 }, L" a4 Y+ e% a' f3 I1 U3 Z/ t- w
  5. $ }- b; {$ y# B% |& J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + M' M! f2 D2 a- |. J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 y6 K$ i7 Y/ i; G! T7 b5 V
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    $ R4 U5 @5 P9 I9 v0 J
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    " a& C" g* E- E8 m  g
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

6 s$ B, m5 M# a2 b4:修改, \. S/ {5 n. ~: X& r; r. a
$ z9 K3 u6 z5 o4 p6 D. W# ?; Q
  1. <?php
    ) W# J$ g# G3 A  m/ q* A  T
  2. / A" g+ P. L5 T$ r0 \! }  X/ K
  3. //链接mongodb
    ' j9 G/ j9 G* t$ q  j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 x! N, I5 a: Y0 P9 G' G* J
  5. ( t4 ]  V0 d) w  Q4 y, @8 R
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% G' A  G+ S9 U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; Q7 f. l% d0 T' l- s' w. J5 S. x  i
  8. $bulk->update(5 f3 y! j6 I8 E4 _" J; b) H
  9.         ['user_id' => 2],
    - n( [$ s1 u: O3 k; x/ V2 s$ j3 ^
  10.         ['$set'=>['real_name'=>'中国国']2 ~( X1 G3 z; D' q/ C
  11. ]); - E0 r* U/ |8 T, Z! k
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    + Q& g5 q, D- |' J. r
  13. //1:字段不存在会添加一个字段;
    4 f6 ^9 g2 t  y, \
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ' B# n/ a" A6 p2 J4 _

  15. & d9 u' g0 m, t1 N' X$ p
  16. 2 W8 v1 F+ D2 i( m
  17. //如果条件不存在不新增加,可以通过设置upsert, `- P, l( ~* m
  18. //db.collectionName.update(query, obj, upsert, multi);
    $ d6 Q2 m6 Y7 q* f+ V
  19. + {" ~( B! C8 ?: g$ a
  20. $bulk->update(9 o" [$ ]. [: o* w  k
  21.         ['user_id' => 5],$ W1 i5 ~& d$ V4 T2 C+ [
  22.         [: Z) J/ d1 J& Z" [* E$ W
  23.                 '$set'=>['fff'=>'中国国']1 n6 R/ W, c% X5 O" W( r' E
  24.         ],
    * ?( K0 p( @: }  _% U5 t  p8 i. a
  25.         ['multi' => true, 'upsert' => false] 5 Q* X; U' I" H$ b, C
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条, h+ p$ \8 E! p( n, U
  27.         //upsert为 treu:表示不存在就新增1 h; C0 t* ~9 c9 F+ g# `1 U2 b
  28. );
    + O5 e7 @% ^: g- d+ m( r5 O
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# i% {, X8 M+ v4 x3 N
# K) s. P: w- s3 P5 V" R
ordered 设置2 k  ^  P. Y% K( ~, r" p
7 G2 }7 `! n# P1 ^0 K9 q1 p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 X- N" _! E9 F1 K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
# F  c1 l  l( J7 E6 o, y0 C# o/ a  v
5:删除1 \/ `1 }  x+ L& ?) n  Q

0 z7 @8 k% T! q; u; J
  1. <?php
    " u& b. ^. N- [- p
  2. ! t( G, g1 n" S& W5 _
  3. //链接mongodb
    4 U( w! Y' K. ^8 K0 x
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : J% Q: l9 p3 D4 s3 J% z

  5. 7 X4 g6 _. [3 V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% L" _. I3 q8 K# |( j
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& X! q& h4 `' H9 `
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段4 Y& G" {9 t0 e3 Z
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合6 F, _# n. n; y' ?$ N8 ]5 ]
  10. delete还可以通过limit设置不同删除方式8 a: N+ G6 G1 f. [" v

  11. 2 e  J) K4 i# J# l) [
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    , \0 T- p7 c* d3 i' v2 U+ ]
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* t& ?1 j2 b8 B6 ?: W( U" F

. ]& w9 |' {3 z( z, d4 u1 x; x6:捕获异常
0 I. e1 z( t0 z7 F! r( _& q/ J
6 }& N  n* f' m# C0 R
  1. MongoDB\Driver\Exception\AuthenticationException$ _0 k1 U2 n- P( p( I# u
  2. MongoDB\Driver\Exception\BulkWriteException
    & k  J0 n. \& e) k' `* j; @
  3. MongoDB\Driver\Exception\ConnectionException6 q4 L) K5 t* V$ X2 E
  4. MongoDB\Driver\Exception\ConnectionTimeoutException+ b2 b  e4 _7 q7 ?+ m
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    - ^3 u+ l( b: O) q8 u, ^3 P
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    - F1 L5 |* o  H" _. N, l. r4 S
  7. MongoDB\Driver\Exception\InvalidArgumentException% w% O4 H1 I' @# }+ V5 P0 x; {3 m
  8. MongoDB\Driver\Exception\LogicException* g/ ?5 v( N: i) m
  9. MongoDB\Driver\Exception\RuntimeException9 _7 w4 I7 r# I7 S1 [
  10. MongoDB\Driver\Exception\SSLConnectionException
    : s* n; o$ m* {- `
  11. MongoDB\Driver\Exception\UnexpectedValueException# F# G8 m8 l# u+ m5 m( L
  12. MongoDB\Driver\Exception\WriteException
复制代码

! i$ d  b  g5 i9 P& V+ E# T" S4 e+ F8 _4 `$ W
; J; b; N# d# y! Y
点击查看全部4 W. V, o3 q# g& {+ ]5 \
# q/ D& j8 m8 B4 T6 ]

) k, S, H% ~$ S5 }+ Q) {  ?$ ?




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