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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11559|回复: 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 i% L6 ^6 {; E' L1 D* ^1 `

& C( l1 v! i" |  ~/ U! e2 J! G3 k下面用PHP7新的API总结一下:9 c' y9 }7 z$ \) y2 z9 m
* z5 b, p  c/ Y
一:CURD( g4 I3 j2 D" Y. ]' V

$ F+ {* Z8 b1 B# ?" `) F1:链接% M$ w+ a  u( b+ I/ W+ m
. F/ z& s1 ?. |! N
  1. <?php
    % p) e- ]/ L) Y: g+ U* D4 W3 d
  2. //链接mongodb
    % R/ \7 L" ?1 `# I1 j$ M7 ~+ q4 S4 B
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');$ U- w4 c" R( n; |" Q! K
  4. root 用户;123:密码;如果没有密码则不写
复制代码

+ Z0 ~# E- W" C" R# {5 q, q
' }+ c: M- O$ \# V: Z7 ?2:查询& B4 _9 X* t) F/ ^
8 f$ H! f# M+ N- a1 E2 g1 R0 j. k7 r
  1. <?php
    ! F/ T' k4 B5 M( H; a  U. m% e

  2. 2 r% M5 I8 g9 O( O
  3. //链接mongodb3 ~% S( S+ T$ v, |  c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , ^; H, b  H' A+ p
  5. 0 y; P. H; C/ c- Z( _% O& u$ n
  6. //查询
    1 R+ R+ Q! K% u- T  {( D  y3 p  f
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0* B5 H, b* [% w) B: j' F
  8. $options = [( B( k8 A. W% }# n
  9.    'projection' => ['_id' => 0], //不输出_id字段
    3 ]6 D! o& ?2 [4 D
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- a& N4 I& s! z
  11. ];. J2 ~9 p6 p: I# `  G4 u, k! A* ]
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    : N" u* z9 b' G1 }" P
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    * O9 `/ l# s- P+ x  `) {+ o" ^" g

  14. ; g$ l0 t2 o1 N9 [9 e7 Z* C, Z' `
  15. , {% H5 N4 z, \5 ]& p5 b& z  ]
  16. foreach ($list as $document) {+ Q" P0 K; F# G/ z+ `9 l- C4 a
  17.     print_r($document);
    ; d; S+ z# O: o- C  y
  18. }
复制代码

9 o/ E9 j7 N2 {+ f3 ^- Z# p查询更多条件使用方法,参考第二节mongodb基本命令,查询
/ t$ x& S2 W- P) g9 M( @* f
# m# h0 g6 ]. c& f" Z5 r$ O. }1 n3:添加4 {" c- g0 |/ n# G" Z

: s2 w4 A, j) }6 s- v* s1 e3 n4 p
  1. <?php  ]/ L2 M; M7 L% m9 m+ N+ N
  2. $ \/ j2 B3 D3 L0 P2 p
  3. //链接mongodb6 \6 Z* P" |& l9 {0 q0 B6 v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' J8 p0 A/ v# c  g' K2 n
  5. / Q, N: n( c- u$ }" Q: ^0 l3 d7 F
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# Y1 q: o3 L  j" p2 ?7 ]
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! Z1 D2 U/ ?; W
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);) S2 U! M8 y, ]& @
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 ?7 l" ?/ s$ w$ r" d
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, o" d0 n+ |0 F/ P
4:修改
4 H6 O+ M5 w4 e% r: k
2 [, g, y3 ^" C# A% n6 M4 U
  1. <?php; z) }+ H1 n; q

  2. ; K/ W8 g' r) b% ~
  3. //链接mongodb: @# _7 @3 f$ k+ t8 e2 y) D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% l' _# S, `1 m& O; C
  5. ( _8 ^) Y- O; O$ F" w! H
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( S7 F0 r; r( V& L9 p) b
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      i7 \8 q6 ^+ ?7 c; q
  8. $bulk->update(
    ' x9 B' _# p) q' ]' \8 {
  9.         ['user_id' => 2],2 [$ s: q5 |2 `6 q2 m0 x2 L) }: q) r
  10.         ['$set'=>['real_name'=>'中国国']
    0 y+ n2 _, F: M+ r' Y
  11. ]); + v- U0 J8 g1 z: W, a2 f
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ w0 z4 C6 Y7 y' `
  13. //1:字段不存在会添加一个字段;
    ! w" l8 j5 F) o9 V
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ) y) b8 s& L7 s0 k

  15. 7 s  T* p6 o) C) \3 B1 E

  16. 0 @2 L6 m  j/ G8 h0 ]) [9 d' s) Q
  17. //如果条件不存在不新增加,可以通过设置upsert5 K& d* t) ^3 w" g, _8 t
  18. //db.collectionName.update(query, obj, upsert, multi);
    & f4 P7 v8 Y3 f1 f, e; A

  19. 5 g( L) v) \+ a, K) m6 f5 i4 {
  20. $bulk->update(! X. I- y- t6 C  Z2 F7 y
  21.         ['user_id' => 5],1 u6 y3 k4 C- ]3 `) D7 \$ i
  22.         [1 z; E; Q, G) Q: \& t
  23.                 '$set'=>['fff'=>'中国国']. p! q- T9 z$ P! X( T
  24.         ],
    3 o4 {" `: P# E  c0 E, `  t5 W7 @  w2 O
  25.         ['multi' => true, 'upsert' => false] ( Y" P/ W) t2 B$ R( U
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    / e* w; y$ h4 X- \2 ]1 K! X9 U9 ?
  27.         //upsert为 treu:表示不存在就新增) S0 p' _0 t5 T
  28. );8 J( ?% u' q+ |* w% \6 l$ c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" A. E2 U- U- o- D

7 P+ P4 }8 u* gordered 设置& d8 J; x' O6 P% N) \% ^$ b) E7 W3 ^

# W! f/ R& u6 H' r# g1 r/ L; _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: N0 l# }. g/ F
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行# h; a  M$ T. ~3 T+ {4 L
8 X0 o) D0 W( W
5:删除. @6 P& Q5 t4 Y. w# j: Z! D* k

% T6 R. O* Q/ C+ j+ U
  1. <?php
    / \, f4 _" c2 a9 c' I

  2. / {- p" z% B; ~& s
  3. //链接mongodb' s. m( Z  E( s) M/ n- v1 D8 P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) O! N6 E0 x' X& ~: T6 L  a9 I
  5. ( N& a: z9 D5 W* ]. `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 ~' B9 d0 T' j8 V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    , K- j- p3 R) v! M% G) J
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 u; B# P9 J: Q7 U$ Z4 G/ K  G* b
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合+ B* G6 O- ^# b- N  H6 R, u8 o
  10. delete还可以通过limit设置不同删除方式9 b* K; i' I; n. o

  11. 5 O# ?! }$ f3 t) H0 `% J+ D
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据' o4 }4 O$ A& Y+ A
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
. N+ ?/ T9 s0 E8 A- b: H

" G8 S, Y1 D; c# g6 Z3 y6:捕获异常) j6 ^; ^% W- a* n$ n& @# q

, N2 J  t# l  {% g1 y6 M
  1. MongoDB\Driver\Exception\AuthenticationException/ x/ j6 |1 S0 `8 ^2 [+ W& Y
  2. MongoDB\Driver\Exception\BulkWriteException
    & m4 q2 D' r. f; C1 D; [- o
  3. MongoDB\Driver\Exception\ConnectionException) P  y" B& p5 c* u% k2 o, p
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    $ T6 o$ g$ Y/ T$ Q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    / U( ~: Y4 J/ k. [- q0 e6 d' f2 O
  6. MongoDB\Driver\Exception\ExecutionTimeoutException# D. \: H9 ~1 ]
  7. MongoDB\Driver\Exception\InvalidArgumentException
    % i3 R% y$ n0 p/ k
  8. MongoDB\Driver\Exception\LogicException1 D% V% g4 @0 i/ ~- H2 X
  9. MongoDB\Driver\Exception\RuntimeException) k, X* @$ a4 y  B. I
  10. MongoDB\Driver\Exception\SSLConnectionException0 c( T0 ?0 M1 I0 l/ R
  11. MongoDB\Driver\Exception\UnexpectedValueException: s- n# V  c& Q. [- l* b7 t. J% r) _' q
  12. MongoDB\Driver\Exception\WriteException
复制代码
5 m* g! |& p. f- @
. s1 x  n0 @7 H- `2 D* O: H9 Z
游客,如果您要查看本帖隐藏内容请回复

) [: i  d9 o( A4 p( L; P2 N2 I; c2 }/ a点击查看全部# G5 P+ B3 T* _/ w# k
' S1 f3 y# }( C5 y! ]2 f
' ~/ y. P3 j6 d  _3 l- B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:47 , Processed in 0.131440 second(s), 20 queries .

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