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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14732|回复: 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不支持以前的写法。* y8 ]7 I' n6 u7 a! R( K

0 G+ [* R2 C, S5 w' Z下面用PHP7新的API总结一下:
  ?  Y- u3 G6 F( b' H1 [  @( p
& }" F6 {2 N6 N7 d$ D! F5 p一:CURD
5 T6 v- D( g0 m5 U% u
$ ]. d6 p+ g" z# k1:链接
2 o# W7 v6 K5 O- D1 L
& R+ U; q' f% t5 A8 p
  1. <?php
    , t/ Z- G) k1 v
  2. //链接mongodb
    ( G2 I9 ^1 ]! b( H" C, k+ X
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ) p1 H4 ^( y. M. s
  4. root 用户;123:密码;如果没有密码则不写
复制代码
; v- K0 i) B9 x
7 P% c/ d+ d4 i) O9 ]
2:查询/ s7 n- a. a/ J( Y1 g  p1 B6 o
! l3 L% n6 `: v$ [; Z# C
  1. <?php
    ! F/ O8 c# r* O4 F: x  m8 ]3 F
  2. $ V4 W/ P7 T& [$ j! _
  3. //链接mongodb
    2 A. o3 ]5 ~6 t3 H5 i# l5 f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& Z6 L2 Y# F; O

  5. . J1 }6 s' i1 W7 w2 g$ F& \
  6. //查询
    7 N, `+ f" ~; t' @5 o) p
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 S5 }: g( M1 q" w3 V: k6 @- }
  8. $options = [9 @' n' x7 G( X4 h# B
  9.    'projection' => ['_id' => 0], //不输出_id字段
    9 ?# I8 g3 d- l3 `* U
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    2 J3 A3 _- ?) L4 M
  11. ];
    : A% {6 g( G. I2 X
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求' I* @( ]% K. z3 x# a  N9 o6 H2 y, ]
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; }0 F* n9 g) H- K
  14. 9 D, V2 E9 T# B, [

  15. $ i* d# Q$ z1 Z: S
  16. foreach ($list as $document) {) J% |2 `' H# ^. G# B* {3 s
  17.     print_r($document); % v; e  ^& \, \2 _) @/ a
  18. }
复制代码

9 ^- M$ o4 e8 {) [  Z* x* \查询更多条件使用方法,参考第二节mongodb基本命令,查询  b) e; l  h2 E7 U
8 u( Y) w" O$ A
3:添加( g5 O: M: r- r3 L1 l, {
( F  F( S) C" ~2 m3 S
  1. <?php
    & s% I# I4 z3 Q

  2. / A/ v+ P, S  {) b
  3. //链接mongodb+ ^" O/ c. {5 x& U1 z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! \1 b& x, U, @: P6 P8 M( [8 b

  5. ; `9 A( {7 }- ^) {$ n# z( B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& y5 C- X4 m' _; j) {. ]; u7 O3 a
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ) ?8 N: k' s: Y" ?1 [
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 p& o, i& ?! C3 J
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      R" E  B* \4 u7 A* o
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

2 p" h5 F7 X+ p3 N. C4:修改. E' g3 l) M" Z. h7 X$ y% G

/ g# s8 k/ \4 Y+ Y+ [+ X1 B( V
  1. <?php
    $ _# X5 d# |: y1 _- B  N. R

  2. # I0 J( ^2 p' T0 P; h! a
  3. //链接mongodb8 R" u. B1 G. d/ w, Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # C/ `/ I1 l4 y0 x1 E+ L* M  ?/ M

  5. 2 U2 e3 j- J+ T# S
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 r6 [! f, R( n5 T1 t: X9 B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 t. P  J6 R. \5 G. J( L) h
  8. $bulk->update(
    3 b8 Y7 A9 ^, v& a7 `
  9.         ['user_id' => 2],
    3 @2 L3 B% t! k2 |* |9 Q: ^% @
  10.         ['$set'=>['real_name'=>'中国国']3 s' ^) t+ e8 Y1 T. o
  11. ]);
    ) @6 a! ?+ S" S; w* L% j
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,+ W( P! K: l, U/ H0 K3 A
  13. //1:字段不存在会添加一个字段;
    # X0 C0 O/ k7 a
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ' E+ g6 ^7 Q- u( A# f1 l7 O9 v

  15. . c5 w" v4 ]0 R0 K) t  r
  16. 0 C! F& q7 H* f3 O4 D9 P1 A
  17. //如果条件不存在不新增加,可以通过设置upsert! X7 X0 w0 Q, A7 s, q+ \( a/ J3 V. O
  18. //db.collectionName.update(query, obj, upsert, multi);
    " U" Y+ X. I- o
  19. - E( ^% e8 Q1 v! M# X3 M8 f
  20. $bulk->update(7 l$ c3 ~: w: f- U) }4 B8 E+ I+ p: G4 Y
  21.         ['user_id' => 5],
    / X* N8 V" q, k, C) r7 |6 b
  22.         [$ u* `+ Z4 |4 k
  23.                 '$set'=>['fff'=>'中国国']4 R- ~' e# F3 ?* Q' h
  24.         ],2 A9 O* \9 d- \4 t+ X8 m: v% h, R. t
  25.         ['multi' => true, 'upsert' => false]
    2 s$ S) I0 `( ~& C
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! c3 D% d) ?- d& ?& @" D# \
  27.         //upsert为 treu:表示不存在就新增
    9 j4 r+ P# W% i) m' D
  28. );1 J- f" w# q, K6 h& H, E; V
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ H5 D  m+ c, |* @  P

* [, G% o+ `# v( g( Zordered 设置. F/ Z# @' Y6 k$ c2 [

2 T0 l* M+ [9 D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 @1 r& m2 J: p7 t+ y6 y2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' y, |, ?3 n  p5 q, \
  f* }/ @6 o. a7 |& J( p) ~
5:删除
! ]' J0 p3 i# [* ]% f
( {0 j8 x; ]1 Z; H9 Z% D
  1. <?php) M. T7 ^5 ^5 O. t* l' _5 N/ f

  2. 3 c. U( o+ t1 U1 _3 N
  3. //链接mongodb$ z* Y& u8 i7 d3 `* u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) ~! i; L) p& q& Z6 H

  5. 0 b( L* t7 G  R0 k  [% N2 Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 p/ |, l& r0 k) x
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* |+ E, q9 U, a7 z
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    1 J) m4 Y: A' {
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* ~' g2 P/ B! f1 J9 W
  10. delete还可以通过limit设置不同删除方式
    1 d) I; }1 K% q

  11. / |% V; F6 `- @2 z! k% Z
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据4 X2 W% {, g4 H* [- r6 J
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
+ |4 X# Y; l. h$ O4 Q
% _9 d! O& v  O
6:捕获异常8 |1 I5 b7 {6 V

0 g3 I. \7 K6 V7 j5 \
  1. MongoDB\Driver\Exception\AuthenticationException
      i6 Z) _( Q1 D" l1 k
  2. MongoDB\Driver\Exception\BulkWriteException
    ; U& ~0 R7 C( S) v6 b1 ^/ J
  3. MongoDB\Driver\Exception\ConnectionException  ]& ?( e& V% U0 w3 X2 p4 ~6 o
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    - ?" z" w' G' D3 G: q- Y8 q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ' X' R" d  }, }, Z
  6. MongoDB\Driver\Exception\ExecutionTimeoutException5 R( y6 w  z6 z0 h( g
  7. MongoDB\Driver\Exception\InvalidArgumentException$ I6 ?4 V4 U- _7 Q5 G
  8. MongoDB\Driver\Exception\LogicException9 H0 k3 J  o% l) v6 d
  9. MongoDB\Driver\Exception\RuntimeException9 ?9 C. a: t& r0 @  j
  10. MongoDB\Driver\Exception\SSLConnectionException
    1 L* _. o" I7 r+ |! o
  11. MongoDB\Driver\Exception\UnexpectedValueException6 a9 v# h- X6 X) \; H( A
  12. MongoDB\Driver\Exception\WriteException
复制代码

/ w$ e# y, ~5 a' G/ h4 n: W' w; `; O) s+ B+ g$ w
游客,如果您要查看本帖隐藏内容请回复
) T  g# ^0 _$ {9 }2 d
点击查看全部
) d- n5 i% M+ t* [" |4 u, [2 l$ T. @; G: L# W. u: A

* K/ G# f' q2 N! Z% c$ J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:49 , Processed in 0.058046 second(s), 23 queries .

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