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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14464|回复: 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不支持以前的写法。" M! M1 q4 ?1 E% O8 [  d- \. I

1 O! C! W! B# m- @下面用PHP7新的API总结一下:
9 ~' c+ X( V7 q7 N
, T' Q* @, C2 l$ ]* J, n一:CURD
# j, P+ ~) N) r8 c
! W. K7 ?8 Q3 I& y1:链接6 [. u( T( @9 H: p, \

8 ?9 ^$ h8 ?" A' }' U* J3 d% F
  1. <?php
    . L. x, S( K0 L2 X( T5 o: j& @
  2. //链接mongodb0 D% _1 o( w& ]9 ~  j" _
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ! T8 `6 R  l0 s' J& \
  4. root 用户;123:密码;如果没有密码则不写
复制代码
9 l: I. Y% W( l3 u+ U
) V. V; X: S% g- F  V
2:查询
( Q9 F& r( c* u! Z) z
5 E" t* R! E8 v  _7 W2 _5 Z  P
  1. <?php
    * }# Y7 }7 v6 h9 C! B
  2. 4 d+ k, X& ^0 P: H" O' S
  3. //链接mongodb8 p; N9 v" s. d( M. y, U6 x* Q" ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ E- i1 b5 \( Q: Y/ B5 F( j
  5. 9 I! |! t2 D- o- A
  6. //查询
    " h- w! `" I9 O6 u" ~
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 F, u% Z5 K1 T0 _) z+ ]
  8. $options = [: P! T: _/ f% M7 {- x4 b# n
  9.    'projection' => ['_id' => 0], //不输出_id字段
    : C7 D8 L( _. ]0 J
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- R3 ^7 R/ x8 v+ J
  11. ];! @# \% K5 N( A# |
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 v. x, D( K2 t6 k9 |& o
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合5 v* T6 t0 B" T  o  k/ w/ z8 G

  14. ' U( n# X* s( Q, h& E4 ?# s. a: A

  15. , _* s6 G; w+ l$ b
  16. foreach ($list as $document) {  }1 y" F6 x5 m9 e! n
  17.     print_r($document); , w+ z/ B, U% i9 a/ N
  18. }
复制代码

6 e( {: E" u# d查询更多条件使用方法,参考第二节mongodb基本命令,查询
+ B$ p+ P) R) ~! V, K" ~+ |4 M# c  Z. w- n" T1 _" R
3:添加; ?! g0 x, a2 G
1 J0 |% d3 R0 \9 J
  1. <?php
    * D3 A+ `# B$ c4 x3 D- b- v; f" F  N
  2. * Y' \, N) j: ^
  3. //链接mongodb
    + O$ ^( R9 H, E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    5 Y% F5 _9 x: B3 [1 n: C. C

  5. * z$ \& Q; z# W& c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# D1 |% I- t+ v9 |) A2 T+ n
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    . p  _; [- b7 S/ g8 G
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);6 l9 h( |' A2 G+ e9 `' y  m
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    : t2 h7 O7 L  O; s+ Q! X( p2 o8 c
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

  u- W  T% K9 u8 b4:修改+ a- L! X& V. g, ], L

3 S) C8 k9 @3 u: q
  1. <?php
      V) G' {% Z8 A) s, R
  2. 2 c% v6 l$ A) V$ D
  3. //链接mongodb
    " b9 T" I5 U$ T8 F" K+ i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: ~7 l, O* v7 {+ ^0 \9 w

  5. ) N  ^2 P. c) Q* b. E! d3 F. {' |* ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    1 q4 M4 d! P$ f$ U+ i
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 j$ G. ~0 y+ X- c
  8. $bulk->update(; @2 h! w, p9 t
  9.         ['user_id' => 2],
    9 w  q# A  K' ]' B2 e; d/ k+ |3 Z
  10.         ['$set'=>['real_name'=>'中国国']" E. J  V1 p' W5 _+ X
  11. ]); / ^3 g+ a/ C" {' K2 @: Z6 g0 u
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,# u# a* p' U- ?( d/ R# P7 i
  13. //1:字段不存在会添加一个字段;
    $ h  z/ E- U1 D, h8 K7 _
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    3 Q) U% c/ z1 _

  15. 4 _9 n4 n* [/ g2 Q; x' e

  16. : a1 f; C! b3 v$ \5 {
  17. //如果条件不存在不新增加,可以通过设置upsert
    ! `+ A( n/ ?% @0 k" ?+ S/ B" x
  18. //db.collectionName.update(query, obj, upsert, multi);, z3 L( b% o  ~/ O- o5 Z

  19. % `5 z' h. i9 J
  20. $bulk->update(
    # n; F- E" ^# H# S7 |4 U
  21.         ['user_id' => 5],4 b3 ]( b- j1 K/ N( q" w8 M% p" a
  22.         [
    3 N9 F8 A$ R  i
  23.                 '$set'=>['fff'=>'中国国']( ^( u/ D2 W5 s, H4 v8 M5 ^2 Z3 L
  24.         ],
    / A% H8 T5 ?/ @" j, U
  25.         ['multi' => true, 'upsert' => false] 4 C- d8 Y6 a' I+ \
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& r! n# U1 V. X5 U3 l8 U
  27.         //upsert为 treu:表示不存在就新增- y6 J7 p- N- b3 V2 J9 U1 ?! b
  28. );4 @6 B) X8 p2 f# c9 H' x- W
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ p* h% R! ]) M
- @! N! p- A0 R  O
ordered 设置! Z. N- U% |! d& ~
4 R9 y6 O, \! q: v9 x6 f& _( O0 \
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' H$ G6 |# r' X# A1 S; q, G
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
1 M5 z, w% Y' C
* ?$ F# [2 v4 d- b4 }) x7 T5:删除* Z; |3 A& f' h" _% _
4 z- s& O3 k6 ]  \' P# i
  1. <?php, o5 s/ f" `; f! [, }- ^* b0 V. [* E
  2. 2 c6 {  z' @) o% H1 f
  3. //链接mongodb
    . G! t0 s9 u9 O0 }# w1 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    % r" x1 A" M4 `7 j( t8 K

  5. 5 Y0 P5 L2 z: Z5 ^; }# N6 P+ @/ l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    2 R" Z6 d( `# p9 o$ H
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 ?" E) n" R9 ^5 M7 V5 ]+ y# F
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段, _3 a, S7 k3 h. _) l) W
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    1 R% u5 ^9 Z8 ]! s0 a0 x0 }
  10. delete还可以通过limit设置不同删除方式
    ; N3 k) R+ h. Y% \0 K

  11.   s; ~; w) j% e( k% ]; M
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    3 @, n! c- v# l$ X8 y2 E0 g  x
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" A$ q( h4 W: x$ Z/ X! f

8 J$ k1 X5 \# ~4 _. A! m6:捕获异常
( J" t4 l+ Q* V3 m
* i3 n5 H. s+ L  D7 ]  N. h+ U
  1. MongoDB\Driver\Exception\AuthenticationException9 ~8 R  t7 w3 e
  2. MongoDB\Driver\Exception\BulkWriteException
    ! q' f  `' L/ |. {% T
  3. MongoDB\Driver\Exception\ConnectionException& P. q* M! |% r' Q/ N# p
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ' o, b7 t% d5 o" b" ]
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口1 g( ], X! R8 H9 O1 R
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' Q; d8 k- l! p/ B% [! |2 g
  7. MongoDB\Driver\Exception\InvalidArgumentException( ^6 x/ o" w; e% K: B  `6 y: M
  8. MongoDB\Driver\Exception\LogicException
    1 Z% `! I4 A6 Y  h" r- r4 W! p' U7 X# X
  9. MongoDB\Driver\Exception\RuntimeException
    # T  X2 l1 V. D  B0 i
  10. MongoDB\Driver\Exception\SSLConnectionException, s5 ^9 A" I! L4 y- N
  11. MongoDB\Driver\Exception\UnexpectedValueException
    9 _+ V# b) ~8 T
  12. MongoDB\Driver\Exception\WriteException
复制代码

5 P! x+ ^% J7 \0 o: C7 X4 d% S1 j& v3 t0 x3 ]) c! |5 `  B0 k3 c* [& Q
游客,如果您要查看本帖隐藏内容请回复

' X, B1 a# S  R" S* f$ r点击查看全部! y+ K1 U0 z  J

7 H* ]' a. g' T' X* s' e- d7 \8 e+ S$ i0 t& y, ~$ Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 19:40 , Processed in 0.060346 second(s), 19 queries .

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