设为首页收藏本站| vip购买 |

cncml手绘网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 771|回复: 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不支持以前的写法。
# v/ I' o8 G8 r+ }7 ~- {3 \- @* l& k7 k
下面用PHP7新的API总结一下:- {- h. t! p! |* x+ A% m
& V3 C: n% j. P' v' i
一:CURD
: G9 A: J6 q: j! k% {( u$ |$ k7 h! L% O! j* z
1:链接% Y* H+ m0 S) S0 c
, g& N8 X7 Z6 g" X* H2 L( Q0 n
  1. <?php4 t1 G4 C5 Q, F  K# w+ l  ~# q
  2. //链接mongodb
    2 j: N5 J! [5 {% H" q. E
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:[email protected]:27017');
    8 _& v; n: m) s, W/ N
  4. root 用户;123:密码;如果没有密码则不写
复制代码

* y) s+ u1 T- H. \. @; r* A+ J" ~' B. |% v9 _/ F
2:查询6 D; R% r4 g+ W7 h

' V+ @9 p% T9 }5 m
  1. <?php
    - ~3 L8 U( r+ H- ^$ |

  2. 2 a4 |4 y2 J/ Y4 b
  3. //链接mongodb! {' s' e+ r6 l) B1 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:[email protected]:27017');
    ) H( N1 w5 Y8 i! W6 T: D! G6 R
  5. ( J& l6 }. F) J. M, V
  6. //查询; v8 n. A0 ]2 `" k' X' d% b* e
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    . k: {& M/ l% R1 @4 b/ ]
  8. $options = [+ t5 N9 @; ]- u
  9.    'projection' => ['_id' => 0], //不输出_id字段% x8 A8 f: p0 d# A8 t! [
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ I% }1 \* g6 }! x, n0 @% u
  11. ];
    ) e3 ]9 x5 [% c! z; h7 K+ V1 W' @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    8 l: t9 b5 F  b% w% a
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合  D3 }; M3 q! Z

  14. 6 \! O' q9 d  v6 ?
  15. ) o- M6 Y( \# Y* \" z
  16. foreach ($list as $document) {# ]. f; f+ P- r9 M" V4 W* y# Q0 i
  17.     print_r($document); 7 J( Z2 |/ F5 u! T' ^  t, B. ^
  18. }
复制代码

4 r8 p2 f" G: C5 ]5 T0 o# V查询更多条件使用方法,参考第二节mongodb基本命令,查询% g6 F1 r+ ~; R5 K. m$ e
* w* S* }5 \/ k& }7 T% F, b
3:添加
! L: @, S# H" `. D) v, Y/ c, M2 z* R9 T$ n3 O
  1. <?php! }, b) h9 T* n2 V" D2 h; A
  2. 6 |. M2 Y! {3 i9 |
  3. //链接mongodb! ]2 h8 ]+ R2 g
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:[email protected]:27017');% Q+ Z8 B6 m: k- c5 z/ {
  5. ' ~  |2 W  F5 H+ R! I  H( H  L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # i" K# \! P% c6 `' r# K4 b- r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, f! G1 P" ]3 m. U6 v
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 `; y: y4 a9 F5 I+ m
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    4 f( o1 Z0 f) N9 |: Y  y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
% r2 e% A- b6 V2 u/ m
4:修改
1 h' s- @5 P8 C- u. f
+ J$ I3 o" K* B, I, ^. @' A% E) ~! ~
  1. <?php
    $ @+ c) u8 v# P1 X

  2.   b, D. t: v+ T5 g* l* V
  3. //链接mongodb
    + |( Z3 q7 h1 T9 ~( k- t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:[email protected]:27017');0 L. d  H& ^0 }7 b9 F% U/ l1 |# L
  5. ( t9 e6 ?; X2 b4 B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 c! Y# H. P# ^# n# ^
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : Q: j/ V: ?: R. W3 v  h. T# B( `
  8. $bulk->update(2 B0 E. {3 C/ ~* M' G" w7 V
  9.         ['user_id' => 2],; h# V! D; _' {8 C$ L; F, H
  10.         ['$set'=>['real_name'=>'中国国']6 e5 u0 d) G- Y9 f! N/ a
  11. ]);
    : f" s! r9 y% t+ K# d7 ]
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    1 n5 u6 U- G7 M+ l
  13. //1:字段不存在会添加一个字段;/ v/ J. D, O) l% V( J0 Z
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    : s3 I4 |* ~3 N3 K
  15. ! k2 l1 T8 l5 [
  16. 8 A  E  N  R0 a8 a
  17. //如果条件不存在不新增加,可以通过设置upsert' ^5 ~: j# b; V6 ^. Y1 u  Z: F
  18. //db.collectionName.update(query, obj, upsert, multi);
    7 w/ F: o- e1 c4 r0 R" s

  19. ) G2 R$ ^* {9 ^& u- l0 k0 w
  20. $bulk->update(
      I6 f9 s, j9 r" L( z! L. d
  21.         ['user_id' => 5],* |# w6 B! M1 c* G; I
  22.         [
    6 f" k9 `- h* u7 _
  23.                 '$set'=>['fff'=>'中国国']
      A6 b/ q$ T: z8 k
  24.         ],3 E3 n+ d/ v9 i! f! e- F  L8 b5 Q6 `
  25.         ['multi' => true, 'upsert' => false]
      J1 `, F9 [! E+ C( y0 C6 q0 o
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 u8 L' C0 w) ^- D
  27.         //upsert为 treu:表示不存在就新增
    $ ]6 l; ~9 V5 `( l* S/ H* F  a# C
  28. );& d6 f- p8 r, E# @9 W
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

" i. P' W0 M% P2 ~8 |4 b5 r! v  w4 i% n
ordered 设置4 s/ D7 f* b1 j/ C

) f; L# X, T+ V! A1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
+ ~( V5 s; `/ d! R2 Q% }: b2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
* _8 d2 t9 a8 V. E( B
! t* `5 U# x8 @# g8 |5 s5:删除
4 V; P6 b7 t& ~3 _% N$ `. y5 `$ J4 v2 `: o
  1. <?php
    6 H- B* R# Y5 Q
  2. 7 n+ V  J- z4 M8 x" }; f
  3. //链接mongodb
    " X5 e: P( c4 h+ ]5 V% _. D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:[email protected]:27017');, E6 S$ e9 M5 n' u

  5. 2 l4 Z2 W4 z" {, B( v
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 Q1 [+ ?# I7 \+ v: F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行  @0 t3 ^" Z0 y
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    2 O6 o" v4 F3 w1 U. d" l6 G
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    , |3 C# I; G  t$ o: K3 A
  10. delete还可以通过limit设置不同删除方式+ A1 i! x& C3 Y2 O8 A% G
  11. 3 _3 {1 H% [; b* k, g+ W
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    & E8 e. F5 _8 b6 j- H) i  Q' V
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

" g! V, j0 ?/ _% I7 |$ {
" b, ?+ L. f/ h- f2 E# _! K6:捕获异常
' ?3 J; e: r" g% A8 E. Y3 `- D
. b! M7 L. F" c2 j* e+ s
  1. MongoDB\Driver\Exception\AuthenticationException
    ' e+ f4 ]( j6 s
  2. MongoDB\Driver\Exception\BulkWriteException
    ; J. b3 E: w% m: P: H, d) {
  3. MongoDB\Driver\Exception\ConnectionException, }1 b! [6 p# s0 I4 C
  4. MongoDB\Driver\Exception\ConnectionTimeoutException& u% }  |/ ?3 ^
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ' K# m: D  A6 |# W2 V
  6. MongoDB\Driver\Exception\ExecutionTimeoutException8 J# y! O- [. m. f/ K. u7 K
  7. MongoDB\Driver\Exception\InvalidArgumentException6 H3 T8 Q/ d4 T  I; @9 _8 U
  8. MongoDB\Driver\Exception\LogicException" p. m5 S5 s8 p
  9. MongoDB\Driver\Exception\RuntimeException$ u! N' h) v9 f! b/ H8 l3 m
  10. MongoDB\Driver\Exception\SSLConnectionException  V# Q% N7 ^' h; |
  11. MongoDB\Driver\Exception\UnexpectedValueException, l/ j( L2 R& Q3 ~; B7 \; }/ q6 W. @
  12. MongoDB\Driver\Exception\WriteException
复制代码
# Q& p3 z3 X- S8 w

2 N. L0 m. Z* j! K( }$ a; o. f0 ]
游客,如果您要查看本帖隐藏内容请回复

4 p: F5 }5 l# X% h点击查看全部$ W5 H, z. V( K: \+ @8 _- V
9 S4 C( F1 ]$ g& |

# `3 \8 V& \  p+ g! b5 m( G
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则