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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9914|回复: 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 A4 G8 A) o; S! b0 R5 ^
6 J6 ~# q0 F& o# m( X下面用PHP7新的API总结一下:
0 n6 }% b5 v$ M' [1 s& ~
, S% b8 d9 m( Q% T) C5 k2 q一:CURD: Z* x# S6 }1 {1 S. g: }

% u: w! [) s% }& L0 n1:链接
) l( c" J  C0 \0 s/ T7 C" V: k! c2 c9 R% u% {( A
  1. <?php# Z5 g/ ?. N/ L4 V; k
  2. //链接mongodb
    2 E+ c! [/ Q7 R# _1 B  I
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    2 b, \" e" h7 X' O
  4. root 用户;123:密码;如果没有密码则不写
复制代码

+ t6 o; \9 O  m3 f- j& }! c
  m( c7 o2 l' r( t2:查询. m0 \7 N. p5 B# v) y6 Y( P! I

7 q, o$ p; _! n
  1. <?php9 v9 U" J* A6 k& J  Q9 c8 n3 u0 n" c+ L
  2. ; P9 q3 N5 [0 X* M% v! D0 P- L( d9 Y
  3. //链接mongodb
    / H: D6 ^8 ?1 ]- ^+ A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ \" U5 m, @0 x9 }

  5. 6 f5 Q6 G$ C. Z/ ~0 \( A
  6. //查询
    ( c' a8 G/ K9 x% l
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于07 K! N5 k8 S" k
  8. $options = [. l7 {. t6 e4 e0 w
  9.    'projection' => ['_id' => 0], //不输出_id字段
    & D( b" {, n/ W" ]
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    6 K' A# M: B6 |; r( j9 a/ U
  11. ];
    1 }8 d0 E1 e# p9 Y7 e
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ; G2 I; S6 S4 b0 Q9 i5 m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合! m3 W9 K' N9 O$ I2 M* [

  14. " _- [- j. U% W( j" Q! j
  15. 1 d. q+ B1 H# G" M+ T. |: ?
  16. foreach ($list as $document) {9 z/ }1 R% C0 S3 C: @* L6 G1 j
  17.     print_r($document);
    ' b/ Z1 h, t' a* a) M4 s6 V0 {
  18. }
复制代码

$ o# [- T' U( m# q查询更多条件使用方法,参考第二节mongodb基本命令,查询/ s& s/ \; ?# D/ l7 |( y

. Z0 O3 O& ?  G' s; ?3:添加
- D3 [$ b: o8 I4 H) d3 a5 F
7 o% T0 `! l& W6 w/ Y; [$ T2 x
  1. <?php
    5 G$ }6 S' _. t6 S. E

  2. , r1 s9 [5 h' c% i: @
  3. //链接mongodb
    * U& P9 I- }6 I, ^( W& q' T0 Z& I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # b4 w' ~/ w+ ]0 |- \. z6 _
  5. 5 w7 H' k/ t, c7 ^& k8 a- n1 y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% N) T/ U, T# N) t
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " }6 o! o5 K7 c8 O7 m4 ^
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    & b! O2 k9 r7 E' j. J, a  Y6 l
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);2 G& \) b8 Z) a6 T* W* J& f* i: C
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

# i+ ]4 v0 n( Z. G3 h2 e. y4:修改: r- D% z6 s* G
% F- W" f/ _! k7 {
  1. <?php5 {  b- O  v+ Y% l/ L4 Z* f- j
  2. 3 [" M0 A4 I3 ?! Q0 H. E6 b
  3. //链接mongodb
    " \2 p8 o) a9 G! G. o8 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ k. b3 H! u% S' e) p
  5. ( m* O; A( E4 k2 F( ?9 |% \
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! ~3 P" o5 X* x, Z( S
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ' ?% n6 `# a: t/ `, ]+ q" u6 q0 V! C
  8. $bulk->update(
    5 s2 [, U+ F5 c3 S, S' d
  9.         ['user_id' => 2],
    8 O6 }& l" O- J  K
  10.         ['$set'=>['real_name'=>'中国国']
    ' _1 B  q; [3 ~2 y
  11. ]);
    % T: B* C! ~' D: V
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,- J& d# M, g5 y# T/ \. y
  13. //1:字段不存在会添加一个字段;" C! m. E$ G2 R; f; X/ K
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert4 U/ v1 o6 f$ T5 M& i

  15. " ]1 \1 x0 _3 m  t: x: }4 ]9 S

  16. $ v* I3 M% j3 ~7 ^5 E# R4 o
  17. //如果条件不存在不新增加,可以通过设置upsert
    6 u/ E7 P" x' i4 R% a
  18. //db.collectionName.update(query, obj, upsert, multi);
    4 v( J  I0 F5 l4 M5 j; Z
  19. 9 W' _5 L& f! P- k1 R
  20. $bulk->update(
    $ N2 X8 A2 Y' H) y5 J
  21.         ['user_id' => 5],% B  J6 h, S: {! |9 p& z, E. h
  22.         [7 E$ h3 Z4 u2 }& k  j2 S) `8 m/ }
  23.                 '$set'=>['fff'=>'中国国']
    4 `7 V6 G& M4 q4 `* O& }1 w
  24.         ],
    5 [  \' F: ?( Z
  25.         ['multi' => true, 'upsert' => false] ; X+ x# `3 d: g! s: _
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 G' I& r& s9 e+ `
  27.         //upsert为 treu:表示不存在就新增* \. \% y5 t3 O* T
  28. );
    3 |7 [7 N1 ]" M- r% ~# q
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# ]9 ~6 P" J# q2 i8 I' b% Z! E) x: v

" X! T- A' R) M" Z8 Eordered 设置+ q4 ]; y$ C0 q3 ?/ G( J. k- W

( }3 T( y1 }% O! ]1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
& Z, ?& e5 i( ]- k+ O2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 T* K  O& C7 j6 Y: H# j' d
( W# }  x1 s" ]& r& H! w
5:删除
6 L$ ]# e4 a5 r7 T  n& y5 P! k- N
) W3 m3 S2 C: z
  1. <?php
    " M$ e# S- U* T1 S+ q  d/ l
  2. % [2 W1 W3 m' T+ y; F* R* j: |
  3. //链接mongodb/ a4 m. B2 C4 t) I% T: ?3 i+ m3 X9 Z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & `9 [" c9 T: `9 [$ Y" N9 S
  5. $ `* U9 q( t* Q+ x% f( b. C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 n. H/ V. {  `0 X% \! w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, y  u/ h  t6 _( v% P5 n
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    - p- F  C0 n+ g1 K( E8 v! I
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合, j- _8 {. W. b& `6 |
  10. delete还可以通过limit设置不同删除方式
    ; V% ]% m( }$ m; p5 I- Y  i/ a3 U
  11. & Z, H# N& f5 h8 `% R8 P8 l
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 n6 L# q3 u$ s+ |$ T! j
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ M3 a, |* M& i$ u& f# U3 N3 N
* q; ^/ k" N+ H; `, O, g+ ~6:捕获异常; y; X. {3 e3 D; H; q$ T7 I/ K
8 c: G8 I* v2 f
  1. MongoDB\Driver\Exception\AuthenticationException" C/ @' s! G1 S6 c
  2. MongoDB\Driver\Exception\BulkWriteException
    % ^" l+ h1 F9 u
  3. MongoDB\Driver\Exception\ConnectionException
    ! b. i8 j: f* U2 H: y4 [
  4. MongoDB\Driver\Exception\ConnectionTimeoutException0 G3 ?  k! v$ P
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) l+ y2 c# i: c' x0 T) f5 Y# @
  6. MongoDB\Driver\Exception\ExecutionTimeoutException5 V" O  y9 h! q. P6 e
  7. MongoDB\Driver\Exception\InvalidArgumentException
    * b( J8 a9 q  n/ T& q8 j9 D
  8. MongoDB\Driver\Exception\LogicException7 H' D8 M/ O1 a% K+ h3 j+ P& e1 ~
  9. MongoDB\Driver\Exception\RuntimeException- p, |+ z2 R/ A5 I8 a" f
  10. MongoDB\Driver\Exception\SSLConnectionException, \- |  u4 u5 {
  11. MongoDB\Driver\Exception\UnexpectedValueException
    : T% @) D/ G: r/ U7 x
  12. MongoDB\Driver\Exception\WriteException
复制代码
$ x) ]$ l# Y* P- L5 K8 D
' w0 D+ q# u0 p: E. k4 B
游客,如果您要查看本帖隐藏内容请回复
& ?8 q8 K; c3 k7 b/ I4 ]; C
点击查看全部, u. Q, h9 b6 v' t9 O

" Z& w$ c  g! I- a% F5 c" o& I  T" w/ e6 q9 _0 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 02:43 , Processed in 0.121486 second(s), 19 queries .

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