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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15376|回复: 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不支持以前的写法。
1 f% p3 N" e& I. @' z
0 ?& }: Z! b/ ?3 N下面用PHP7新的API总结一下:7 e3 k  b/ E) i$ h: R" G% }: e

0 z6 ~% k0 D# w9 K1 N! ]一:CURD
5 G0 H6 h  r; b+ |) C/ G8 x
- b" j3 c8 k: L$ Z& s* V5 g% T1:链接$ l/ b3 T6 I) t. r: Z5 W4 O2 q
  X( v, V1 k' e) _* e. v
  1. <?php5 D- G: u3 ]! H8 j9 M6 y
  2. //链接mongodb. h* x5 i. ]1 |; s  `
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');* O0 S+ t, j3 ]! T. ^
  4. root 用户;123:密码;如果没有密码则不写
复制代码
$ k  d# }, ~; \/ D! j" ^
" ?$ h' e  s& S* _
2:查询2 M. a2 x$ H( {$ r7 I, l
3 F# C* Z8 \& z3 }! T5 L
  1. <?php
    # y+ F: R; P3 C4 e3 t

  2. ! s/ s1 [. g+ l9 h7 E5 v4 U
  3. //链接mongodb6 H3 m9 q& D1 }; P8 z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 ~9 }2 m7 K7 m  `$ f

  5. 9 L  z' E+ H( e. Q2 r' r
  6. //查询. j; H- X8 D4 e$ i& r  t
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    . W% y0 G# O$ T
  8. $options = [8 b! n0 b8 e9 o- T
  9.    'projection' => ['_id' => 0], //不输出_id字段7 o" N7 j& I( D" r- c# o
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    * X# t9 |9 F6 m' F
  11. ];7 `! r% a( `( A4 i3 s0 Q& }  u" ~: P
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    2 U5 k0 M) y) \2 D" i
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合' i1 ]: k% @& }; Z' k

  14. : Z. X2 ?  V( z6 X  _

  15. ; d8 j3 g$ y6 _0 ?% E2 C& K: M
  16. foreach ($list as $document) {' a5 {) @: p+ v: _
  17.     print_r($document); 8 z* s2 S" f/ b, e
  18. }
复制代码
' i, b) z/ R3 ?/ o: Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ `' N5 ^0 H; I0 ]' n
$ n- S" o# p/ F, u: e: j1 u( i" B3:添加& g, a9 K( M% c) R# e
3 b$ V" a+ A  e/ r/ W$ O
  1. <?php) w" E9 e4 P' D" b. x

  2. & l4 M! M7 t9 b% ~
  3. //链接mongodb! _: [, N; Z! U) d* p
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 a9 O6 @8 |* b8 @2 ]6 A
  5. / ?3 _4 j& q7 E! h, x4 o* ^! x
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% L+ |- p# p4 ~0 a( W: C' D
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( Z  a3 y5 V/ d  A
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);  c8 F; _2 l# Z8 r2 N
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    " X# g6 v* P9 s& S2 X7 f9 v- G
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

1 f: j* X( Q' ~1 C) E7 ~/ z: C- A4:修改
! ?% a  W" i: L* K2 e
1 y8 q2 ~  G6 M% Z
  1. <?php3 v4 R4 V# H( ]. \* d) j

  2. & p3 R7 [/ r  T$ |6 O
  3. //链接mongodb
    , I9 u! J0 i6 R+ f+ p! t4 [# N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) G; A3 q$ N: u
  5. / {: c) F0 Y# p* }2 Q2 j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 @; g. A9 n$ w0 d1 x
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    3 F6 h6 c& s1 Z8 c! S; i" p
  8. $bulk->update(. Z1 p! N! b' r& \
  9.         ['user_id' => 2],; p. l" x3 x& z! v6 n
  10.         ['$set'=>['real_name'=>'中国国']  |6 B5 a) F: U8 ~: N" O8 s( _
  11. ]); % }5 M0 N  x4 r6 I; P& Q& I
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,& [" v% @2 d8 i3 [# b
  13. //1:字段不存在会添加一个字段;
    ' n. b% q3 t: A$ V, }) _
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    0 B) n( `7 F/ Z7 S8 N% }
  15. ; t' L4 O. n2 t* j
  16. , s, ~$ q$ _- u+ H' K% f; H2 a
  17. //如果条件不存在不新增加,可以通过设置upsert+ [+ I( {+ {. x# ^9 O- A
  18. //db.collectionName.update(query, obj, upsert, multi);
    ; h- o9 b3 S$ i1 \* s* Q

  19. % W% i2 d6 b5 r' D$ R/ y
  20. $bulk->update(
    + n" j* U2 d* }7 \
  21.         ['user_id' => 5],; u. w& q& C. W  _; N
  22.         [
    : E1 D% C2 b% y8 k9 T  [
  23.                 '$set'=>['fff'=>'中国国']+ _1 ~7 k: q) W# P- {: z* t0 A- r
  24.         ],, t% Q0 y5 e) ?
  25.         ['multi' => true, 'upsert' => false]
    . k2 A$ @! w  k6 Q& r
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条9 D- v6 n" r0 s5 ?; S9 a( n
  27.         //upsert为 treu:表示不存在就新增
    . g* @, V' y  I$ W: Z
  28. );6 M4 ~2 r+ x( t8 \
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

9 o$ u& G' V' T7 j' Y
" L5 U( R3 f) Aordered 设置
' [2 l* j" u7 ~$ F( C4 V. I/ ~& W
. e- Z) b2 G6 v9 p3 m1 [1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。8 j2 Z& G7 R* e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 O/ d! }: V1 P4 |7 E
9 K7 R4 N0 s) r% N+ e+ e* i5 Z5:删除
$ p4 n4 V% i. H4 l: h4 I) a% ~" `  b* h- B
  1. <?php
    $ x) l+ ~9 K) G* S- _

  2. ) D+ G  ^, H9 a
  3. //链接mongodb+ I4 {1 v# A$ `( K8 k+ F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - Z: e! O/ T, p+ m

  5.   f- ^1 w2 q, U* R! g, f9 ^2 w7 ~2 k
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : `" x9 Y# x* }& r+ P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- p+ I, v  D& F
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    0 T' C: l2 n5 i0 d5 `1 J
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 o' r( O# H1 c! b% W# I
  10. delete还可以通过limit设置不同删除方式
      ^( l/ n8 f0 ?: _9 ~3 o
  11. $ ^: u* q& G; z/ x7 z3 O  ^
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据& n, C) i* L& I! u8 Z  h
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
0 i, u1 w1 s4 Z

2 {6 z; _/ A- N. }3 Z6:捕获异常
1 h+ d, f3 e6 x9 u. ^# o' E; ]7 m2 q
  1. MongoDB\Driver\Exception\AuthenticationException
    1 @* Z4 b: L% w
  2. MongoDB\Driver\Exception\BulkWriteException
    ; i$ }/ N: A- a- S3 Q  e
  3. MongoDB\Driver\Exception\ConnectionException' Q! v$ m$ H. J
  4. MongoDB\Driver\Exception\ConnectionTimeoutException: t* ^' n& c3 U  I4 `' B; y$ O' O
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口4 K' s& ]% `: Q# B* c$ ^6 G
  6. MongoDB\Driver\Exception\ExecutionTimeoutException7 \' g8 b. ^* X8 d7 J
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ! d: S0 q# p+ `/ Y7 I! A# A' s# h
  8. MongoDB\Driver\Exception\LogicException. w0 d$ D* ^0 x  `# @4 L% e4 C
  9. MongoDB\Driver\Exception\RuntimeException; v  d; p2 p2 z+ M7 {
  10. MongoDB\Driver\Exception\SSLConnectionException/ |3 q8 A  M" v) ?; ]
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ; S  b; Q" M" [. l7 ?0 W) o3 [- h
  12. MongoDB\Driver\Exception\WriteException
复制代码
+ V' ]; |4 P' O# l; t( v5 T
# I( Q8 T: V; z, X
游客,如果您要查看本帖隐藏内容请回复
+ X  L" J7 S# \4 l, }' z' v% T8 M
点击查看全部
8 [) l% ]3 U- l; W% v, ]& D5 G5 q# K. S; q+ Y9 o( c
9 `* C" K5 q: W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 01:06 , Processed in 0.055042 second(s), 21 queries .

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