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不支持以前的写法。& d4 R# k% ~9 `  |, s, ]

5 }4 h! x2 H$ f) B下面用PHP7新的API总结一下:
0 W6 F9 p( D9 j4 f% J5 n. A9 j7 m# m: P" @% r( r4 U
一:CURD. S# e: |$ G3 k4 w" q
+ O/ s1 {6 Z6 F! S. c5 J% T% ^
1:链接
' h8 {4 ?& ^" S5 q
# x+ w7 C1 t' }; a
  1. <?php
    . S; P6 t- N5 `6 s7 b
  2. //链接mongodb# _, e, c6 x9 I5 w
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');3 r6 l: i3 y0 B% k2 o
  4. root 用户;123:密码;如果没有密码则不写
复制代码

, D. W. }9 Q) S* n( t; k; u  y* d& Z5 V9 o+ s3 E. x
2:查询$ s4 e, a/ U* y- i6 T

5 D% T% W9 z" J- p2 n! V7 ?7 U
  1. <?php
    ; m2 n* R7 |( \1 e" C  R: q
  2. 2 n1 \. D- T+ k8 a0 e" W
  3. //链接mongodb
    ; g. B7 T1 P: V0 m  q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 @# A0 I( ], e2 w$ {5 R

  5. / p. ^# e" v  Y. Z0 ]
  6. //查询
    9 h6 i3 H7 L2 W1 |" Z; {
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0% C  Q! V  Y2 k* W5 ?+ C  f' s$ Q1 g
  8. $options = [
    0 h/ A$ e& q4 ]( M+ t: l
  9.    'projection' => ['_id' => 0], //不输出_id字段7 l, |; V) Q. m
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序0 h0 R9 V( x+ N7 n3 \8 G3 ]. W
  11. ];/ D: s& i. v: ~+ Q+ c% E0 @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 _. m  i: r* Y' T# U
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合5 |" r. @( O; }: W2 v* D+ F& M
  14. - l" _2 o  p& h- h. F
  15. . J; n& B+ ]6 D
  16. foreach ($list as $document) {
      |5 o+ p! I% x
  17.     print_r($document);
    . Z, k/ q/ [( B
  18. }
复制代码

5 m% {; Y. x/ O3 u1 T; \查询更多条件使用方法,参考第二节mongodb基本命令,查询
9 Q( T5 q. M& ?: e& s' F0 g8 n
3:添加
. X5 h5 D4 m) w9 k) y
3 S) s9 e; w# I; l
  1. <?php
    9 x% x. H( r1 x( u% u5 d

  2. . u$ {& l: }3 l
  3. //链接mongodb$ W9 b/ C7 @6 t7 X
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ i9 G7 {* }% o" L+ K

  5. / y9 R6 k: C% }7 _2 h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行/ |; _( h# C8 {: o, D1 A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( B# T5 S, [' L' e! M
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    9 F8 Z$ M, w' T5 r
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);5 j8 L" }/ A3 G2 P6 j  b+ z
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

! d- j3 G) D' K# i$ {* B5 r4:修改/ G2 v. a" o) E7 E
9 D" K( x4 z8 X: i5 K8 k
  1. <?php" ~$ o/ D& S- \1 a

  2. 9 T, B7 a& ]: n8 }
  3. //链接mongodb
    7 e. h2 c" x! H/ a9 O. }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 Z# y9 [7 }5 P- W) E6 K
  5. 5 X7 R, `7 r- g8 t
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    6 }* r+ S; v1 T8 Q# V- Q% j8 F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 K4 ~9 n$ u3 D  v+ U. K2 t/ Z
  8. $bulk->update(0 J7 s6 z1 u& n: `- L" k! y
  9.         ['user_id' => 2],' H0 b1 O$ y9 g7 x! s
  10.         ['$set'=>['real_name'=>'中国国']) Q1 y" w: `% J8 Y
  11. ]); 2 _! G  h- h! V9 q( E" X1 s) u  S
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    & h1 H1 X/ r, h3 g: H7 G9 \
  13. //1:字段不存在会添加一个字段;
    3 _/ w2 d  ~6 [% e
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    8 l( ^% y% n3 Z- s
  15. 8 ~0 c' a8 K. Q7 p
  16. 3 p5 U! {0 u4 i' w
  17. //如果条件不存在不新增加,可以通过设置upsert" _1 z! V6 S! y, C' F- ]( x& [
  18. //db.collectionName.update(query, obj, upsert, multi);
    # d/ F7 |" z& {: A

  19. 9 b, L; c* a* r. r& n0 Q- t2 P- Y
  20. $bulk->update(
    / V6 n: u& l( S( A9 M+ u; X
  21.         ['user_id' => 5],
    4 s1 D5 J5 c" ~+ u& ?( F
  22.         [7 S; L/ Q& p+ Y7 E
  23.                 '$set'=>['fff'=>'中国国']
    % n; L, K# p* I! g
  24.         ],1 c3 P# T+ P7 D/ V
  25.         ['multi' => true, 'upsert' => false] ) x% G; g" H8 a3 O
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条( R0 i3 R. q5 c. R( _9 k2 z1 M
  27.         //upsert为 treu:表示不存在就新增/ j4 ~( _+ q  n, S9 l$ A$ d
  28. );
    3 t2 I( y7 V( j( n( k
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- S; i, \1 f9 x, h1 N8 }8 Y

& t2 t! S! D( a. Kordered 设置
$ D. p/ f& f! ^8 g
0 _- I  g& s4 P6 l# e4 D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。) B/ b6 b; y5 v
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
" c# D- J; u) ~0 v7 e
( D8 c" K8 x* e( T3 Q5:删除! [: F/ v: r4 b' c( M
0 r% ~/ R, Z+ f3 C
  1. <?php5 ^1 j3 L" e* R- X1 d- a! K
  2. 3 S* x( X/ q% S  M( v
  3. //链接mongodb
    7 D) ?& V% G- I: Q$ H& M* f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ d" Z/ L6 T! }4 ^0 P8 M7 o

  5. : U6 D+ ?' n; ?4 ]6 `6 y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 G% G; y. w; D
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 B3 `% E8 i" C+ H+ F' |% W' R
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) h/ o4 w0 p7 W  W/ @' n
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    4 J5 W5 b0 b3 {/ X
  10. delete还可以通过limit设置不同删除方式
    " y" W4 `. K' p7 b, W7 d. L. f
  11. 2 f$ P7 C5 B' p# S% C1 l
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据3 a# H6 K1 q2 ~
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 f5 t2 K: z  {+ S
3 M7 r5 q3 A8 t' J7 E5 s
6:捕获异常
' a! ^/ k; u! B. H8 F) @7 f8 \5 O! r5 T# C9 c  L3 j; W  b6 }
  1. MongoDB\Driver\Exception\AuthenticationException
    6 ?1 k: W# ?+ o( E3 }  a7 W. R
  2. MongoDB\Driver\Exception\BulkWriteException
    , k" b7 r* n8 u6 k
  3. MongoDB\Driver\Exception\ConnectionException% c/ L& J% _4 s; Q3 `
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    $ c8 i% G: b. c6 S
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    9 r2 u% ]4 q) s5 J
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    : f% L- k  K6 O& ]
  7. MongoDB\Driver\Exception\InvalidArgumentException
    / T2 Y  S) e! `  U! G2 N% |' }# {
  8. MongoDB\Driver\Exception\LogicException/ J/ D. Z" e, s/ D- N
  9. MongoDB\Driver\Exception\RuntimeException6 L7 s9 C2 l  Z, h2 m) [
  10. MongoDB\Driver\Exception\SSLConnectionException
    ! t- I2 K/ z4 o' n  c. _
  11. MongoDB\Driver\Exception\UnexpectedValueException$ G9 o+ H$ F1 h8 O" C
  12. MongoDB\Driver\Exception\WriteException
复制代码
& d: m, b. e' v% l6 ~) l  t4 _
! D1 c+ c+ W$ S3 D" ^

' j& M6 z+ D3 |点击查看全部
4 T* D8 m1 k) |0 |9 m. p, M
  N; Z8 P) G, N% i( H
, |+ f  F9 Z) P) B$ {




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