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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14342|回复: 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不支持以前的写法。8 F( u: u1 O1 \3 _6 h) U

$ n9 o: m8 Y9 V/ j+ r下面用PHP7新的API总结一下:
3 b* W$ f8 a) m! f0 H4 U1 I' |. w/ ?8 N" B) Q5 U
一:CURD* ~; X5 F: `/ X6 h: L8 b

0 N' y  R! ?) v1:链接, ]1 R/ ?: T8 P( D  g& b1 |

: C3 o) q7 {+ s7 Y8 o
  1. <?php
    7 t, t: ^8 N7 e. |
  2. //链接mongodb
    : @) }9 q1 o. k6 Y
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');3 f3 j( q1 p6 V( U: c
  4. root 用户;123:密码;如果没有密码则不写
复制代码

$ N, a$ x/ [4 u& A4 I4 ]- d/ `# E- Z0 g7 r+ {
2:查询4 Q6 D" y" m. x8 z4 G' S
  W: n/ k* V: K' M3 B7 W
  1. <?php
    , X; {' g- {8 A; }  G" E
  2. & k/ o2 w9 A9 n  Z) U0 T
  3. //链接mongodb
    # S$ c3 J/ G4 @9 R( a  U
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 |+ L0 D7 c- w$ _, s

  5.   ]1 V' D: ^* U: }+ T6 G9 _
  6. //查询
    8 h) M/ t3 e0 w) O
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& |8 o' D% @  C) x" q: V
  8. $options = [" U( H1 D  s7 ^" {" r4 e9 G5 \' W# O
  9.    'projection' => ['_id' => 0], //不输出_id字段  @' n+ ]" n( ~; H# b* \
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    - g  @& @* K! Z. j% ?
  11. ];
    # ?/ r2 @% j  y8 H
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求5 B' k4 \) a4 K& S% m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合% {1 t( n: ]& ~6 z
  14. 9 c2 ~1 q* @# u2 [( o7 ^
  15. . w( m8 U! Y% p9 o9 F! n
  16. foreach ($list as $document) {
    " e4 m& [/ ]$ J4 _8 C3 Z8 {
  17.     print_r($document); 0 c& G3 h1 U& w' Y
  18. }
复制代码
1 d4 T! A( r/ `5 R. F8 P
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* F* ]% ^' w- U& k6 C# Y: v! Q7 M# Z0 G2 g
3:添加
) A6 N) `/ R/ x+ N1 G5 V: X" B9 `+ a3 \- ]7 T: ]. ^5 B2 F
  1. <?php
    3 ]9 X+ k2 W. q0 e1 u
  2. ( K) Q8 Q! a4 g
  3. //链接mongodb
    5 T8 D3 x) z, ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 _: ~+ d* u2 G% o- X

  5. ' ~) V( y/ P6 F# C5 c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      H) ?9 b3 g% B& J# ~! ?
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      {3 C$ n6 t- g5 A- G  e
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    2 J! \, \! H8 Z7 w) Y2 v- r3 o% ^
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ! L- R; A/ Z$ ~/ z5 }4 @5 m& y
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, Y. j9 o  e" Q, v  e; B% M' r- p* X4:修改
* x2 P1 k( k3 S  b; H* B* a
! ]9 I1 Q  Z( t& \+ z
  1. <?php% e( D. ~1 b% ~

  2. 1 ~% c  s: {. E0 w5 C
  3. //链接mongodb
    # G# h' J9 k9 J, i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: `( m0 \% ]% {8 W
  5.   b8 i: \  t$ _. V+ e  h" B% e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% f; h8 Y2 D8 M  f& `: C
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    & J& k$ S4 z( r+ S) Q  p
  8. $bulk->update(
    5 Y9 d+ _* n+ `$ C
  9.         ['user_id' => 2],- T- i" k% s" o
  10.         ['$set'=>['real_name'=>'中国国']
    / y" b3 h/ L7 L4 ^4 B; A0 K
  11. ]); 9 R% A1 L% d8 q! N
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 G( M/ a+ R4 O: i6 H
  13. //1:字段不存在会添加一个字段;6 d' r8 u6 V2 H" l* ^
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert! k" I6 p/ k' i! d! T
  15. ( S( E7 q3 E% S; |4 l2 b5 T0 m% ^% `
  16. 1 S- _" t& o$ g7 i. z$ D, M
  17. //如果条件不存在不新增加,可以通过设置upsert; y/ C3 U! W+ ^! s
  18. //db.collectionName.update(query, obj, upsert, multi);& t$ Y  D- f3 l, m

  19. 5 v% Q& N* ~$ u# ]0 D% d  d8 @
  20. $bulk->update(. c$ {. K3 E2 C) X5 x( z
  21.         ['user_id' => 5],; h* m% Q& y7 T' q2 [
  22.         [
    . W& n1 \$ `8 a- o5 A& G
  23.                 '$set'=>['fff'=>'中国国']
    ' _9 Y, E- ~% j2 c9 i
  24.         ],
    2 M( T$ e1 M& ]* h7 [+ Q& [' [/ j
  25.         ['multi' => true, 'upsert' => false]
    % l+ M0 e! h6 w. y, E$ K
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ ~" c/ S  O( @
  27.         //upsert为 treu:表示不存在就新增) ]( R7 x$ L: a' C
  28. );
    8 p% _6 l+ F2 W4 e* h1 v" m  Q+ \- A
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ ^+ X7 P: I6 k* _  L8 N
4 x* i' c- Z# ?* D, ?
ordered 设置; N7 H  V) [4 w" ?

0 X6 E) b+ t9 B1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
/ a9 Z3 p9 n+ L  z0 k2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行" d6 A; E% W% K2 `  b; C) t3 J

# _  i! d$ v8 I( g+ D0 z5:删除( g& G- A8 u7 p# l4 i3 D; t5 r9 n
1 l6 n2 [5 n- x7 \) ~( h
  1. <?php2 D. C. r- v5 R$ W9 s$ C7 d

  2. # F. w+ G) f' q" H% V( P* H- F
  3. //链接mongodb8 a7 H/ A' E' K5 A( ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ v  X" O. z8 f/ R

  5. . w6 U) y; i5 T. ?: l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* F9 R' l1 `# n" M9 ^
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + p2 }  H( u: }9 i/ |3 y& M, k
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 Q1 u, K$ q' \; W
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    5 p* R: j1 k, a6 g9 [8 t
  10. delete还可以通过limit设置不同删除方式
    9 K, ?# C1 u: \/ B
  11. 1 t$ ?" O; m3 t" ]* K7 Y
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据, w$ `2 c! u3 a$ X5 I$ p
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
7 t% L6 i' o& d$ ~/ v
3 |4 X! r. W0 U  ~( |0 k
6:捕获异常5 n, J$ u- E7 d. F) r$ W2 G( l

% j% w- C- Z+ ]# X2 _) S! Y
  1. MongoDB\Driver\Exception\AuthenticationException
    . Q, `, v4 w: r* v/ M
  2. MongoDB\Driver\Exception\BulkWriteException0 f4 o% N4 ^; }! Y/ F, T7 \
  3. MongoDB\Driver\Exception\ConnectionException9 j6 A3 r" A% A' T1 z
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    & S% O$ F, W( t9 b7 D
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    2 D4 q5 _1 s' u4 Z. L
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    9 e+ D6 ~; O2 }" `( S9 o( J( Z
  7. MongoDB\Driver\Exception\InvalidArgumentException, Y2 x: }; t& O) T# ]! X. D9 v
  8. MongoDB\Driver\Exception\LogicException+ K9 `5 n9 r) y; t' m9 _
  9. MongoDB\Driver\Exception\RuntimeException5 }' k% m1 U% p; d) j1 z
  10. MongoDB\Driver\Exception\SSLConnectionException3 o$ L) T- \2 `
  11. MongoDB\Driver\Exception\UnexpectedValueException  Q1 `5 Z' M/ Q' o6 _; i9 @. H5 q
  12. MongoDB\Driver\Exception\WriteException
复制代码

) C. ~& ~( N" Y: b
7 r( H, Y9 w( Q2 I! V
游客,如果您要查看本帖隐藏内容请回复
8 U7 A1 D3 _6 s7 R7 ]8 u/ X
点击查看全部
) ?% y, @/ h$ d' ], m4 B
& E; A: o* v4 `, B# @6 D
# o+ v" y( C% {  a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:44 , Processed in 0.052797 second(s), 20 queries .

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