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不支持以前的写法。
- p/ P8 @' r, J  Z8 K: Z5 k; S8 U6 b# _# ?9 {$ A# ?
下面用PHP7新的API总结一下:
) W' Z. Y# z' ~  d2 ]
5 v# Q! ^4 Z/ e7 t( u9 `/ Y4 K- H一:CURD
' E- B$ b3 n% w& |, L
5 a: W( W8 z2 G1:链接
/ z$ C$ n5 [- q5 Q1 u
3 V/ P8 \" N# |5 n
  1. <?php& @. J! a6 t$ @* T& c2 c* r" h% U
  2. //链接mongodb
    3 P- l" C/ r# R( n: L" Q' O8 M9 ?1 ~
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ x, W# O% ]. q* D4 A# B1 y
  4. root 用户;123:密码;如果没有密码则不写
复制代码
/ T4 k6 G) F  i) ~1 J( G
2 `8 x) V7 R, n' _* p- e* v
2:查询* _% k: Y4 ~; M- c5 q3 }- R& P, t
" r7 A7 v" U" O8 g0 Q% e2 E8 Y
  1. <?php3 d0 Y9 B( J9 C* F3 I

  2. 0 ~4 P: _6 s: `# C0 v6 g- c& G
  3. //链接mongodb
    " Q. B6 t" U3 [0 ]' x1 I( Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ N- q# \# i6 h/ i5 H
  5. / R0 x) F6 H* l8 X: C
  6. //查询7 k2 g+ i  H8 Y% R. e( f) @
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0/ [6 c# C- D) N1 [8 H# [7 _3 ~
  8. $options = [
    0 u1 w  R6 y# o0 |2 Y9 C% i. m, z
  9.    'projection' => ['_id' => 0], //不输出_id字段
    3 d& @7 k8 Z! i6 z2 c- w
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    6 Q' J4 Z; N" v( e% X
  11. ];$ f2 x  `$ ^: K6 q' W: g8 k
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求: `- b  D6 Q7 y
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    1 z- P* s2 i; Y2 e
  14. 4 A, Y! k3 C: z5 J( G! i4 m
  15. - W9 O+ g/ h# C& ?& k7 X
  16. foreach ($list as $document) {$ p# P, G* U: u, C) C* k. n
  17.     print_r($document);
    . _) l* r# [% B4 _$ s6 e& R3 ?
  18. }
复制代码
9 o. o& R. G1 z7 x+ k
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ \/ K  z; F4 R. \9 m, ]+ t; C. U- n
3:添加
5 k- X4 ~; M1 ~" W. ~: R) _4 R  \5 S/ ^  f. d& n
  1. <?php  X2 o7 g! d& U' ]' Z2 X& Y

  2. , F+ E' V5 B  i
  3. //链接mongodb
    , c9 @2 x& i* S7 x: A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ I* V# d' [" I  i
  5. ) l. W7 k8 l) K* _9 @! T5 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + n# f4 [( j$ g! @
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 p! R. X( j1 F, R6 k. H2 x
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    , U5 _& m  I: x+ O& L4 ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);' j0 D: g) m/ @5 l) T
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

4 s" g+ c1 h* k% U8 N8 p6 A4:修改
& ~* a  j' i3 O5 ]" N
& ]" W5 X1 v6 ?* S3 F& ~
  1. <?php
    4 ]7 I& D% A' ^" C0 g

  2. ' N4 V! l- H9 e- I' Y% \
  3. //链接mongodb
    " {/ i/ G( C2 R$ B, {) {
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 }6 e7 z6 n# G& q

  5. % b0 X/ l% N+ F2 |
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 [% L4 w$ p5 u! {7 b, ]8 {
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    , J) ?2 ?  \, p4 u1 x8 q* ]
  8. $bulk->update(3 Q/ e' N/ w1 j  }+ x
  9.         ['user_id' => 2],
    * R  n# O6 `( B$ S8 v
  10.         ['$set'=>['real_name'=>'中国国'], p+ m% f2 h: G0 D% P! Y7 G. A) g
  11. ]); ' \* @4 Z8 S' K( O) U: }
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    2 ~. I( Q. `1 i% {3 b2 L5 j+ b
  13. //1:字段不存在会添加一个字段;0 `* P5 P6 ~9 g% o
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    4 Z& ]/ ?/ K0 ]1 @3 ~2 i
  15. 2 i: Q6 u8 }8 ]5 @" ?0 E+ O! M2 c

  16. 0 r5 h- N4 t3 l/ n0 N4 U& I! I
  17. //如果条件不存在不新增加,可以通过设置upsert
    1 g& t% E0 X  p. ^1 \7 T
  18. //db.collectionName.update(query, obj, upsert, multi);. k$ [- S- @# O' H* ]8 w# E
  19. + C3 P' _9 y7 X, c* C/ K* E) d$ v% B
  20. $bulk->update(2 D( k9 r8 D/ s; n) f) s
  21.         ['user_id' => 5],
    7 n* `& w( P1 q5 h) J
  22.         [7 ]6 s2 U5 \6 X6 M$ `4 e
  23.                 '$set'=>['fff'=>'中国国']
    * ~1 t$ l# _/ T4 ]
  24.         ],
    # P% H. J4 D  m! y6 r
  25.         ['multi' => true, 'upsert' => false] 7 R' N/ Z& Q6 B1 s
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条" j# I0 A1 v7 D- ~. F+ W, u
  27.         //upsert为 treu:表示不存在就新增
    2 S" G) O0 M* |- n# G' a' G0 v- Q3 v
  28. );1 \+ I# M( j+ |/ a1 D$ M4 P
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

# M4 f8 f: l, I5 k& e4 y
4 G0 k, V" b$ eordered 设置
: o5 J: o/ O% K# o4 ~: ?$ {- M8 t4 r6 r3 l/ L( w+ ^; V2 A/ V* H
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 e  O' ?5 S- ~2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行$ l9 n+ @# F9 S5 U' E7 H
. \' D+ o- w# b, I6 ~' |
5:删除
  b* t) n# c) z! x# Q) Y( P7 r; y, L7 C
  1. <?php
    " l( y" W1 D3 [' z" e" J* z
  2. . i) F% Q$ W8 @9 P/ G/ S0 F
  3. //链接mongodb
    ; N1 j% [/ ~2 v/ N' [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% j, A$ ?4 W8 E( X% c

  5.   ^6 B) m, f6 b- m% W2 L- A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 V7 ^: p' N* N% }4 u% b+ _  K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    . }4 j$ A- v4 E
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    - ]5 t# }7 U& E+ z8 F+ ?
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    , ^7 j* w* S) d8 r
  10. delete还可以通过limit设置不同删除方式
    ( E5 m* i. l# `/ s- p

  11. 6 x7 P: v# k6 S
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    & M6 x; X# d# `. f+ r
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* j4 N0 l% T! W: \0 \
7 m8 }2 Y: r% T6:捕获异常4 c/ X$ d5 L1 r0 F- I/ _
/ @5 D0 p# _1 P5 _; z
  1. MongoDB\Driver\Exception\AuthenticationException1 B( u& j- R) L: _) T' o/ ?
  2. MongoDB\Driver\Exception\BulkWriteException
    & \. z! ]  s' `
  3. MongoDB\Driver\Exception\ConnectionException+ r! P5 S3 Z) N/ D! u3 b2 h
  4. MongoDB\Driver\Exception\ConnectionTimeoutException3 i5 r2 D9 f' @
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    & W6 x2 Q+ e8 ~* C7 l8 O
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    & c2 ^8 [2 R- g9 P! F9 b
  7. MongoDB\Driver\Exception\InvalidArgumentException" s9 X& i8 s# _
  8. MongoDB\Driver\Exception\LogicException* l% w3 M+ U4 r
  9. MongoDB\Driver\Exception\RuntimeException$ }( l; k5 T6 b$ m
  10. MongoDB\Driver\Exception\SSLConnectionException9 {9 B' c& [0 p: x
  11. MongoDB\Driver\Exception\UnexpectedValueException3 Z1 g. P6 Z6 c2 G/ y% n, C, X/ [+ d
  12. MongoDB\Driver\Exception\WriteException
复制代码
5 V  R3 V' @/ l+ o9 W$ e, @

" i4 e2 i+ |' k
& @9 b. H3 ?0 J1 e5 E点击查看全部, k; k& F2 W2 I8 W  N* z4 ]

% ]4 B# }4 I7 ?: s' o& t6 h% D7 P' b9 n8 h0 j* ~





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