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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9785|回复: 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不支持以前的写法。$ A3 B' t' a6 D

7 C( K6 _9 w/ i. {- U+ G下面用PHP7新的API总结一下:
0 |2 M% U9 m7 H  |# E% M7 ?1 I/ \$ D8 _8 H2 t8 [$ a/ k0 D
一:CURD
% w+ J% E4 n$ D2 k5 b$ l. O6 K9 X8 K+ Q
1:链接- |. O+ ]. Q( D& v. G. E4 N

" r8 U1 I! L- `% I7 f' j
  1. <?php
    ( n( A5 a6 x' n$ Q$ ?8 u5 H
  2. //链接mongodb) C& }: s% j+ W' `* y
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 b& z* V7 n: c( \4 `- O$ ^
  4. root 用户;123:密码;如果没有密码则不写
复制代码

/ ~; N* k5 ^0 j7 k6 v. [2 F1 u! N' A0 v- v5 u/ h
2:查询
4 P' z0 f0 ^" }3 q2 R- y* H) g( ~; R$ r
  1. <?php2 \3 j4 ]: \2 q' a8 e
  2. 4 p( l2 g7 l. n
  3. //链接mongodb% X3 F* ?7 o# R8 |5 L' Z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" G' m7 P- D: S+ i
  5. % |0 \3 Z# u* Z9 w& ^. D
  6. //查询
    ; }/ F( _& m: W7 G
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ d* q' ?4 M6 b" _( U& S
  8. $options = [
    ; q! u' M/ Y1 x) e1 u! f- q
  9.    'projection' => ['_id' => 0], //不输出_id字段
    * D" e0 Z' c; R6 S' Z
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    # Z# C/ ?" @5 v8 F# v
  11. ];/ |+ y' N, Q9 m1 ^4 W8 P) P
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求& E) \5 U: B" e6 c7 F! J- s: x
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& _6 q$ E" P1 N# i7 G

  14. ( x7 f. v8 C; D# K
  15. 9 S: n: e' p* d( V2 c: X7 [
  16. foreach ($list as $document) {
    : T  R' G  h  y7 U" K7 i+ a
  17.     print_r($document); - f  G# p" @& ?" [
  18. }
复制代码
* P9 y# q" I) `- F$ s
查询更多条件使用方法,参考第二节mongodb基本命令,查询; R* I6 @, `$ J: t8 x% U

1 k: W+ n( S- ~  g" X3:添加7 R& Q; K7 k; Y

% |: e' N5 Z/ F2 R1 r# L% E
  1. <?php9 H; _! N2 H% Z1 g' e' _" N
  2. $ c) ^; [5 L, F* Q* ]# q
  3. //链接mongodb
    - ]& D' D! j  p; }9 v1 k1 p* @8 Q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 l: _4 K9 N% R1 j2 T! M- X
  5. " ?: @8 O9 j% k) N8 @7 B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / ?: D# o; w2 q* A: ~- B% F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( L" Z# H2 `2 r% d6 B3 s6 M
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ! K4 F$ |' ~) h: i7 E
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ) F% [3 h# _2 `! ?& _7 q1 L" b' L. J. k
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ X" E" N* b1 ^, W. k
4:修改
& s% e& Z) F" c$ i2 g. j- L
4 Z1 Q' |" t; n- \
  1. <?php
      Y# p* j" d4 Y5 }0 }

  2. ) Z1 H8 k$ V* b( Y. Y& c9 d* \) E9 f
  3. //链接mongodb" w  M- Z  Q/ n+ ~+ P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 d) w: S) b* s
  5. 1 Z, W1 ]7 p( h7 b6 f/ D" f
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " R& Z4 R. N, ^) X) |
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! w; B8 Z- s6 {+ P' D( n' d, r2 p: V% m9 O
  8. $bulk->update(9 P" p( E$ C( K3 J% _
  9.         ['user_id' => 2],
    ( {0 c7 U8 o1 @7 w$ Q
  10.         ['$set'=>['real_name'=>'中国国']
    , {0 _. L: `. R6 c4 T( ?1 x! V
  11. ]);
    ( b. R  H) T# N! P, ]
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    - X& x, F% J% @+ [! ]1 d) i
  13. //1:字段不存在会添加一个字段;; U: ~  J' E0 g7 s: u! L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert. _- S. X  E" G. h' z4 p9 \

  15. 2 H( ~0 S3 q7 p( D- F
  16. 5 x4 W  q; s" H/ G: w
  17. //如果条件不存在不新增加,可以通过设置upsert
    & @# A" i' s( @* N& \
  18. //db.collectionName.update(query, obj, upsert, multi);
    ! F: u9 m6 v6 U$ R8 X5 V8 X! W3 A

  19. # b% ~8 Z/ @( E; P4 w
  20. $bulk->update(
      `  J# Q0 F, c+ U. t' c6 _
  21.         ['user_id' => 5],
    " w* a  O) h& ^6 N& }6 O
  22.         [, I  K' c# j3 e+ D6 \# r
  23.                 '$set'=>['fff'=>'中国国']
      ^7 y" N! s2 _$ Y
  24.         ],! w# C1 M' w9 S9 J1 k+ U
  25.         ['multi' => true, 'upsert' => false] / n" l5 C. J/ m! _/ P. `3 P
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    7 q- c- Y4 C* U" ~0 Z: ^! W; C# T
  27.         //upsert为 treu:表示不存在就新增( O/ B; j4 s% X/ y/ i- h% m* x& q' B
  28. );( N- r( J7 h9 E) \8 s8 H
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
  o* _; B3 X. v' k0 @+ d

$ t' A, J% B! _6 C; ]ordered 设置& x- g2 p9 U$ y: }4 ?0 a" {6 C
* N& N$ C4 S. x
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( s1 L" a$ @+ j7 D& A- I1 Z5 p/ F! ?  ~
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行. R9 k' z7 l% @7 w5 D

7 m2 d# X( J+ b2 y& V5:删除
# r/ d: g$ d. e! H1 B1 u$ G* q+ W1 y& P% l8 }
  1. <?php9 ?, }( a% d; \7 v1 m+ q) R
  2. - n2 A$ l6 m: X, _
  3. //链接mongodb
    / c5 G* r5 [7 z$ `
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) d6 ^! i% e: k$ `+ W
  5. ( [+ p8 E- R" C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 U2 x" h1 A4 u. u* g4 \0 s" s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- M& \$ W/ j) W% ~' ^7 |& }
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    2 Y  H4 {7 s9 c$ v6 n
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ' v% P  X! A7 @5 \- d
  10. delete还可以通过limit设置不同删除方式0 G# ?" C% [7 U9 P4 K  K

  11. : R5 C: j1 s% G
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 F- X7 K+ D3 l4 I
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
' a  s; |/ W8 f. c" q1 ~6 L/ o6 k

! M7 Q+ i+ n* A. u7 ~, U+ b0 ^6:捕获异常/ d+ O2 }2 N+ E

' p6 a. v- z* A6 P
  1. MongoDB\Driver\Exception\AuthenticationException' f. N7 _8 [; @3 E0 E
  2. MongoDB\Driver\Exception\BulkWriteException/ {4 A, K5 x: U( V: f
  3. MongoDB\Driver\Exception\ConnectionException' X$ x& Q, C. x& s
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ( @2 D4 X. c9 R" J
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    0 N: h9 n  P) ]2 n. b
  6. MongoDB\Driver\Exception\ExecutionTimeoutException% \$ m+ k% S, m# @1 A- \
  7. MongoDB\Driver\Exception\InvalidArgumentException7 W  O! U1 v5 y% ~* e
  8. MongoDB\Driver\Exception\LogicException
    , E5 K' Q" _4 ^$ w8 J
  9. MongoDB\Driver\Exception\RuntimeException
    - D/ Z2 z' f3 @, i$ H1 Y/ ?4 ?
  10. MongoDB\Driver\Exception\SSLConnectionException& u9 e5 D# n0 f( J
  11. MongoDB\Driver\Exception\UnexpectedValueException: u3 ]+ }+ Z' e, X) Y( Q6 _) H/ p
  12. MongoDB\Driver\Exception\WriteException
复制代码
; y# N7 G; @: y: h+ B% D/ {% _9 V3 N
8 C! z& C5 p* l: Q: [3 v7 v: y
游客,如果您要查看本帖隐藏内容请回复
- o& n' o' s  o& i
点击查看全部! L1 p1 Z- y4 Z
% Y) u; T# ~/ K& g4 J
5 Q/ G% `# P1 S* @$ Y& E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 09:42 , Processed in 0.123188 second(s), 21 queries .

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