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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9912|回复: 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不支持以前的写法。" s5 s" _- E* m$ a; z: n* Q: q

; \3 C7 ?( K/ K. z& F/ \7 ?下面用PHP7新的API总结一下:3 d" Q& C  R  w

1 F1 A+ ?& h' v/ T, f一:CURD' w9 O* x) n% o" G9 M7 n* l
9 s, ~3 S7 h& c# l
1:链接) B2 e. G: G; p  L
" Y1 d% B4 P* J, F9 O8 a3 a8 Q9 H
  1. <?php
    6 d) V: Z  x' X7 U: v6 T
  2. //链接mongodb
    / G. r) V" H' g) o
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');9 g% M3 B& u4 R7 u) l# R1 ~
  4. root 用户;123:密码;如果没有密码则不写
复制代码
3 p( W# u+ {& M: ~4 j0 [% y/ j

0 O$ w: Q1 w& l0 I2:查询6 P5 b! q$ U1 F

5 t' w; x' p% N. R1 E; i& h
  1. <?php
    6 ]4 O& \+ a, l. }5 f; ]
  2. 9 _+ n7 R/ _# `  R
  3. //链接mongodb- R( }3 l( B2 Q7 U/ B& s% g! m; J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 h# R6 U8 D4 V
  5. : V3 o- }$ x& c$ i9 U6 a# g1 ?
  6. //查询& K& ]- L) p1 @+ [) `3 y. V
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于01 i7 h1 n( d9 Q) B3 w
  8. $options = [
    / g. ]& g' g9 L) O3 J
  9.    'projection' => ['_id' => 0], //不输出_id字段
    8 S% G: n; t' r+ D, H9 ~, M) O
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    1 s2 O6 n  F" D3 a" G( J7 x
  11. ];
    1 t6 R, o6 T4 [; g" h
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求% z2 ]6 v+ _2 e1 D# q# }3 f
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合, ^6 @. W! {' ^# N# F4 v

  14. % E/ @/ d$ n' R8 c  B

  15. " u5 R, H: T8 ?& M
  16. foreach ($list as $document) {+ H8 o, X$ h1 o! Z
  17.     print_r($document);
    0 E( Z/ V3 a5 G, I( [. B( `2 |
  18. }
复制代码
1 Y- y6 n+ o, C/ M
查询更多条件使用方法,参考第二节mongodb基本命令,查询2 ~2 m8 ]1 A( H7 C. R1 X

7 w3 q# Y' q9 V0 g3:添加
" c% d! |5 i$ z; V
% T7 I4 L7 b  C
  1. <?php4 V. v. Y, t& ^9 ~+ g% w
  2. ; i' u6 o, O; }% J5 C1 `8 O1 X3 S
  3. //链接mongodb9 r1 v7 ~4 y' I3 j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 }- X2 d- G3 M8 I/ F. s

  5. ' j$ k- i$ g$ W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    - E+ r0 j/ d8 {: M; s0 J+ {( `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 n1 t) y  I, N. g. ]; p
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);; Z$ ^+ p  F  Q) x* ^% @" S% a
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);8 ]$ A2 L$ H& o7 D: v' y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, \. m7 g( E" V# p; O( {8 D
4:修改
' I* H; ]8 X" d- v7 C  Z& m4 n7 m& g0 |! @
  1. <?php- i5 o4 H: Z& G8 L' ~: h5 q
  2. & u1 ]! o$ W& D5 @4 P  b& u
  3. //链接mongodb" E$ q8 C3 g4 {' V0 _& p) e$ i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# R) H8 `# w* y( t
  5. ! _* M$ @$ p4 e) e  V  \
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 `. h6 U( P; s! ~
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " }6 x8 i5 [# l* I" \! k
  8. $bulk->update(
    1 m; P, ]: F, p( d4 Y& x, D( Z( M
  9.         ['user_id' => 2],
    9 i+ a3 _. Y  x8 U& q
  10.         ['$set'=>['real_name'=>'中国国']
    ; m1 D: A+ K5 j- j7 f. B
  11. ]);
    + J! l, u0 {, i' |
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,/ {& g9 }! `9 g! }4 P
  13. //1:字段不存在会添加一个字段;
    $ v+ G& d' o- D% f9 L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert8 y! ?. p- e$ O1 c

  15. $ u" M# P) M- o5 E+ X
  16. 8 g- E* O% |0 z1 `$ _
  17. //如果条件不存在不新增加,可以通过设置upsert
    * r& C: ~5 l6 I3 J; e; t# K. d" D
  18. //db.collectionName.update(query, obj, upsert, multi);
    . b9 w# T& p% d. b5 G5 O; j
  19. ' f* v3 f. M6 u9 l5 y- a
  20. $bulk->update(
    ( c# A( s# K1 A5 ~
  21.         ['user_id' => 5],
    $ @7 s$ n% M; v. A' `
  22.         [8 E, K$ m9 {4 {2 [" f" j
  23.                 '$set'=>['fff'=>'中国国']
    5 _" j9 [$ v/ o. k- H4 @, m
  24.         ],
    5 y8 j- c/ r4 f$ j$ R# T5 M0 U
  25.         ['multi' => true, 'upsert' => false] . d& x9 G$ `+ |1 y6 p
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ) {9 R( F5 h" N  u+ E$ x  L
  27.         //upsert为 treu:表示不存在就新增0 P/ E" B' K4 h7 T5 u
  28. );
      p. R- a, u6 x  u6 w$ D/ O0 }! h
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* W4 C  p9 _7 D8 _& a* m1 K+ d
9 H: ?. U) m& x# v* f$ Kordered 设置
+ H  k. j3 F. V- }" c8 L( `5 |! x/ S8 N6 k
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。4 f  k( X' i' e' B& D4 e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行2 S; j* f- I8 `4 u( j

( @7 r9 Y' B- N6 p2 U3 w5:删除
. f4 X& C6 Y) Q6 I9 U7 `" ^2 T" @  [
  1. <?php! K7 c' ^9 @, g7 |9 @2 ?) I

  2. 7 [( e8 x" u& A% ^' y
  3. //链接mongodb" U/ S$ F& R- D; O
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , @" M  D( T1 b& S
  5. 4 Y3 ]/ }+ j- |& w+ n8 E( `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 f! J" G3 R) K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % ?: s/ X3 V2 L3 W
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段; k' ]; J$ M/ [4 q
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合( `' b5 D8 k* t* r$ o5 B! O$ W
  10. delete还可以通过limit设置不同删除方式- c& A+ N' H  X5 V  I" s+ h8 v

  11. ! P- o, ^# n  I' C! U+ d4 M
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    5 j/ u* ?8 ]- E$ O2 @
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
5 z  G( ^! t8 u3 Y

" B7 v+ y  M2 }' t* ?& F( y. r6:捕获异常7 U' [6 f" w) O5 ~% L/ ~7 A
0 X% l" W# M  y( F& k
  1. MongoDB\Driver\Exception\AuthenticationException
    / Z, j- ^( L! G+ K% V7 W4 K; c: F
  2. MongoDB\Driver\Exception\BulkWriteException5 Z& m1 k# P' j0 G/ r$ P" B* _0 n8 C
  3. MongoDB\Driver\Exception\ConnectionException
      [7 r3 J  W2 M# K, c$ c- V
  4. MongoDB\Driver\Exception\ConnectionTimeoutException9 {% G. G7 Q9 W4 v+ N! X* |
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ( N( E4 x5 B/ Y  r% \
  6. MongoDB\Driver\Exception\ExecutionTimeoutException3 u; l4 d. m2 ^+ K( o( m
  7. MongoDB\Driver\Exception\InvalidArgumentException; z5 V; I8 K2 A0 I& h% O
  8. MongoDB\Driver\Exception\LogicException2 Z, }1 M/ I( F0 z+ U
  9. MongoDB\Driver\Exception\RuntimeException
    * E. K7 g5 x6 r# g; K% f8 S, i1 E. R) S
  10. MongoDB\Driver\Exception\SSLConnectionException2 r+ K# r+ u! a& f7 `: J
  11. MongoDB\Driver\Exception\UnexpectedValueException  K' z' T* l0 e1 n7 p* U
  12. MongoDB\Driver\Exception\WriteException
复制代码
! w: \6 ^4 `" i1 b# J
* \9 l" c: ]2 G! Y  x- Z) K! ^
游客,如果您要查看本帖隐藏内容请回复
; a* U2 u% m8 j7 m0 W
点击查看全部
2 Z+ E; }7 s$ ~6 _( I; {+ d
0 r: t( K  M( G2 F0 y( b3 q7 [3 ]; T- m8 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 01:10 , Processed in 0.119960 second(s), 20 queries .

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