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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14959|回复: 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 T& C& _6 K$ j: Y- P( s, t

- O& A5 \% e& }3 d5 a" H下面用PHP7新的API总结一下:! z& z- ~. k. O0 t+ z9 B
1 B1 E& w& k0 f( o. V/ {' q9 l$ P
一:CURD
! t/ B) G+ l  y4 o, D6 T
0 p0 }4 d6 H6 i' q6 P+ o1:链接
, R! R4 m0 a  U2 c, {3 c
& ~' r: }# ]9 J1 k1 H
  1. <?php2 u' f8 t$ f; |& [" o
  2. //链接mongodb
    $ Z- D4 d+ ]8 E
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    - i: G0 N+ `7 ~9 X2 [6 Y2 H2 G
  4. root 用户;123:密码;如果没有密码则不写
复制代码
& s! x- F+ q, V+ ?7 I

0 {4 @* L% \/ C5 Z4 w  G8 w& E2:查询/ A3 H1 k8 Y8 V8 H

" n: Q  ~9 M! P" Y  E. T
  1. <?php) e, n) B5 K( @* Q, Q8 S3 i

  2. & i8 X+ S- L0 ?, Z1 Z
  3. //链接mongodb
    % \5 M5 R( f0 _  z# J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ C  z- F: Z4 ~$ q; K% Q! j2 h

  5. 8 c3 }9 c% i/ s6 C8 B( B
  6. //查询, c$ T9 x0 m; E
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    5 x6 N2 I, o6 n, A
  8. $options = [
    : `, R7 g! A% X7 ]9 L
  9.    'projection' => ['_id' => 0], //不输出_id字段. Z1 g' O( L. O8 O; h7 o
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) b9 f1 P: D" N; [) b8 G
  11. ];
    & {$ S0 l5 C" @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求  D8 l6 E" N  f  B& R* x/ T. E
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    / S: e6 m  z0 H+ W
  14. " n1 s4 ~0 Q8 p- ?2 s  J; z

  15. 3 _0 t9 B  ]4 H7 r, W; t1 M
  16. foreach ($list as $document) {
    ( _" h# M' x* [" I* P1 C- H
  17.     print_r($document); / m9 d3 |6 i/ |9 a+ R' p2 D5 e
  18. }
复制代码

( [9 N& p6 f' C# J6 q查询更多条件使用方法,参考第二节mongodb基本命令,查询
( S- e4 F. U8 K8 r7 P
, p9 c( Z; |3 X/ I( |3:添加: I9 q  \: }% _: z) e
9 d4 I7 Y& l1 g" R1 T
  1. <?php/ }0 m$ \0 `4 G. i- I* K

  2. . n- K3 {% u, B' k7 \2 l
  3. //链接mongodb
    : m6 i. Z; v, @+ K; a) S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 g/ x1 j2 ?- ?" f6 g' b
  5. . p% R- t- j# S4 u* O* L8 Y- p$ x) s
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 Y. g5 t& P9 D' [
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 r7 {- ^0 R7 a0 w2 i+ R
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ; G2 z+ b: }% Z$ j5 |
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ F& ~, o) H/ q- ?8 i# y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# M" h7 Q. M6 c! V
4:修改0 ]% a. X, p* N

1 [, R7 q/ U/ |2 O
  1. <?php
    - c; c# p, H3 |# Y8 U
  2. + k9 s4 h6 w0 o) N% X
  3. //链接mongodb
    ! o8 z8 u- R/ A+ b2 P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) Y) z: Q; g; q' A/ y+ E8 I9 K+ }% B4 r
  5. & j  [9 @( e1 v; ^, Q
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, u9 S( N, r6 \9 H* E, ]
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- G+ R- h" Z+ A- L4 b/ L
  8. $bulk->update(
    2 z) S3 f- O2 {- x
  9.         ['user_id' => 2],* o( O: j) o& m- U
  10.         ['$set'=>['real_name'=>'中国国']
    " X0 H% ?( @4 h  y0 N" L
  11. ]);
    , a8 ?  @6 n5 l: O; t: `9 A; I' h
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,. p7 `# D7 n0 U& k6 _
  13. //1:字段不存在会添加一个字段;3 S+ ?1 B- n# H" x! r1 L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    & B" w0 y2 J* G, }

  15. - p9 u) ?; {$ z8 T
  16. , m+ ~( b$ m/ o6 x
  17. //如果条件不存在不新增加,可以通过设置upsert
    6 J5 S, L4 @0 _+ ~* ?
  18. //db.collectionName.update(query, obj, upsert, multi);
    + ~% E- h- \# s
  19. & B$ j/ ?$ o$ {
  20. $bulk->update(
    + S5 I) M3 g4 L- b5 `6 L
  21.         ['user_id' => 5],' s0 ?4 @) W- d: F% s1 Y
  22.         [
    " C5 }5 @: B* _! W6 ?. V3 J
  23.                 '$set'=>['fff'=>'中国国']
    9 f! Z& N/ z) J; S
  24.         ],
    + X) z4 }- b5 ~* P
  25.         ['multi' => true, 'upsert' => false]
    & x. u) q! y9 @5 t0 G
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ) c3 S6 `& `1 c, c* `1 ^; b) |
  27.         //upsert为 treu:表示不存在就新增1 y4 s4 c7 E  w
  28. );& R6 l, o. i4 ^0 `3 ^% A- z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

$ ?4 P- j2 C% K3 S' M4 _
3 Z$ e! B5 w! N/ q, ]9 Cordered 设置2 l. \, L1 d& P9 o# D& ]

) {; Z- h5 ~$ [( D7 J1 W, H8 U: s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。1 O+ |+ T7 v/ P; a
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 [. x  N3 g, C! R% J
/ K# _9 _+ b3 ^
5:删除
( R; @, L1 i, a  O2 e) I8 I/ `# v; C4 j+ w
  1. <?php" i) S* O% p0 A6 H
  2. / D( Q. Y1 `% \- r: g( O7 T  R6 o
  3. //链接mongodb
    % C4 W3 C- A/ d
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / [) U% F% D9 i7 R* ~3 i% h
  5. 0 q, H% T; [' C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 S# x' D( `0 Q- ^. _, `3 X
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 ~% _2 y& V8 J8 A8 x0 H
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    : [6 x" V4 C3 w
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    2 ]& L* w' ?! P: N, a. U* i
  10. delete还可以通过limit设置不同删除方式
    & G+ L( X1 s% H6 r6 b! ?4 V# p

  11. 6 V& @0 c2 h0 |* o/ q
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 u* K' n! I0 W( y9 n
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
+ b( X; p2 t3 k; }! k5 E! i% B
) n6 y' b: }$ x  E
6:捕获异常
4 F/ I, E& T3 K
* d! i5 F& g! e8 i6 G( j
  1. MongoDB\Driver\Exception\AuthenticationException
    6 _  A# h+ _5 d
  2. MongoDB\Driver\Exception\BulkWriteException
    ; t; H. w$ O/ G- A- R2 {
  3. MongoDB\Driver\Exception\ConnectionException# ^) Y. T1 ]5 `, x9 v# |+ `
  4. MongoDB\Driver\Exception\ConnectionTimeoutException2 A! y( U/ [5 |, y6 ?" R
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( Q& J; `) S$ g$ c. V
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    5 ]* L0 G& V) \' L" \$ E* j' B$ |
  7. MongoDB\Driver\Exception\InvalidArgumentException
    6 E" g) C# Z0 l+ p+ z. {: R8 w
  8. MongoDB\Driver\Exception\LogicException! H1 n1 O+ h) [
  9. MongoDB\Driver\Exception\RuntimeException8 v% U- w$ @, I. B; \! J: _
  10. MongoDB\Driver\Exception\SSLConnectionException
    8 ?1 f" D& y; E/ c
  11. MongoDB\Driver\Exception\UnexpectedValueException& K' H2 x6 R1 R
  12. MongoDB\Driver\Exception\WriteException
复制代码

4 C+ e0 d  Q0 T9 U
# j5 a2 ?9 L3 @1 [% T9 B/ k
游客,如果您要查看本帖隐藏内容请回复
1 o( Q/ G  {. y
点击查看全部9 S5 g" v; N4 D0 E

% v- q1 m, @2 A3 d2 u3 n6 H8 W8 ^! d' [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 05:38 , Processed in 0.056163 second(s), 20 queries .

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