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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9794|回复: 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不支持以前的写法。
, H! n, o/ l7 x$ t2 `
: k9 q! |+ z. ~  V下面用PHP7新的API总结一下:+ b9 t2 i8 r( m

( U( l; N$ R% D* V一:CURD
6 @7 k" B  D+ G. w
  a9 m4 I  F: O1 {" q1:链接, i8 d/ G& O5 j" y, o. C" p
0 g; q; L5 e/ B; n3 `
  1. <?php$ J9 f8 ?# q3 v( A( C9 _( l
  2. //链接mongodb
    7 X: k( [. Y2 H0 B7 @1 q/ v2 A
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    * w& w2 K- e8 t6 [4 w+ R, s
  4. root 用户;123:密码;如果没有密码则不写
复制代码
" R1 f' n4 X+ W: J4 t- h
2 {2 P/ t7 |" h: G/ t
2:查询
" O, b. k4 p  T% `0 D9 ~# C8 O+ o( ?: N, u* ^
  1. <?php9 n) b" B9 J3 w, g

  2. & g& O& I. N6 @2 a  @
  3. //链接mongodb
    1 J9 r& B7 X4 W6 f, p5 A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # `1 k- E+ N+ M; N' m; s- {. L+ u

  5. , R# k, G& X2 b! r; s7 ]. L9 s# B0 h
  6. //查询
    3 h7 T6 O4 K- T- [$ y
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    * @) s" W, T( F& s8 v- l* t4 R
  8. $options = [# w8 q& i% P$ I4 P
  9.    'projection' => ['_id' => 0], //不输出_id字段; r% U6 a( n0 [. C" T& _
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序5 d! A5 u; J% j/ a8 L5 Y2 m
  11. ];
    5 @8 I% q; R, l5 N
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ; g+ [5 h  a4 L: L+ ^' W: C
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合6 d  d: I$ q6 U* p; }0 N
  14. 4 q9 ~1 ^! v2 [* N; w/ e! O

  15. ; ^0 U( d6 {0 J. n' R+ |$ a
  16. foreach ($list as $document) {
    ; t9 {2 @( `$ E9 S2 k. P
  17.     print_r($document);
    - D* g0 o7 m# F; r7 @
  18. }
复制代码

/ O( i1 L  y$ @8 A6 `* `查询更多条件使用方法,参考第二节mongodb基本命令,查询' _/ |1 X" b; s( p
0 `; f3 }1 Q( ^# v  {( E$ L
3:添加
( Y0 t4 ~, A' T7 W( c7 A9 \* V6 K. r  d1 F* Q
  1. <?php
    4 a. C2 m1 q* D& F. r2 Q9 B

  2. 0 i1 p  f( B6 D+ D( K" W
  3. //链接mongodb4 x/ ]5 g2 d. |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - f' U& ^2 G) W' B6 w  b

  5. / M: N4 u; H# T* R8 ?8 u4 @! R/ n/ T$ ^
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; F0 ]' `1 ^) R# \1 K: G$ u" P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    5 U7 I: \3 v% a, K. m1 d
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    + s4 p, M  G6 T5 a  s, V- |0 e" G. }
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      v- A0 `6 C3 ^; G# X# w  j- H  r
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

7 F3 p- s) M* B9 s$ t" Z8 M4:修改
* l8 W9 Q" ?) S# l: N( T5 ^: U4 y! P
  1. <?php& g6 M( E6 x  t; b2 k
  2. : W* I- E' y3 T4 {/ w9 V
  3. //链接mongodb) j* S5 {3 u7 g* f$ \' Z, ^' s5 u# }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ^+ r, s+ e) J1 L8 q' ^
  5. % t$ I/ v  u, n. H0 G8 l, H
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 ~( Z0 a( W" D" Q6 x2 m8 I5 U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 }  K1 g  z9 C0 d& L$ p: G9 G
  8. $bulk->update(4 s' x; b* l5 P' \
  9.         ['user_id' => 2],, F. ]3 s5 o, i6 W" p! Z
  10.         ['$set'=>['real_name'=>'中国国']
    ' }! {% `+ t5 k" {  N
  11. ]);
    + M9 f& @1 i# i0 W- p. d' c+ `
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,  m& q6 d( P7 M: c  d- r3 b
  13. //1:字段不存在会添加一个字段;3 n7 p  `+ P0 A+ ^* E& j* Z
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ( d& Z- S& V" Z7 B) j8 ~$ V

  15. $ z" }' d$ Y" f) [6 h

  16. " p/ I8 y+ Q; H/ }) W
  17. //如果条件不存在不新增加,可以通过设置upsert8 V2 M/ n; [  x9 u' ]3 G5 e
  18. //db.collectionName.update(query, obj, upsert, multi);
    # V$ H) E7 P0 z$ e
  19. ! k  d) ~+ v& ]2 v1 F  g9 ~
  20. $bulk->update(  b1 y1 a2 q2 R3 v4 w  h
  21.         ['user_id' => 5],$ m$ V/ C) }' {8 d
  22.         [0 J  Q! S9 F, c
  23.                 '$set'=>['fff'=>'中国国']
    $ n  T- h1 `& F/ c
  24.         ],
    * ?& C$ \# {8 c& C7 b
  25.         ['multi' => true, 'upsert' => false]
    8 A. `/ B. @  J: [6 m7 }, ^5 N; c
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& O% ]$ C. N; @8 ?
  27.         //upsert为 treu:表示不存在就新增
    9 z9 ~$ k: t: i
  28. );2 ]7 Y: g# D0 U+ b. X
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

- R3 u7 x( ~# \& h, M+ p; }2 [2 v# `2 G9 y- s5 z
ordered 设置( K, b% r- m4 \' ?, @7 h* ~0 D

' W2 [6 ?  R/ X9 F: |1 f7 n1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
; w  o  l% g( _0 m/ I; P5 r2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
& e& a( |+ f- `; F: x9 U; g% W: M$ T% ?( \
5:删除
6 b% K  e) s& w# @
4 v$ M* p- l8 W  ?
  1. <?php7 Q0 v7 A1 ?- }+ A2 O. [' _

  2. , q6 L4 P2 h* M$ i7 C) R) O, z, @
  3. //链接mongodb# S! q+ T" X, x+ p6 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    2 X6 h, z- r& M
  5. ' K5 C* E) u# ^6 C$ q, k0 N; V/ J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 G1 Q) B. B8 r4 i) `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    . u4 j) G# K: G
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    # L2 L2 A1 j2 ]
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    / c5 X' i2 e5 S& A$ z% [! S; L+ d
  10. delete还可以通过limit设置不同删除方式9 W+ D7 J$ O. e) {8 e
  11. 6 X1 Z% X+ E7 \0 `
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    ( @/ `0 h" c6 f( }/ U
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

5 h/ C* f- n: w& f3 p
& ]& V% ?5 U' f9 L% ]6:捕获异常
8 l% C0 i  [# y, I; A* W
+ U8 y6 v" T1 }; N0 e
  1. MongoDB\Driver\Exception\AuthenticationException: B7 @) a5 C7 Z2 V; T$ D
  2. MongoDB\Driver\Exception\BulkWriteException, h0 [) y9 J2 g8 [; A$ ?, p- R
  3. MongoDB\Driver\Exception\ConnectionException
    " V! Z, L3 ~& O' Q* F! y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException, c) x& ?0 \! z4 m! P+ s, _
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    & O2 R5 M: l- h9 q( W4 _0 }6 G
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    4 c8 g% {" v4 p# D9 v2 M* ]2 V, D2 h
  7. MongoDB\Driver\Exception\InvalidArgumentException
    2 j  y3 I# p/ U4 P
  8. MongoDB\Driver\Exception\LogicException
    6 k% v% }2 c' u, H$ f
  9. MongoDB\Driver\Exception\RuntimeException2 A- P2 P9 n- O# j9 q
  10. MongoDB\Driver\Exception\SSLConnectionException
    2 S. M& K* j( s. |9 s
  11. MongoDB\Driver\Exception\UnexpectedValueException- t9 y7 `+ P1 o
  12. MongoDB\Driver\Exception\WriteException
复制代码
* V, G# _; Q. l% l( w0 b

+ l3 X+ |- N1 T8 ]
游客,如果您要查看本帖隐藏内容请回复

6 p4 v  v9 s3 v, L, n点击查看全部
# g0 u) u% Z4 X+ g7 B8 y* J$ K( w7 S# u* c

4 X4 L- E6 M+ K/ A8 _( @2 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 18:07 , Processed in 0.127594 second(s), 21 queries .

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