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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9935|回复: 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不支持以前的写法。  F" A* _( t" W5 [/ K
' k7 f. L* y8 h% V$ k1 W5 ^+ ]
下面用PHP7新的API总结一下:$ X3 F$ J6 p, O' v% k
3 Q) W7 a1 V. V$ G1 O
一:CURD6 h: L2 y2 j" N) N+ t4 o
# k7 ^! V$ \. H$ @: W6 C1 t
1:链接
! J( ~/ s4 W. z2 W3 }8 A. I
& J1 K9 ?4 d) ~# d( }
  1. <?php
    4 Y' _1 `# [- E2 l2 `
  2. //链接mongodb
    7 J9 I* g; f  t4 g
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');, W% m* H; T0 D
  4. root 用户;123:密码;如果没有密码则不写
复制代码

% I, u7 T% [* e. ]( v! I4 z4 o7 h: u. T' `3 r
2:查询
0 Z) ?0 X- l5 {( i$ e1 b: Q, p: s$ g3 l# e
  1. <?php
    ) e5 j) P2 `1 c6 }
  2. ( m: z5 q- a0 z: G0 i- O0 N
  3. //链接mongodb
    4 z, x3 q. F, O7 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) F8 S9 }8 J1 l7 i9 l6 p  @" q6 ]+ Z

  5. ! [% N* h) y3 ~" k+ ?
  6. //查询; L2 t  b, y  C
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于06 o. E! g- {  |0 M
  8. $options = [
    . X+ o; J- _" C; N1 A# T( Y, C/ j
  9.    'projection' => ['_id' => 0], //不输出_id字段+ m; ^/ |3 S9 o5 N; A. |! N
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) h. m5 t+ F) R! g6 u* M
  11. ];
    ' H3 F# d  v& r( J% r6 H: Q
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 s& G& Y8 ^4 q
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    2 \, E  K- o, `
  14. 4 [- h# X# _5 v2 y$ j: Y

  15. 0 P, c9 C# z$ s, M; G! Q  p
  16. foreach ($list as $document) {
    # u1 a; W3 A. |; C
  17.     print_r($document); 8 l) X1 V" o, m+ [7 I0 D- y
  18. }
复制代码

6 f0 K$ X8 e( ]+ u0 S; @0 `& q查询更多条件使用方法,参考第二节mongodb基本命令,查询$ F% ]1 N, K$ J, t4 \& f2 L0 j
4 k& P+ `: q) L' S, m
3:添加. B6 R+ X, _2 [+ v) c7 i& r4 [

# O: p" K; y' f$ n  R
  1. <?php3 o7 k+ v1 Z" f1 \

  2. $ B3 c( S' F+ N' J- _
  3. //链接mongodb
    * Y0 W5 ~# d# B& z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + {8 P, ?  B/ Z0 {7 d

  5. : r' [- v6 x3 B- W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 V  y. |1 Y9 _7 F) k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 p! K# w4 X* c+ ?" ^
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);$ }) d  g( z! F; r
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    5 D% J% d0 A" b- a7 ?/ `7 y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
3 o# X5 D2 r$ k6 y; k- |- J" T; X
4:修改
/ _' s& h- E& C& p+ M, h1 F* `$ T
1 K- L$ {9 j% V& ]
  1. <?php
    8 |6 A3 ]4 ?) e/ }- p) D

  2. - ~# J0 |9 W9 D3 j" e+ p1 t( m; X, m
  3. //链接mongodb
    : a5 w3 Y$ j9 t1 F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 H# g& T" O7 G: v
  5. . L6 U/ Q/ C& P: p1 U1 Y& w/ A7 T/ n
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ! G( b2 K- c' r$ R, g% r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    / @# z% s( R' b2 _
  8. $bulk->update(: o& g* q2 U9 ~* {' s* U4 o- z
  9.         ['user_id' => 2],+ V5 M2 f+ P; J# Q- O* k
  10.         ['$set'=>['real_name'=>'中国国']0 Z: B9 [: F  K" R* ^
  11. ]);
    3 b" D$ l! g0 f1 _5 G$ m1 [" _/ T
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 \8 d4 B  M( t3 ?$ k
  13. //1:字段不存在会添加一个字段;
    0 d; p' g6 w/ G% {4 l) O% J) w
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    4 ^- ?2 b4 @1 c- I  e

  15. % n4 s7 W! [" v" p8 X  k$ r

  16. 3 T- H6 h9 d/ a/ c
  17. //如果条件不存在不新增加,可以通过设置upsert: Y$ G* n+ V9 b4 ~8 o7 G4 B
  18. //db.collectionName.update(query, obj, upsert, multi);
    3 R% P6 m& K2 T1 G9 m3 E" P1 N( T% Q

  19. & x" {1 u' q9 y5 L- M: g
  20. $bulk->update(! J7 }6 x6 g+ A4 {( Y+ k! u' [) _- I
  21.         ['user_id' => 5],- L8 j! Z9 Q7 Y1 y0 V" w/ I
  22.         [/ M4 y- N4 Z( Q# J2 v
  23.                 '$set'=>['fff'=>'中国国']9 j7 @: Q, {; U
  24.         ],; m& w& z3 j$ d7 x7 w4 [9 @( G5 Z* S5 F
  25.         ['multi' => true, 'upsert' => false]
    " j6 K( W$ o+ q
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! k) I- P0 M. B$ S( V0 Y4 d; E
  27.         //upsert为 treu:表示不存在就新增1 f6 x! d1 Y+ ^3 K1 E3 B. F
  28. );
    ; Y- N8 I& L0 O' M( Q
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. P9 c: m2 }/ v6 Q; X4 q0 @

4 Z/ {8 e; B8 S6 R8 m' @6 K8 lordered 设置
. e1 m" r* {, ^9 x5 C* _9 f1 y. J/ q3 U, `4 ^! P
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。# B, z) F. B( t. N# c" C* ]
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行% a' Q4 Z! n- _# l0 S* \/ Z& F
% @# _* d: r2 q- U: Z( `
5:删除, Y. x8 q( t2 }- Z, ?! w$ c

  `: b$ \8 V, h) a+ _1 t8 L
  1. <?php
    ) E; [5 X$ b7 V4 v- R" J5 D

  2. * p2 ?3 q3 P8 G0 B
  3. //链接mongodb
      |  |- S/ D" t2 P2 v  ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ; o; \( b. c$ ^7 D1 ~! t
  5. ( D# ]" _: Z4 m8 T. j0 N+ K- a7 q+ F
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 D# c2 b- k) X# A- e. q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 r, Y9 S$ ?. r7 h( r3 v
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段# K5 J5 c1 t) H) X& ?3 L: a( A
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) w6 s6 f$ @  j& Q
  10. delete还可以通过limit设置不同删除方式
    1 N0 k" S+ W5 G6 r
  11. 5 @% [1 g7 G! X' d3 B
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    - X/ e& x1 ?4 L' f9 P0 n
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ u8 A) _# _) H' s0 n8 u0 i6 W7 ~9 W" R' ~( o" P* E& B! g2 K: a- b
6:捕获异常
" B1 D$ B- o2 }" u% e
+ E) G: K/ V) x8 F8 x; c
  1. MongoDB\Driver\Exception\AuthenticationException
    4 o6 b/ V8 r4 i8 @2 J
  2. MongoDB\Driver\Exception\BulkWriteException
    : h  y) ?  |5 i" T% F1 K
  3. MongoDB\Driver\Exception\ConnectionException# `% q7 d2 K7 i) k3 P
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ! h, d5 }: W0 }2 c* m8 E# ?* A
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) ]) z) N9 K5 J+ Y( z7 p* }! p
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    : `) D2 K( g( m6 J
  7. MongoDB\Driver\Exception\InvalidArgumentException
    . q. G% `1 B7 G" P9 q
  8. MongoDB\Driver\Exception\LogicException
    : c* v6 ~2 }: T- A, [
  9. MongoDB\Driver\Exception\RuntimeException" M; X, f1 v4 z: |/ U
  10. MongoDB\Driver\Exception\SSLConnectionException
    + X8 |; F0 }! {2 g% k0 W. i
  11. MongoDB\Driver\Exception\UnexpectedValueException/ E* E6 n# o6 `1 L' T# }
  12. MongoDB\Driver\Exception\WriteException
复制代码

; u; \: C/ E1 F/ _$ X+ z- e' B2 h( Z/ @: T1 K
游客,如果您要查看本帖隐藏内容请回复
: |5 I4 Y( H& ^7 z6 j- R
点击查看全部! }- p; W0 m$ y3 |0 U* G

$ w8 |$ I- V( ?9 s# e
/ T3 n5 J1 V' Y" f: e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 18:33 , Processed in 0.128605 second(s), 22 queries .

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