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不支持以前的写法。  B6 V3 h3 f8 \( y2 W( C
) @. T/ P: \' ^4 ?/ s" O
下面用PHP7新的API总结一下:
' z# k2 L/ i( @0 D( p) C( X3 V+ ]0 G: V3 n
一:CURD
% C- s6 F% H) l, ]9 o
' V% T) Z5 X8 d+ Z5 ]9 j8 d1 C7 O1:链接9 Y1 R+ [: ~. _
3 n/ i. i# L6 H( R$ n7 d" ]
  1. <?php
    & _  E- h  l; r* h7 H4 d
  2. //链接mongodb
    2 I3 L* D0 |! `3 m0 X
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');/ R& u) B+ j! A6 ~' k
  4. root 用户;123:密码;如果没有密码则不写
复制代码
# h+ @: K0 j5 ~3 e& c

1 P8 N. C" e( Y) M4 g1 y2:查询. a  ]: d/ [& j

- U" Y, \' m1 e8 g$ ?
  1. <?php
    " v# K  ~9 O9 U9 `+ p! h. A

  2. 3 z% X- ?6 ]4 j8 _+ g' J
  3. //链接mongodb- c, B9 k$ l+ D% e6 Z' x; l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 B+ H( }- y4 J* X, ]! C
  5. 9 _6 i5 H6 y5 ]+ J
  6. //查询
      l$ Q7 \. X; b, q  D: w: \
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    0 t5 O1 A0 G5 W4 D: U( U- c9 w& C
  8. $options = [% q& c5 ?* R1 j
  9.    'projection' => ['_id' => 0], //不输出_id字段
    4 ]5 p: _$ s: }' {9 R& d5 M8 E
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    ) ~/ K' l) C# ]7 r/ q
  11. ];
      L7 [: m& `  k0 P% J
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    2 \/ F" l1 P# Y% j' V' m$ I
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    / p. S; |: M% l9 `

  14. # h8 i" R% q* r3 i

  15. 4 v+ \2 ]; B" i7 m: K2 H
  16. foreach ($list as $document) {
    + A7 Q9 H& ~$ E! ~# B
  17.     print_r($document);
    ! V; H  [: L  a9 O: ]9 F+ E# E2 T
  18. }
复制代码

0 I+ s9 O6 o+ j1 A" C查询更多条件使用方法,参考第二节mongodb基本命令,查询
- M* v/ ]7 ?: k: T/ j" S
. g* K' B8 u4 {" g3:添加% |/ Q, C* O1 e* g

" ~9 s# ?1 Y3 ^% \) p
  1. <?php/ K' T- B; @' \3 }0 w- x- S; B

  2. 1 ~& o. n# U' y6 ^1 S
  3. //链接mongodb  a# m3 A& J4 Y! X! \
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( X& O& @5 \9 N

  5. $ L; E7 `! U* ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' s9 x$ x4 Z$ L
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ g; ]8 u1 g+ v4 K, V- Y9 p
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);( R4 z6 B( N" N; x  q
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);5 Y+ d2 Q9 b# G4 n& L, ^
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" V% r3 B! u0 e  o
4:修改4 J: z- E: K0 N

" Z! y7 n" l* q, t% N! R8 _: K+ m# Y
  1. <?php$ r$ _0 [! U0 I9 r5 z& J' D
  2. , s; O0 Q! s3 {) P# S* b
  3. //链接mongodb
    ' }$ Y! K3 x9 `8 D' e1 Y; [3 o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; Y2 o; ?; L0 K# M6 C

  5. 0 L, X+ J) Y0 w) X2 L, j7 S8 w1 E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 M5 x8 L, d( Q- \( {
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; X; E" X; S! ]: W
  8. $bulk->update(
    " K" R% q$ G5 b( U" @
  9.         ['user_id' => 2],
    0 Z7 I7 o0 U1 l0 S' n5 Y- M; a
  10.         ['$set'=>['real_name'=>'中国国']
    6 k" h4 M* M- R2 R
  11. ]); # g' B$ ~: R" d! _4 {
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    0 }9 Y5 g  m2 a. P# A
  13. //1:字段不存在会添加一个字段;! R0 B* P- B9 }
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert* x; l6 h; F7 m9 b3 l0 j  z" K( G
  15. ( q+ Q0 U- |6 F6 w6 J0 ~+ I
  16. * j& a1 _" H/ y. {0 y) V3 ^+ ^* B
  17. //如果条件不存在不新增加,可以通过设置upsert' a8 F3 z" a; ~1 o7 Y
  18. //db.collectionName.update(query, obj, upsert, multi);) |# H3 f- z. [

  19. ) a! q. G4 n6 N3 M2 f0 I
  20. $bulk->update(
    8 c- B, L. z1 r' @% n9 b
  21.         ['user_id' => 5],! j; V6 K1 Z  n+ F* ?, q! ?3 V8 Q
  22.         [0 P, A; s6 q' s9 m; r
  23.                 '$set'=>['fff'=>'中国国']
    8 C1 H! R% _: E/ B9 e. @  H5 s
  24.         ],
    * ]5 u0 ]! J3 T8 ~
  25.         ['multi' => true, 'upsert' => false]
    % o+ k# e1 U3 g! c+ d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ! Z- U3 ~1 T  t* t7 y  I/ A; }
  27.         //upsert为 treu:表示不存在就新增
    , L! U+ @7 A* r" U
  28. );3 `0 H0 l0 Q  x8 S0 {1 r
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* u) @. G) B. h1 Y7 ]
5 g/ |, |& z8 m# F% `3 w& e+ Q! w0 c
ordered 设置
/ X* G: G: y2 x1 B) I& X" ~& U' u% \: M5 |: W3 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) @0 v* @: r* L0 j5 r; g1 f2 Z2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
  W% F4 E) a; A& {+ w9 {2 ?  S/ O2 t7 u8 X( i" U
5:删除
+ M+ |! P( m6 R- \3 s" Z& Z" u! i
  1. <?php
    6 ], Y$ o. d3 ^( c  W
  2. 2 l: F, ^* N! M# d% b/ Q1 u
  3. //链接mongodb
    * `1 d" `$ Y4 Y' M7 F+ S1 A( f, i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" ~" }& u9 M, r8 |

  5. 2 j( }  h. R: L$ x. I* H5 C# Z3 W4 X3 P
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    $ {( I6 `$ A( u  [) ~8 J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 r; a, ?3 r# a4 b
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    & ~% i# D3 ~5 E/ D% H
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    4 {. f' Q) o  y/ V) P4 H/ L& B7 d
  10. delete还可以通过limit设置不同删除方式
    * k4 j0 U8 _8 c) J) w
  11. / d; }* J7 M& U
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据7 d, l/ T7 t( c9 |: s+ {/ H
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

. b+ E2 [5 |* b) N1 h$ Y4 B: P# E
. C; @: I% P, ?, @6:捕获异常  H, P' {; z% F
% r3 Q$ m2 C, d
  1. MongoDB\Driver\Exception\AuthenticationException- N6 L% m; z* O! Z' ^, p7 j# P* S
  2. MongoDB\Driver\Exception\BulkWriteException
    ) d$ ?# g7 ^- n" l: P  Y/ u( R5 `
  3. MongoDB\Driver\Exception\ConnectionException2 i' I. w: R0 h. E# A
  4. MongoDB\Driver\Exception\ConnectionTimeoutException8 O2 ]3 f. ?: A# n" b* P: F( s$ X9 Z
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口7 ]( T# `; C  n4 s
  6. MongoDB\Driver\Exception\ExecutionTimeoutException/ }4 y) @  Z& n+ W' w* i4 T& V  y
  7. MongoDB\Driver\Exception\InvalidArgumentException
    $ q5 K8 @( o2 `. d
  8. MongoDB\Driver\Exception\LogicException, f% ~! j# y4 M  I
  9. MongoDB\Driver\Exception\RuntimeException
    0 u' ~* I: e* t
  10. MongoDB\Driver\Exception\SSLConnectionException
    ( g9 m% y8 o7 e: R+ W
  11. MongoDB\Driver\Exception\UnexpectedValueException
    # t  V! A  w! x& r. E  A  C- p6 ]
  12. MongoDB\Driver\Exception\WriteException
复制代码
' r. A  G) `/ I4 N" r3 x( j

1 V$ Z9 W/ X8 n" O- \& T# s
5 i5 G8 n  r. M( F3 Z" d点击查看全部
8 \# s7 a! t7 _
3 b) ]" @" I* k7 ^
* u) q  s( ?, W# U8 k# F  w9 w




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