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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14461|回复: 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不支持以前的写法。. m9 [: o" m& n4 z1 G5 v
+ u+ k+ t" G5 J+ F
下面用PHP7新的API总结一下:
, `; H3 o  |* V, }  ?$ Z( ]+ t9 ~' w2 g3 [3 x7 h9 L/ T
一:CURD
3 z& m( u! e( \1 }  \9 U. l, b3 I! J& v/ n" ?6 q5 Y/ n
1:链接
2 P$ @" ^2 M5 T/ f* D% \% b. c' Z* j2 K4 N8 U. H, R& X
  1. <?php: ^/ B9 }& c, A( i: F
  2. //链接mongodb: s6 R6 z6 y1 b: [, }" `' T
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');" t7 W, s+ g7 J- ]
  4. root 用户;123:密码;如果没有密码则不写
复制代码

& C$ g5 D$ C6 d: V2 B. n- [2 @  E5 u
2:查询
! }( |- |; g7 ?2 W/ v
. r1 ~4 c; t( D' [2 R
  1. <?php
    ) s; j6 a) a: |" c; g  y4 j: z0 D
  2. + p% R6 l$ V; }+ ~. r
  3. //链接mongodb
      K, v& a- l/ R7 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 A: L) d! D- Z* I* x6 z
  5. & s3 D2 M+ T8 u3 t' n* b
  6. //查询
    # n3 F+ z3 d; E$ ~1 _( n( r( i! p
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    $ K# [, Y& M+ S5 C# F) R. Z1 B& i
  8. $options = [
    4 O( p) D# `# N6 D
  9.    'projection' => ['_id' => 0], //不输出_id字段
      T( ~. j) n* A* @, f
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    6 A4 R9 p6 U/ E1 ^3 c8 L) U
  11. ];
    $ a* L3 r4 ^2 Q: F
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ! x7 V% G& D  p3 r5 G
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # F/ x/ N# v9 V$ ]6 L

  14. ; c" E, a( j0 m1 \6 n6 D3 P1 D
  15. : h2 p1 f, [6 ~7 N/ I# a8 Y& l
  16. foreach ($list as $document) {3 O% l( t6 n$ d0 B/ z
  17.     print_r($document); 0 ~- o+ l" O4 ]6 _( Y9 I, n$ L
  18. }
复制代码

. g9 V/ L  J9 K9 V查询更多条件使用方法,参考第二节mongodb基本命令,查询; `# E9 C5 I! F0 x& z

0 }. v6 T; {2 T3:添加! ?3 T4 t" o+ a( @2 T- H

) |  k8 F, _) h, x# A% \
  1. <?php/ G. c8 \7 [+ ~6 @$ D/ i
  2. : k9 N) ?5 d* z3 m7 |
  3. //链接mongodb
    ( i6 t* P# R/ ?3 a: \  W/ B
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ }$ S1 f2 Q; z8 P' `0 a

  5. % @" W  _+ W' W2 J1 V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ( @- w% M; j$ ?0 X& \
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 Q  Z' [; J1 `7 H% a5 t
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ) q! m: u5 l% e( h1 d
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);& o# C5 ~, |" C  {; `) [8 y+ T; u
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
& y' _) [6 E& J5 `) O. u+ [
4:修改
) m# y$ w" u3 @1 T" q4 u; X
& r  h- R0 b5 g" r; r
  1. <?php# Z7 s6 o5 h! o

  2. % B2 T2 W4 n2 K- K
  3. //链接mongodb0 B+ u( U7 @+ H% M/ f6 c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% o4 Y2 \& k4 y! E

  5. + P7 _* n, L8 ~  n# C! ]. z# i" {$ U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , o% o0 q4 i# p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    2 x  H) H7 |+ A! ?3 r* K' p! g
  8. $bulk->update(
    " N7 C4 K* U1 \0 e1 {
  9.         ['user_id' => 2],$ z( h  L. e; Z+ Z+ \
  10.         ['$set'=>['real_name'=>'中国国']
    / q  o7 y+ J* C  d2 I
  11. ]);
    ) ~) q+ n. X. X6 a! @) |
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    4 R+ Q' R7 G+ O% \9 a
  13. //1:字段不存在会添加一个字段;
    , X- Z* x" }" Y5 r" x9 j7 b1 a. x
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ; {; q5 u8 f- J! l# L
  15. 3 ?, `; }$ {2 A

  16. ' C6 o% j* ~, ^% _# U
  17. //如果条件不存在不新增加,可以通过设置upsert* `9 @/ c. W! P, D) p/ Z3 }% M
  18. //db.collectionName.update(query, obj, upsert, multi);# T0 I1 Z7 ~1 A, F  y! _

  19. - R& f* K5 u" I) y1 |6 w: L
  20. $bulk->update(% [& u4 U4 K9 `* T
  21.         ['user_id' => 5],
    9 V. A. h# _" X$ [& P  w
  22.         [9 o- V% U& J% n6 f" b6 W& j
  23.                 '$set'=>['fff'=>'中国国']
    # z) b% e6 V" W3 T; i1 K! `
  24.         ],. k, h$ R. ]; E. b
  25.         ['multi' => true, 'upsert' => false]
    # q6 P1 P# w6 @, R, W  P
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    3 S( o0 q7 l) o
  27.         //upsert为 treu:表示不存在就新增9 B& f# c6 q& U" }
  28. );4 S3 }% `. Z* K0 G/ o. f- M
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
' m) t1 A' O* B" |' _

0 \3 V4 D, k# k$ o3 aordered 设置
! ]1 l4 j: [1 W" J1 n) O- [% g. N  p0 A, J
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
  _* R" T1 Q7 h8 b. `2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
' ]4 D7 e5 T1 i' b8 i
7 M7 O2 X2 E- N' u& |5:删除, I6 G& }2 O7 V- B' a8 w
  n: F/ c' Y) N
  1. <?php3 z) w0 {2 ~6 N- d+ \
  2. - p% s! ]" d1 j- M( k
  3. //链接mongodb/ b4 T) O3 r0 P& e( O$ I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 v( w3 P8 A6 Y$ A0 T/ h* ]& }

  5. 9 g5 y* \- @- ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 D+ O* A- J1 J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % B- y0 N8 _, ]' Y3 y! j$ }' a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    % c5 m8 t- Z; \3 M) }1 k
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    % v( K& P2 q" q  f) i; a5 K
  10. delete还可以通过limit设置不同删除方式
    ( Y7 d3 c3 t# O7 `, x# p- `! a4 J

  11. ) n( ?7 F; q3 D$ w0 ?
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    # z$ ~2 j% S) g3 \
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
9 z1 {8 n) R3 Z) t/ m2 Y

8 k# R# O. b! N5 u9 q6:捕获异常
0 g4 q+ P) r  C9 n
8 W- Q/ Q7 h# q/ C8 O
  1. MongoDB\Driver\Exception\AuthenticationException
    ) z9 N: A1 T) b6 i; V* d
  2. MongoDB\Driver\Exception\BulkWriteException
    7 D6 p6 I) B" M6 D, d( }
  3. MongoDB\Driver\Exception\ConnectionException
    & Y3 d# i, F( N; u, q2 e" J
  4. MongoDB\Driver\Exception\ConnectionTimeoutException$ T0 o9 h9 e- c4 c- b8 o
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ' s* B) e6 y) }" Y& W' V
  6. MongoDB\Driver\Exception\ExecutionTimeoutException" s: w& P8 L# ]& B" ]. P
  7. MongoDB\Driver\Exception\InvalidArgumentException* y; d4 b/ Y* {% q' l
  8. MongoDB\Driver\Exception\LogicException
    , n1 p6 w& y" q( t6 f' x6 E4 ]9 R
  9. MongoDB\Driver\Exception\RuntimeException
    + w& I  |; e( e! j$ Y
  10. MongoDB\Driver\Exception\SSLConnectionException
    " N+ P6 N4 Z% L+ v  d0 \: L
  11. MongoDB\Driver\Exception\UnexpectedValueException9 O7 X! a0 W5 N2 a6 G
  12. MongoDB\Driver\Exception\WriteException
复制代码

5 M2 @* N! s% v3 ~0 J- Z
: h5 V2 m. O0 D( z" _7 V: [1 A
游客,如果您要查看本帖隐藏内容请回复
( ?( {% E3 H5 L: z
点击查看全部
9 c6 [5 \5 y: {3 _
3 C2 c' Y: ~! x' l# i# K, U( c0 S  t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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