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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14471|回复: 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不支持以前的写法。
4 F4 m2 H# ~: f
  i( u& M5 I$ o8 ]: n& a  l' s下面用PHP7新的API总结一下:9 Y: M, M1 X) e) h
( L. O- w' N+ B( x1 J: @
一:CURD
( ]8 [) M+ ^1 x5 @4 o5 [* b9 N/ P. ~
1:链接
) Q& K4 G5 a( D: M" ]! v( J* B; R; W$ e' U- f
  1. <?php4 R  {/ O, Z: o3 U$ r! s
  2. //链接mongodb
    7 X, G+ {  r/ X" T' F; I% U$ N
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ! G7 o+ k; I+ \7 Z; R* y5 H! y, n
  4. root 用户;123:密码;如果没有密码则不写
复制代码

3 H: E0 K( t3 \* `& |
& l" E) }7 M3 P3 v3 Y% l  O2:查询; c; J/ _3 v3 v7 F  i; A
  u0 m; G  i9 k) P
  1. <?php
    3 ?$ X9 A0 u' r

  2.   ?% e( n3 s- x
  3. //链接mongodb
    3 h" x0 R7 X* I$ K9 {% o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - o- w) B, a5 O" |5 ~$ u" P

  5. : q* |9 v: ?% ?7 b( G* y# {: B; o# s
  6. //查询% X7 w& s1 l$ A3 w1 `* N' S8 l
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    8 b  U2 s3 G  v% q& N+ b
  8. $options = [
    . a# l6 P/ m3 h8 C
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . y* _, M1 [! d, t8 f' R6 S+ A
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序( A- s+ A2 `& Y! e1 S( N& ]
  11. ];, F. Q1 G) T2 h) W
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    3 |$ {8 V3 @1 N
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # a2 |( Q! m! _7 u: Q

  14. , L0 `7 v8 K! f) A1 D/ u5 K
  15. & C5 J* l1 k5 j9 O
  16. foreach ($list as $document) {$ \: J1 b( K5 Z1 r$ g, h
  17.     print_r($document); 2 @9 P3 ^; Y: w3 r
  18. }
复制代码
: \$ _: Q: \2 g7 E
查询更多条件使用方法,参考第二节mongodb基本命令,查询( j" s# K# H/ t/ c% b/ u$ N; u# T
$ n( z0 T' Y( x( @/ |: x- O2 B
3:添加
+ {: g: V0 V$ X! B( m2 ]$ g+ B8 s$ j* T
  1. <?php! Z, z! M, Z% \

  2. 5 w/ Y9 L8 A6 J( Y: `8 U, u2 j, x. z
  3. //链接mongodb
    ' C, W6 w: ~6 \) \1 f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! H  O+ Q# V) j! r

  5. 7 O; V& M9 U4 o5 p  `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : e+ \9 S* b9 O5 D1 R+ P! E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      `4 c4 @) F$ S5 _2 {1 _+ W
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    % \  }; k) x0 ]! [
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    / c. _8 Y) Y7 R# W1 S( B0 B
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- A9 i8 j! m  n+ s/ l
4:修改& F/ H" |  Y2 V  i* n+ l
% U( t! N! {% W6 G
  1. <?php
    1 M& Q9 ^9 f8 S) x3 x

  2. 4 u2 ?2 \6 U+ |
  3. //链接mongodb
    8 c8 Y( n/ z: z# E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  j8 n# x9 p% G! ?( _& O$ M
  5. 8 O) I, A$ M6 g* a
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ) e% m: v8 i& W& h5 S+ K+ H9 r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + f/ z# w3 T0 `! \. m0 R* X
  8. $bulk->update(0 E' \4 I; m9 E5 Z/ b, P
  9.         ['user_id' => 2],$ a0 s- p0 ?; K9 ?$ `* Q
  10.         ['$set'=>['real_name'=>'中国国']! x, I5 D% ~8 w& q2 ~
  11. ]); " p( y1 R. t" G  q9 h
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    - {5 T  m! v4 I) i) ]
  13. //1:字段不存在会添加一个字段;* q" D9 b% W( i! x
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ) J' r6 w) e, n6 g; p1 K
  15. 6 a* {) [( L2 E4 Z
  16. 1 v1 F8 M- P7 i4 H
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 \6 W/ ~. A& o( X% f' @) b
  18. //db.collectionName.update(query, obj, upsert, multi);) {' G' h" Q* h5 ~
  19. & g8 W1 u  o( j5 P0 h( E
  20. $bulk->update(
    + V+ Y! f$ ?' u) H& g: P
  21.         ['user_id' => 5],
    8 Z# t, `1 x% F' G5 i
  22.         [0 f0 d$ b9 M# p6 K4 J5 e8 M
  23.                 '$set'=>['fff'=>'中国国']
    # J  e' H5 ?9 y4 P/ r! |* w
  24.         ],
    3 n# A9 Z6 m! p7 ^5 K5 K
  25.         ['multi' => true, 'upsert' => false] 5 W) b  k/ r- }& v
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
      w5 B& X7 |& X6 W# o* |  A
  27.         //upsert为 treu:表示不存在就新增. m. W- i$ D$ R) H
  28. );
    1 A. j# _4 n6 W3 _2 Y2 X9 F7 U
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
8 }; ~5 Y2 i$ V& g4 x
" x8 k% e  `; p4 E; ~' N
ordered 设置
7 M( `5 V" V8 i/ M$ m& q) u& r' z
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 L6 {4 j9 w! S4 B/ F: a) C
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行2 u2 x4 d' Y, c

4 T: X& S: R$ F; V+ k' C5:删除
2 v, E" m$ X8 ~4 q! [
9 l$ w7 P$ O0 M+ e. ~
  1. <?php
    - y$ I- N3 X- o% f4 O1 W" O

  2. . x$ A* Z6 `# d, N0 Z& c( o
  3. //链接mongodb! j. v: v( w5 y8 J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    5 @* z* x3 K& Z/ u# {$ k! y

  5. : i* O# b  t$ {' g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; V; Z9 q  }% N4 U+ d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ b: ~' g; Q3 K; Y3 S% a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    % b; p7 }6 w  f) X% H% r% q* _
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    $ {  w$ j- F( G; d# v; h8 Q
  10. delete还可以通过limit设置不同删除方式
    4 H! l' U/ I; Y. v8 Q1 d2 h

  11. % S3 n2 L3 n. t# A: O; w/ C4 w  l
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据% H4 E+ ~7 Z0 G3 S  H2 E  w
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 r3 e1 m! E7 o' g! P  l" L9 H( c
2 a* L" U( s% f0 C, S
6:捕获异常
' s; P' D: ~+ h9 N& K; F, h% g/ ?9 N7 q7 M
  1. MongoDB\Driver\Exception\AuthenticationException% ~0 _! ?2 Y1 u$ n; h: @
  2. MongoDB\Driver\Exception\BulkWriteException; i; \0 }) I) C) y7 ?
  3. MongoDB\Driver\Exception\ConnectionException
    6 P0 Y' j7 [5 Y6 Z9 c: o
  4. MongoDB\Driver\Exception\ConnectionTimeoutException3 Z8 L1 O3 G2 j
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! L* k2 g$ C/ S: {6 X* k( I
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ) [2 J, L5 P9 `' v: A; q9 A
  7. MongoDB\Driver\Exception\InvalidArgumentException
    1 o) t. }+ X6 l0 s- G$ W% V
  8. MongoDB\Driver\Exception\LogicException
    ' ^% L: T+ ?1 @6 t, F* _- w
  9. MongoDB\Driver\Exception\RuntimeException4 w. q( ?. d: F% B9 E5 z
  10. MongoDB\Driver\Exception\SSLConnectionException8 M  O# B1 D, Q5 W: ~% k8 n( L
  11. MongoDB\Driver\Exception\UnexpectedValueException- w) _6 t4 Z3 o) c  l
  12. MongoDB\Driver\Exception\WriteException
复制代码
$ [8 B8 Z- h& o3 o% Y1 a

4 P( s; F) K* K- z) q2 [
游客,如果您要查看本帖隐藏内容请回复
+ M( K0 g% s, A4 h4 @& [+ @
点击查看全部* g+ Q& T' }. V$ i

; }* ^% Q6 A; b3 v/ k5 w1 C1 m" j. A# }$ U* u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:34 , Processed in 0.064228 second(s), 19 queries .

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