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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14958|回复: 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不支持以前的写法。
3 V7 a3 Z! l5 ~4 L* a+ ^/ a5 k" j% ~4 N4 ~
下面用PHP7新的API总结一下:  f& ?: ]& K  \8 ~. j" G0 n* F

8 e, |! ]% p( t2 C一:CURD. ^* ^9 C/ [% |- p- D4 E

) P3 S# f; A& G" V3 c$ R, j) \1:链接
, s3 i! x. Z& c% i  {8 G- n* u0 X6 o
  1. <?php/ r+ ]. W) `% ]
  2. //链接mongodb% S2 u7 T! `# d$ r6 C# E( ^
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    " ?5 e9 A2 x, S0 X
  4. root 用户;123:密码;如果没有密码则不写
复制代码

5 d. P( d7 G! k# g2 E$ \0 m6 j2 Y# z5 F
2:查询
7 a# A0 l9 i7 @' x4 b; o
2 k$ k" v* G2 f/ `" A
  1. <?php
    : K( o- Y  ~' X! `

  2. 2 C4 m( A- y; l4 ^1 S1 o
  3. //链接mongodb) X3 E& W) {6 u; I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      }7 T6 y* r( M, f

  5. 0 h( b1 {' [7 S
  6. //查询  g1 c5 ]) ~% F& q7 e8 X& V
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0! F  p9 F8 ^+ r# C; P2 U' ?6 d
  8. $options = [
    ; ^2 }) v8 J+ n- e& \  f% S: {+ D
  9.    'projection' => ['_id' => 0], //不输出_id字段% J; t& D3 H7 l2 H" B2 d0 S  H
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 K. G2 ~4 T; E$ @
  11. ];/ N0 |, |% S" y8 B: X
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    / |0 R) k. ]; R" |
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # K2 I: g; c! ~$ m5 I; \
  14. 2 `0 X( t  r$ P/ u
  15. " c5 r* W: k& ^
  16. foreach ($list as $document) {) b2 T- C. _# u% r
  17.     print_r($document);
    ; |3 _! T) i6 S& L. H# w" M) T
  18. }
复制代码
  p5 p  {7 w* O& l( f5 d
查询更多条件使用方法,参考第二节mongodb基本命令,查询9 y, |. S4 N0 N3 i7 |) b, O/ {* y
8 O9 Y) O7 m; ?2 v5 i- `. d
3:添加; u* l$ f& y5 R4 R" n# G
+ y1 U  |2 [7 s, k2 T) G' `
  1. <?php
    0 ~* r; z* f$ M. ~4 @1 N: c0 P
  2. . f6 n) z, H6 S* f' H' g
  3. //链接mongodb
    ) ]5 d) t/ O, L" |- E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ h* r/ `7 J* B/ \

  5. / i+ F8 w' f! J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Q" }/ A; u1 r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- B8 o! G/ W" m0 @2 e( U
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);" Q+ W2 a: z) q; {
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    / o6 [2 {: k. @  P$ b4 w# i, b+ j
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, f5 m; H9 D4 v' O4 @4:修改& \9 p" O1 C( [% E& b( L# \- W# R# j* p
/ x4 d5 D* a# E& T% E, a8 L: L
  1. <?php
    " R0 `7 @; E) W% G/ p

  2. ' M7 u* C: }$ Z) o9 w4 r
  3. //链接mongodb
    + z1 E3 ?. U7 h5 q9 ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 S- _) U; e1 {

  5. # s0 r% G; c5 v
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    0 U' \  m* o3 y: r0 _
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 r7 L& O. w2 e2 c6 u+ G7 n
  8. $bulk->update(
    1 l) a# y) h: g6 R5 U; z2 J
  9.         ['user_id' => 2],
    9 m; \% G. h; ^" }. ~. h
  10.         ['$set'=>['real_name'=>'中国国']
    - ^! k- A1 K/ P: u' F+ R
  11. ]);
      i0 T! I. r0 v, h0 i5 N% w, h
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    % |) Q/ S+ D  P2 M! F
  13. //1:字段不存在会添加一个字段;
    + R. E. |& {/ [' {
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    . l9 W8 m* Q7 O6 h$ O
  15. - Z( @/ q. [  [( {' X
  16. * ^4 z5 ~: ]) |; c5 a. X9 ^! U+ ]* E
  17. //如果条件不存在不新增加,可以通过设置upsert9 n! q& B$ Z$ |$ {% t8 J
  18. //db.collectionName.update(query, obj, upsert, multi);0 I( {0 q, G& d( I

  19. ( O# C. U4 C  O& i/ J& e! `& O* Y
  20. $bulk->update(& T5 w! X, s0 n0 Y; j% p
  21.         ['user_id' => 5],1 k( i* W* x) W$ ?
  22.         [2 g( t3 r1 n$ V5 ?
  23.                 '$set'=>['fff'=>'中国国']
    % ]6 s0 i7 l6 `  E9 a% n
  24.         ],
    ) R2 n6 R+ q- f% p' Z: l' w
  25.         ['multi' => true, 'upsert' => false]
    0 T3 J+ Q# w6 F! L
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    + N% d$ O) J9 M1 ?6 d' E4 q7 L' v
  27.         //upsert为 treu:表示不存在就新增- M4 G0 D3 d1 Q( k  i
  28. );
    " p9 f+ }# |& ?% R9 ]8 s, F' f
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, q6 L, |/ d8 G6 J6 d% Q1 d) J1 V
ordered 设置( c- L& }3 {5 k1 t2 \
* o8 e# y+ {8 ]
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' I- K' j0 O6 m8 q* L9 N5 s
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行. M9 Z  j7 G$ k- v5 E& B) A

' Q8 t) q7 v, d" ?3 U: [3 Z5:删除
- H$ I+ [& P0 E) t% y* T) v
% c( v' O6 W$ o) x2 c2 h8 n
  1. <?php
    6 C& |  f! {- A  C. c' n: ~
  2. ) ~7 j! Y1 ^8 G+ r" f
  3. //链接mongodb
    - C* V6 H" l+ g- d0 J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ r2 \+ n1 g& _0 N6 f
  5. # C! |# N( ]' [3 W2 `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 }2 O/ m8 j) x5 f3 W+ h! P: x1 w& \
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % {# n; Z6 o9 u& ]4 q
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
      r, d5 t; d: o- u5 n
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合# r; {) ~% p+ e: u; `/ ~8 w4 D  C6 C
  10. delete还可以通过limit设置不同删除方式
    1 g7 p- L0 Y# `* e& Y1 Z

  11. 6 T- W) Q( p% f: {2 q
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据  }1 W% v; k8 K# r7 G7 J
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 d# m3 }4 K0 N1 F1 Y2 N

& [# v* n6 u" D) K' Y1 n. _6:捕获异常: _- z4 N: q& M
) _0 H5 m9 }+ O- S5 C7 N0 ^/ S
  1. MongoDB\Driver\Exception\AuthenticationException5 D" D  _) h* C$ v5 \3 I/ p9 K. _
  2. MongoDB\Driver\Exception\BulkWriteException, x$ R4 t% u: s6 D( e! ^0 O
  3. MongoDB\Driver\Exception\ConnectionException
    : L2 u5 L: G* j5 d0 t1 {% m
  4. MongoDB\Driver\Exception\ConnectionTimeoutException3 i6 ?: t* H+ |4 ]  J
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, K6 o* z5 d5 h9 `7 }; a
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    1 r( d3 W( Y. Z  I
  7. MongoDB\Driver\Exception\InvalidArgumentException
    , X, T% k4 t5 G* F
  8. MongoDB\Driver\Exception\LogicException
    4 \; x6 z- Q3 x3 [3 @4 U( d3 M- f
  9. MongoDB\Driver\Exception\RuntimeException
    + c# S6 i4 U3 Y4 A+ x6 r! F
  10. MongoDB\Driver\Exception\SSLConnectionException
    ; |6 r! ~; A& x" ~* P
  11. MongoDB\Driver\Exception\UnexpectedValueException
    / v/ K3 D. y5 T+ C
  12. MongoDB\Driver\Exception\WriteException
复制代码

2 q% y' {& o: Y2 n4 R
; l  X! g3 ?' F$ P
游客,如果您要查看本帖隐藏内容请回复

" Q' S! D5 T' ^! e4 N3 F9 F点击查看全部3 E- x& F* w% P& ]5 o
$ ?1 R* \1 ~) k+ K" S0 p% Q

5 I/ _9 V7 y" t& N' ?/ @, O8 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 05:37 , Processed in 0.054918 second(s), 19 queries .

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