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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14730|回复: 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不支持以前的写法。( C. q& N& X9 S3 N

) e! p$ u  Q% _9 a" @. [下面用PHP7新的API总结一下:6 q1 t6 |1 p; K, c3 j  V( ?  x6 B
- `7 n5 Y  E5 L5 g  O" d' m" N' Y
一:CURD5 P1 G  J$ _- B$ D
" s& `1 e/ E: @3 p
1:链接/ H) r- p. t1 |; L9 E; v4 r
3 [) l& a) ~% i) q8 T5 @+ O
  1. <?php: `  l1 N7 u- G9 O" S
  2. //链接mongodb0 C1 ^  b+ U9 s; s( H. J0 R
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
      S3 K4 p# X, @2 S3 E. s4 v
  4. root 用户;123:密码;如果没有密码则不写
复制代码

3 ~: l3 _3 h) J8 G' B& j9 X; y. K0 U' W. f0 N
2:查询
) p: c" @( D! y7 L6 T, e2 k4 }
  1. <?php" I! X* {6 x' ]6 e& _3 o

  2. ; }, ?8 Z& p/ L  @. a) c2 i3 L
  3. //链接mongodb" X" m  U. |. V6 V! [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. n# f4 x7 f9 X8 J
  5. # l* u3 o$ \: l. v. M
  6. //查询4 D) L' \% @1 I, J1 H4 {
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ M. C2 L2 Q/ Q. Q! z; D
  8. $options = [+ Z* j, p  P; [9 r' `7 I, |
  9.    'projection' => ['_id' => 0], //不输出_id字段# `+ G1 `# q* o& X6 g/ q: J
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序% n- K6 t! M/ L% M- w
  11. ];
    . W0 i) o6 b3 a& N' w; Y) n0 d
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求* N- h; v" B$ B: s8 K# ]6 Q9 ^
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ' M- U6 J: O( A) D
  14. , J( l7 }- Z, S! t
  15. 0 w( _& D. ]4 \8 Q9 m- ?
  16. foreach ($list as $document) {
    & _/ l6 O! W7 d
  17.     print_r($document);
    2 U& g! h  Q# Y: r) g$ z, l
  18. }
复制代码
: ~3 z  M$ k* U7 `
查询更多条件使用方法,参考第二节mongodb基本命令,查询
' ?4 v: E; M5 v/ S0 _3 U9 e$ T0 q( P, g0 Z+ X- I! j9 i
3:添加& }# ~6 m4 S  h$ g

8 _1 J! @, f; j% H! J% }
  1. <?php
    6 G" K+ m5 p+ t! L0 V0 E
  2. " ]9 s' H# f/ w& |" K. ^
  3. //链接mongodb  y! B7 D$ r1 x9 ?1 B' n
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : z1 ?1 c( z8 q. ?5 Q

  5. 9 ~8 v( e0 ?' B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, s; g. T1 R" U, A! e8 ?
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& e5 ^8 `& q# P& w/ f8 i
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    - }$ P( R% `1 u
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    # h) o* B9 H9 d! T& q
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

0 t* g) Z5 b! i2 Q4:修改
: c1 s  r, `; X
; N: w+ h0 N' `
  1. <?php/ R& r8 ?! Y$ A
  2. ; c) k$ q! I# @1 w1 @  U
  3. //链接mongodb" ?$ [- ]6 x5 e6 j6 s, b# m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" P! V3 v; f; I5 I4 {; _, F

  5. ) K- `6 B* D2 X7 k/ Q' h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 m/ K& l5 v" B) }7 G+ [
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' U% o( p4 `! h- k* G0 d1 {5 e* C
  8. $bulk->update(* f$ p3 T/ s' ^( ^; o0 M
  9.         ['user_id' => 2],8 m$ b+ ~9 z8 y& q( z- p$ w
  10.         ['$set'=>['real_name'=>'中国国']! x; `8 y6 l5 |, e# H8 [
  11. ]); ; K/ S2 Q7 M( U: E) N+ O% k. o, k
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,, N& m0 D: h! @3 T  ~
  13. //1:字段不存在会添加一个字段;% g( ^) l8 V8 |" T9 p8 r
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert# q4 H/ \; e" H; U/ t
  15. 0 ~% w/ J. ^( Y' m/ }
  16. 9 ^! E0 ?! n) r/ m: l6 w
  17. //如果条件不存在不新增加,可以通过设置upsert4 z! m" o. r, x4 P- C# ~  q2 N6 L
  18. //db.collectionName.update(query, obj, upsert, multi);
    ! x* K+ i- h* n# R3 C9 Q5 A/ U! ?

  19. . c7 p1 Z+ o8 X1 W+ G
  20. $bulk->update(
    " r$ }5 {# r6 L- g9 V
  21.         ['user_id' => 5],8 i8 k7 Y- S' i  I  w' p
  22.         [
    9 m" B- r1 R# e2 O( w* c% Y
  23.                 '$set'=>['fff'=>'中国国']3 m; b- W8 G# c  s+ n& ~  S: m$ p/ w
  24.         ],
    & F1 ~7 a9 s6 A9 U8 H9 T: v
  25.         ['multi' => true, 'upsert' => false] + ]6 U% |1 m" c# b
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 m2 P0 l$ G6 p& G7 q. H
  27.         //upsert为 treu:表示不存在就新增4 q6 f; t5 i$ [# b; N; |
  28. );; t& A( h* \1 \# Z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

9 C+ Y4 Z, k% z; d+ U" ]9 ^% j# X# _5 B$ l3 l8 O0 i
ordered 设置
! u  T4 }5 a, Z, ?/ w- J. _7 B% P2 G) }: ~7 ^
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
, M1 ~4 G& j& x% u1 t2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行8 a- Z$ H3 q# ]) E- x% H
" g  |4 X; Q3 u- g0 G5 A) Z
5:删除
7 e' K! r( d4 ~9 |5 l
1 S2 H' \% M# u
  1. <?php
    ) O3 C& s7 q3 j+ e
  2. * ^  P2 P1 I: [) U. s* U
  3. //链接mongodb
      |$ F$ x# N! x; `& J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    0 b. x" `9 V$ t. q& O( a$ M
  5. 7 s4 E" a5 t' ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 z3 ?- m% S9 b' N
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    2 {) b1 m# a/ Q$ p
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段* s1 v* E+ X/ M+ i: Y; E; Z( e
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    + T* v( o% r+ r1 ~" [4 F: ^
  10. delete还可以通过limit设置不同删除方式; d5 Q1 L- v' \5 G% L
  11.   _" Y/ b$ ^. b+ q+ i
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据' e) W. b1 B0 f0 K7 G7 a
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
# v! Z2 l! r4 Q, E5 T# N
5 r) f) k: r% W5 q+ @- r9 W2 [
6:捕获异常/ D# C* q" ]1 a% ?

4 M, S' r: b% ?$ T& f0 e1 u) y
  1. MongoDB\Driver\Exception\AuthenticationException
    1 q/ b( ?  O" N* }2 _& W
  2. MongoDB\Driver\Exception\BulkWriteException* f; i$ _' Q8 t. W4 s. R- \$ x1 U2 d
  3. MongoDB\Driver\Exception\ConnectionException
    9 M0 ~$ U) M1 f& d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ( n, P, r& y3 m+ z* ]
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) g7 _7 ~  |/ N" W! S0 D+ o
  6. MongoDB\Driver\Exception\ExecutionTimeoutException4 D/ G# }  I0 t3 O5 ~+ S* v/ t
  7. MongoDB\Driver\Exception\InvalidArgumentException0 D- B" U) @; b2 s/ w3 i
  8. MongoDB\Driver\Exception\LogicException
    3 `* z. ^/ O5 n6 |2 C7 ?$ x
  9. MongoDB\Driver\Exception\RuntimeException
    ; x6 [. B& U8 U4 |
  10. MongoDB\Driver\Exception\SSLConnectionException  s: d: s4 m4 U6 X; S* @/ p/ W( {% z
  11. MongoDB\Driver\Exception\UnexpectedValueException& r& w. N8 T1 W' H' p3 h. D' N
  12. MongoDB\Driver\Exception\WriteException
复制代码

& m) J* m" ]* {4 c! S% \& K+ {/ d2 d! u1 y
游客,如果您要查看本帖隐藏内容请回复
; y+ J) M# i8 S3 T* A. t" o$ O
点击查看全部8 c* ~1 `: s/ f

7 e6 j) f- \4 J8 i! L+ b" ]* h' x# u  ^4 L& Z( E2 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:58 , Processed in 0.070601 second(s), 20 queries .

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