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不支持以前的写法。; R- f) j& X3 I6 I8 n8 N  r' b# j7 _
% S) h8 u" }) _6 o' ^
下面用PHP7新的API总结一下:1 R8 Q7 x6 O! U9 ?' _( \" `
+ ?3 Z* W  `# J* x+ N4 _6 C
一:CURD
$ ?* W4 e% t6 I* {4 H2 C( f0 J( `' U
1:链接
# D) z. O$ x' O" |. V, b, v9 p1 l5 ~7 z! S( Q7 p  \' b, q
  1. <?php" k, j1 G* i' R! d3 s2 O& \3 w& g
  2. //链接mongodb0 ?! J7 J% C- @" |' f' H" I7 M7 w3 s
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    / f8 ^+ m0 U. a% p  o; O9 u
  4. root 用户;123:密码;如果没有密码则不写
复制代码

7 X% k. T: N3 G& Y2 j9 h0 O
" @  o. s+ {+ m( a! W/ S6 v# s5 E/ v( q2:查询
2 i, |) P! f$ [( C" [- p! _. T+ g
  1. <?php
    % x: @) K: L  \4 ~: p% F5 N3 K

  2. 7 O4 x# h; P; L' r5 {+ t
  3. //链接mongodb$ a- H9 }, v4 s* i( V3 |  y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 p: |) s3 F6 z7 w, X4 }

  5. - {  k- k  m7 f' K$ @
  6. //查询% F+ J6 Q5 E9 j" {2 ?+ i
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    ' ^' W$ M2 _  G
  8. $options = [
    3 \: ~* D5 s$ F+ z
  9.    'projection' => ['_id' => 0], //不输出_id字段- O2 l  P( m9 t" _+ g% ^# N
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) h) m$ t$ u$ h
  11. ];
      ^' q+ I* a' q* G
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求! q7 j' M5 d+ S: S
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ; m+ ?' R/ v% I* b3 \" F

  14. 8 [# Z+ w0 R! ^) s( }+ {9 \" J
  15. % r$ \$ b# k0 I: s* y& l2 y" `
  16. foreach ($list as $document) {! Q+ J' {# m, v
  17.     print_r($document);
    0 S9 \+ V: W+ P+ e* R* ]
  18. }
复制代码

( w+ b. G. z. B- v查询更多条件使用方法,参考第二节mongodb基本命令,查询3 u! a0 O' }' e  i4 _* r  b

9 M' u4 u: F4 J$ }3 W$ {8 @3:添加! y$ r* Q6 {: M2 H8 S7 x

2 i) C* n, z  C7 S% P8 [
  1. <?php
    ( @: W$ q  I5 n- P" U7 m; Y7 {
  2.   l! B; R, A3 g1 X5 ]  Y2 M* q
  3. //链接mongodb
    % K2 g' ]! I! R9 N/ \: s2 q- n# o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 P0 @. o9 Y$ F* f6 _/ n* Y5 c
  5. . V0 p" u. I3 T4 _1 |$ P
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& |2 Q0 [* ~3 ?: j
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; V1 m3 ~! D6 d* u% X
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);3 n1 U. E8 {& ^; {  S1 b% v4 c0 i
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    6 m" a: \- `4 V4 x6 T
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* L3 Y3 r( _, {+ m; C4:修改/ `- H& ~8 [8 C9 f7 G0 X
+ `- P+ V) v# H# M) \
  1. <?php
    1 g$ O0 Q. Z4 T6 I* d
  2. % `$ J$ k% ?% p" G) ~* I" T+ }
  3. //链接mongodb8 b8 `. k% L+ t# M
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & Y" B$ W# X+ X8 Y) Q

  5. . n% ]+ I9 ~, k+ }0 ]3 ]: y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 x+ |1 @' ]' ^; r+ ?, q5 q+ P$ p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行  Y5 O  }0 l5 i, c4 b
  8. $bulk->update(9 p3 }/ H9 E4 V2 `1 K: H% I6 G
  9.         ['user_id' => 2],
    : G7 x, {; k: k2 R
  10.         ['$set'=>['real_name'=>'中国国']
    3 d+ z" D/ j& \. v4 d
  11. ]);
    $ s# o5 y* p- n$ ?1 i
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,  a$ R8 ?3 V9 C! c3 G1 {2 n
  13. //1:字段不存在会添加一个字段;
    7 r' M' u+ f( P) u; v! `
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    * W3 g  b+ R4 v

  15. ( B1 I- {* r  I# S: o

  16. 4 q/ C& s- K# O4 j0 Z
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 ~1 w; X1 Y  c7 ?" i# u. n& x' A. O
  18. //db.collectionName.update(query, obj, upsert, multi);3 l6 N( T. S2 y" p
  19. 3 e- r3 ^/ ~; w1 i4 ^0 Y, P: B
  20. $bulk->update(
    6 X& L. Q- O+ A
  21.         ['user_id' => 5],
    8 h, d$ B+ ?( I
  22.         [
    : G  q! F4 c5 `; q! w9 u1 u$ ^. L9 b
  23.                 '$set'=>['fff'=>'中国国']
    % U4 E- @! g4 j. l$ w# ?9 h
  24.         ],
    9 Z3 |% ~" H' ^1 |) }5 {; y! q
  25.         ['multi' => true, 'upsert' => false]
    ; k% Q8 |! J0 Y" ^' \) f+ K
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    1 G/ p: I# ]4 ^
  27.         //upsert为 treu:表示不存在就新增
    ( ~2 L. k" j+ O& K
  28. );
    . b  S; @9 \+ c4 {) G  H
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

1 @! T$ k* m- |! d8 a6 |  X9 O) `" E
ordered 设置8 d9 I' f3 F% B# _/ m
( L: t6 X) q  R9 ^3 x" D! `
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
# ^6 B# L1 i9 v" ?1 l9 u8 `. W. K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行3 m3 U3 p( @3 _4 |4 v7 C" }  b4 K
$ ?% R: R4 Q; z9 P- j3 e5 n% V
5:删除: Y! o: [9 v; }# j7 p

/ }3 C1 t8 [. w/ L! C- k
  1. <?php9 w7 t# i+ j6 E4 o
  2. 7 N* `& f; B6 e! U& R5 q6 X
  3. //链接mongodb9 f7 L  K3 K0 [& a& H4 s7 m2 W: r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 J5 ~6 q" ], \2 O, b
  5. ) S- z* k6 m- S# ?9 f& Z7 |# ]* ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : C6 U0 @9 [: r, m: C6 {1 \
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 H& E% t/ ?  u" q; T7 K. T3 U) c
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
      ^: c, C* b/ _% y1 Y1 F1 N+ l; E: j  z1 N
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合$ V3 u* f9 A$ W) B0 \8 D  j
  10. delete还可以通过limit设置不同删除方式% G3 a  D% L, u2 }: U, E

  11. . h1 W1 {0 J6 {
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    + J' |3 Y* t  u2 j& @8 P
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

( g0 J6 g5 |/ N; i7 A( F2 v8 d. q
$ G" F5 }; e/ {6:捕获异常. p, I* N! I. [7 Z
- A; Q9 U3 V) ]; A
  1. MongoDB\Driver\Exception\AuthenticationException& \1 b6 K$ }4 m
  2. MongoDB\Driver\Exception\BulkWriteException
    & o) h) W9 v  X: P4 E6 x
  3. MongoDB\Driver\Exception\ConnectionException
    ! h. ]$ X; T% b5 }# `! Z* e  z
  4. MongoDB\Driver\Exception\ConnectionTimeoutException: a$ l; X) Q; A, i. [5 ~
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口1 j0 V9 w9 ^9 Z8 j6 A
  6. MongoDB\Driver\Exception\ExecutionTimeoutException# u5 h6 C( |# s8 {
  7. MongoDB\Driver\Exception\InvalidArgumentException) M3 `3 z' q  v& @& U/ @5 J
  8. MongoDB\Driver\Exception\LogicException/ b1 M4 v8 Z7 S7 `8 i# j
  9. MongoDB\Driver\Exception\RuntimeException; h7 X2 D' r9 C" l- D+ x
  10. MongoDB\Driver\Exception\SSLConnectionException, f/ I/ Z; X1 ?/ T2 O, D
  11. MongoDB\Driver\Exception\UnexpectedValueException
    " X5 G% \# W6 W+ ~5 k% m
  12. MongoDB\Driver\Exception\WriteException
复制代码

7 K/ \) O" v2 s0 h$ K
% Z; N4 R" c9 ]3 d/ A
- w8 h3 H! ^. Z2 g点击查看全部) r& \, u% j" G: C

* G& Y5 v6 q" g" P6 Z* L9 @- c3 x& r( {0 p+ Z





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