您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14344|回复: 0
打印 上一主题 下一主题

[php学习资料] php7的mongodb基本用法

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-24 20:58:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: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不支持以前的写法。1 j* o5 n3 n8 |$ v3 i
( o4 O. h6 U4 Z$ x" u
下面用PHP7新的API总结一下:: U( D9 m9 Y; m* t) ]
8 ^! W* e: M! K+ Y
一:CURD$ _. A: _1 x3 u6 q+ m  }, y: N- b& l

: |/ o/ J4 j  r' d+ B8 E9 O/ ^7 g/ y1:链接- |( d* ?# H2 v2 r7 w

6 A( X% M4 g, Q8 }8 V: ?$ f
  1. <?php
    $ z" z4 U0 R, q7 Y- z
  2. //链接mongodb
      E0 I  p" V- i( p, V
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ! L& ~/ G1 _1 K3 i5 Y
  4. root 用户;123:密码;如果没有密码则不写
复制代码

% }3 w/ v' T7 O9 C+ U: U
8 {1 B, k. D  Q- O5 z8 ^. M: H2:查询* K- J; W( b  D7 Q: Q! T+ G: l% q2 S

9 K8 p' _+ \" \! ?& n6 R' k* [3 w
  1. <?php
    + b& e' Z( t! I7 ]! w1 x

  2. ' d9 r1 z3 C4 B, x
  3. //链接mongodb4 b% O9 T9 `9 X# V7 L, v- P  X
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" }1 B( Z. @7 I$ G9 ]6 S* Z

  5. % }4 T2 o/ H8 y4 J- N; i
  6. //查询) G. j8 l0 ?) D" g! v/ J2 j
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0- y) n; _/ H8 ^, Y  I- P/ S+ g
  8. $options = [( T( n  t4 G- u6 i  ~- X! Z
  9.    'projection' => ['_id' => 0], //不输出_id字段5 A. {/ b7 H8 E9 `+ p/ t& {
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' I  t- ?. M4 }  \0 N+ g0 T
  11. ];
    6 l# j$ ^: i( M8 Y% ?
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    4 b: Y/ N3 q( E9 s
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    0 |# B. }& L6 J, y( _, j8 g
  14. ( B1 o0 `/ s; O8 R4 Q$ w

  15. 3 r" H. s& T6 @6 B' v3 Q, m
  16. foreach ($list as $document) {  g- L8 z$ ]" s! E9 m( T7 I: [
  17.     print_r($document);
    / c4 I, i9 h- \1 F2 Z/ m& a
  18. }
复制代码

- P6 n" x5 Y6 Z查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 ~# i0 ], \" R0 ]  i9 W4 z& P1 M) H: v6 O" z$ X; @/ y4 z; ]3 `% Z& N
3:添加2 ~( ?; e2 ]& |, d
% c, }. a/ r8 T; N/ c5 }* C
  1. <?php2 o' m9 Y( C9 z: t' ^

  2. ) ?  ~- k5 e9 d' G) e! F" b- q. d
  3. //链接mongodb- Z, Q8 e' F+ w5 J  Y8 H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , q& B& K( u8 R" n2 n5 e5 h" p$ ~

  5. 1 @! t2 O" a% w! H
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行. Q/ R$ {& E$ v- s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 d% ?$ n' r( j7 }
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);$ J) k' b7 v& [! j' Q9 p" g, ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);2 N3 @& [% g5 w
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 k3 v1 S% T* @+ E9 E
4:修改
: u2 j" u: a/ H9 R: g$ ^% T
0 {  g8 A0 z2 R3 l& ]- L& N
  1. <?php3 P! N+ B+ H8 i/ v+ k0 S: \, B- ~8 d

  2. 6 x) W( D( \% l- k5 y1 L9 Z. Y% _
  3. //链接mongodb9 @% ^/ m) H/ p: ?- e0 ]7 z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# J" P' t& r# t6 @3 n3 b
  5. 3 @* [/ o) A- [: p& o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 {, O# {+ V  I+ h: s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    5 K8 o  j  R* E- U8 Z
  8. $bulk->update($ w2 F; W! V* [+ z
  9.         ['user_id' => 2],
    $ G1 o5 ]- L4 s) l2 P, z0 M! w. S
  10.         ['$set'=>['real_name'=>'中国国']
    ( J8 F4 S2 S5 j- F9 z& `
  11. ]);
    - d. h3 X5 W3 }/ j" Q) c! b
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,7 ~6 }; F/ m6 T
  13. //1:字段不存在会添加一个字段;1 F/ V7 _9 r: S+ \
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    5 B+ q% b- l  f6 ^' G
  15. ) k3 U' Q/ |; h' |. f+ A' ]9 M
  16. $ a- @! a: R) Q; |+ g% F+ R
  17. //如果条件不存在不新增加,可以通过设置upsert
    9 O1 Z/ ^8 N6 c' A
  18. //db.collectionName.update(query, obj, upsert, multi);( X2 n3 n5 S) ^+ u; d0 j

  19. % Q* F0 n5 h  t8 \5 p2 o% }4 g
  20. $bulk->update(9 M6 A/ F* P3 p9 b& n2 K% l  J0 Y
  21.         ['user_id' => 5],
    ) k7 E8 @, P5 S
  22.         [. }, t6 T6 q" E: j- n4 d  v% \
  23.                 '$set'=>['fff'=>'中国国']6 g8 O3 n, D" R1 O, ]
  24.         ],
    ' t5 c( a; D/ }  ~$ r
  25.         ['multi' => true, 'upsert' => false] , N" E1 j+ N( d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条* L9 ]# \. o6 b8 c5 ^) V
  27.         //upsert为 treu:表示不存在就新增
    / l, Q! I/ x  a8 j  R
  28. );; B# a+ e; k2 r7 y# k
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

" V5 ~$ u0 i; u( c, P1 z# S) \: e4 {  ^* u& W( M3 S* l
ordered 设置5 g" z6 q+ w0 R0 R2 |
" B8 t) S. T9 m( R6 ~" E
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。$ p/ S1 ]# G/ h) {# m( r6 }
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 c5 u7 E- T" v% T# u5 n# j$ `
- e: b0 [5 N5 v" W, |  ~5 ]. E
5:删除0 y1 ]9 S- e0 b% Z
' f. z- `: p# X! h# E& v" b5 u
  1. <?php
    ; R" B7 U* R( O! q! n  `. g) _
  2. 7 |7 o5 }4 P3 E9 i
  3. //链接mongodb
    7 c+ N# }3 ?0 I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ g  d0 [, `( K/ T
  5. 8 V/ j: l2 Q$ T) W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 _' J* v! z' U. f- u1 [3 t1 B" m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 |2 {. [( j# C7 X6 Q; P
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段8 Z# S  S! p  n5 H2 y
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    1 C0 M4 J  `" B( Q0 N
  10. delete还可以通过limit设置不同删除方式4 o0 ~! x& ~6 p. U' N# k4 S
  11. 4 V. o8 _0 x/ U: o, o
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据( x' V. C3 Y$ p+ D( W
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ Y# E& U3 R8 N4 g9 g4 B' H% l
4 K9 n7 B  @! W, [" |! H) @4 P6:捕获异常2 s) _4 e) r: }1 [5 g- q
- C% o7 K( j* b" |/ w
  1. MongoDB\Driver\Exception\AuthenticationException: M8 Y9 P3 y6 v1 b! W0 A+ Q
  2. MongoDB\Driver\Exception\BulkWriteException
    ; o5 s3 g" ?& c8 h: Q2 K7 t: Z
  3. MongoDB\Driver\Exception\ConnectionException2 n/ H1 I* E1 ~1 H0 k
  4. MongoDB\Driver\Exception\ConnectionTimeoutException+ [6 t. ^2 t/ O' q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口' l, n  R8 D" U' f  S. B9 @
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    / t- Y  U4 V* l$ s9 o) P, B8 W
  7. MongoDB\Driver\Exception\InvalidArgumentException
      q2 A' {6 ?  D1 X
  8. MongoDB\Driver\Exception\LogicException+ k. j% O2 V/ V8 ~2 A: d
  9. MongoDB\Driver\Exception\RuntimeException( b% Z" h/ K8 J2 u
  10. MongoDB\Driver\Exception\SSLConnectionException) Y) Z. t4 @# L4 I- \$ g' N
  11. MongoDB\Driver\Exception\UnexpectedValueException& t/ C5 n, K% E" a% A. {. }
  12. MongoDB\Driver\Exception\WriteException
复制代码

) O- ]" Y6 ^+ r; [, Q" q1 ^. @: w7 H0 m
游客,如果您要查看本帖隐藏内容请回复
; h( f6 X5 s3 I. Z8 ^* M2 `9 F* O; s
点击查看全部
4 [& R2 j5 b" l1 i
( P) [+ \$ J4 k1 }0 y6 I) ^1 u8 p! R$ j: `9 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:56 , Processed in 0.057293 second(s), 19 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!