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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14455|回复: 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不支持以前的写法。
% L. s' A) o1 t9 }9 i, o; e, n' ]. U5 Q- w7 @# H3 H
下面用PHP7新的API总结一下:
) i- H5 e* ?: O8 m) b
% w$ j- \6 S. I' m+ ~- H0 ]一:CURD
! |- R2 o4 W: h5 ]% k$ ?
$ I5 v- r; s3 Y, N2 t1:链接$ C) C3 P6 H5 |6 w
# J# P1 f& T' `4 e3 l# G
  1. <?php; ~! w8 J* P& @7 j0 H
  2. //链接mongodb4 p) H3 r, t8 M$ t) r
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    , g4 R8 m9 v$ L- _5 J0 }4 ~
  4. root 用户;123:密码;如果没有密码则不写
复制代码

& ]4 x1 H2 X+ w1 y3 R
" y4 [; v3 S# G8 f; |" t+ r1 d2:查询) v- C- T! r8 a6 ]- `

& o+ C: m( }$ o" y
  1. <?php) `( e7 S; ^- C& G1 l9 Z1 M9 y; i5 e7 [
  2. 1 i+ j/ D( w4 v
  3. //链接mongodb
    ! y  R; [; t/ a- C
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ G6 w+ f1 Z2 l5 Z8 y

  5. ' G! ], |! g: U" S7 F6 s
  6. //查询
    # H: g/ z7 y+ v$ c  W
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    6 h  c! p9 \  @- R6 S
  8. $options = [
    8 R( \$ M: s9 y* m2 M
  9.    'projection' => ['_id' => 0], //不输出_id字段( n* w# ~2 \5 N. ]' n  R. p8 G
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    , k5 S" C; @! G$ D
  11. ];
    # p, O' c4 w5 {) h
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求  c. g) }3 X( h( f; m6 F
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; r. g/ D' N1 X. y" p
  14. 7 M: _  p* O, p. h
  15. / h1 e! _: ?; _; u  P
  16. foreach ($list as $document) {
    / T% o# R( r, o/ X, N4 s
  17.     print_r($document); ) G7 {8 M( U' H0 t- L) p
  18. }
复制代码

" J9 ~1 l, _+ g' p  O" p查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 _- Z& O5 p+ i( n/ |+ c/ m- ?* ~: {0 [  `% U; H0 i7 ~( ~
3:添加1 i/ K6 b* H+ b% T8 k1 N2 c
2 a" K, M4 K+ u1 I* ?
  1. <?php
    & i7 y0 X4 b0 x3 h) E

  2. 1 J6 T( l+ K& t! a* p
  3. //链接mongodb0 z6 K/ N" q* M5 l: R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - Q" T, t5 W% h' @5 t
  5. 3 `* U1 I0 A/ Y+ k' v3 g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 r3 s% e, v/ n* x" }3 S
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; k5 N3 x# Q+ C2 i4 r4 Z
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    & X( t6 @2 j% V) ^) y
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);& V; [7 Q, ]( I: R  g
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

0 P& I6 t& |: t2 X! Q( P7 W4:修改/ F9 g9 u: q3 c

% t+ n; ~) |: Y  {* U4 d) `/ Z
  1. <?php3 p5 ]* I5 m, H: u3 K
  2. 3 l" s$ S; F( i' j
  3. //链接mongodb
    ! _8 y$ X3 v- \4 `' ^" T! K; e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * I5 T. S+ x  R/ K& i
  5. : i6 N4 y% c6 D
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / p! U" G5 A' n3 g! c
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 ^: X5 u6 {6 S
  8. $bulk->update(+ `8 F2 b: w; W* M2 g
  9.         ['user_id' => 2],
    5 f7 j) X; Z3 a6 N+ C
  10.         ['$set'=>['real_name'=>'中国国']
    * F9 i. J$ ^! ]$ s$ {, N9 p4 d
  11. ]); ! W% P# [" r# ?0 J. K
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    0 l8 P# \' `! o, L
  13. //1:字段不存在会添加一个字段;
    & B, n& ?+ N. }( q
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    # j' V4 n# ^, `9 L6 j. x- G

  15. $ \1 ?3 I! I: ?6 \+ D( x

  16.   ~* k. v& V/ j; J
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 w8 w' ~& l. ?
  18. //db.collectionName.update(query, obj, upsert, multi);1 o1 ~9 x+ q/ w9 r5 x  O
  19. + r7 P+ X8 a; o
  20. $bulk->update(: d/ A' w0 z$ p& l& N' M% }
  21.         ['user_id' => 5],/ _$ @+ G+ `! G  a" n
  22.         [
    0 w: I& \3 Z6 i$ w3 \
  23.                 '$set'=>['fff'=>'中国国']+ Y, m' }& C5 |, b% c4 K
  24.         ],
    9 Y3 G2 @9 t& s
  25.         ['multi' => true, 'upsert' => false] 6 q, S' N# l2 u
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    0 b2 |1 W2 \2 Y/ F. ]
  27.         //upsert为 treu:表示不存在就新增7 O) l! x" u  M/ r% g
  28. );$ f7 l- W. W9 |+ U  l5 Q; D
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 K$ I& J1 k; i* W6 J
# Y/ [0 a" D5 X9 Z: A' ^& x
ordered 设置
: C; r/ i6 b: ]3 c/ l: W; W4 {- H% P7 M; @! c% q- j0 F! t+ r
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。) L% S/ J: D# ?7 n- Z9 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行) J/ j( u$ X$ c

0 R' Y: f+ J' @7 v: n5:删除- Q  r* u: \# A$ F1 V
9 W# W6 y* V  G$ E/ x5 `( T
  1. <?php0 q* x( y% r9 a/ [
  2. , r( }+ L4 t" Z- I3 g
  3. //链接mongodb
    ( i% K0 W6 E, `9 }0 z$ o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 X# s# X7 ^7 t( E2 {+ e$ j; z
  5. # U, ^) o. Y$ U- A& {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 s8 U, t+ g9 Y7 a6 m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      J2 c1 M: U0 m$ L: w
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 p5 F1 S6 X. L. n! T& F' L1 h  Q
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    6 o& u9 [$ T0 u2 ^  I5 q2 S6 Z
  10. delete还可以通过limit设置不同删除方式
    , M7 }. J* i) O9 ]. _7 ~
  11. 2 P4 c; {$ _' d$ D
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    " k% E; N8 A1 O
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" d; W2 W( e1 X: }5 [" w9 _' u

+ \. K2 C* i5 W4 G& ~; l1 Z& F2 Z6:捕获异常4 Z( ]. R1 B$ F# }' T; f5 N4 D

: I! e7 x6 H, ^6 S
  1. MongoDB\Driver\Exception\AuthenticationException, r( z2 e! b8 u( b
  2. MongoDB\Driver\Exception\BulkWriteException
    9 G6 Z( ]. U, S* B, y
  3. MongoDB\Driver\Exception\ConnectionException# U7 y- b( G* _/ N
  4. MongoDB\Driver\Exception\ConnectionTimeoutException, J; ?; V% c9 J; A
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    4 Y; n5 f; b# P3 t8 j* ~% k
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    $ b) ^1 \; l& D6 {) o4 _
  7. MongoDB\Driver\Exception\InvalidArgumentException1 g. k( S. ]; o
  8. MongoDB\Driver\Exception\LogicException9 m! K$ P4 A9 ^( X7 Q& T* d- F7 F/ X
  9. MongoDB\Driver\Exception\RuntimeException3 B! q3 }9 X8 ~, A) X# Y  @4 r' u
  10. MongoDB\Driver\Exception\SSLConnectionException$ u$ u" I9 r+ J6 e$ e- H0 _
  11. MongoDB\Driver\Exception\UnexpectedValueException) k( r! t$ Y: U+ ?1 }
  12. MongoDB\Driver\Exception\WriteException
复制代码
5 ?0 F( u" F; V$ H' B- o" o
; M# Q9 A( M0 a' d
游客,如果您要查看本帖隐藏内容请回复

) y, Y4 K* l& D1 ~: |点击查看全部
3 l4 x% i6 w+ p; G9 i2 r  R0 m1 q8 b
& }' g8 d! a2 x. D3 X! R; R3 X' \# M! o7 ~9 V5 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:21 , Processed in 0.051218 second(s), 22 queries .

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