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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14347|回复: 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不支持以前的写法。* z4 P# t7 w0 G! }' t

. C( B: ^# j5 T, @% t6 j% Z3 V+ `下面用PHP7新的API总结一下:1 ~! G; }5 o7 S  t: N$ Y  \& u
$ e2 ^% L0 c9 \, I
一:CURD& A6 t0 P/ P. e  i/ w

/ e$ r" {5 H+ Y. |2 j1:链接
5 C- O5 b( |% p1 x! U: [$ K& ?$ J- j1 Q1 `* W4 Y' t  c% s& U
  1. <?php
    & J1 p( ?/ R* Q7 o8 H
  2. //链接mongodb4 t+ A( w# `9 z9 {9 [
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    : T8 v) e* t6 B( a$ Y' T6 j) \- E; X
  4. root 用户;123:密码;如果没有密码则不写
复制代码
* E2 B  Q3 c+ |  ~: c# |
4 b, o4 i# R! B$ a6 c& o6 ?5 J& t
2:查询
1 V0 Y- `! |, {2 W* Q5 y  m
+ U/ F2 p5 Y* y
  1. <?php
    / R# Y) J- ?9 g. }' w. E1 p; D5 M, Y
  2. ! ?1 b1 U, e& [( C9 L
  3. //链接mongodb
    & q' e' T- ~  U0 W# O& b- h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' U/ K9 H6 W$ e% E3 @
  5. 9 M$ J& x( h* |" D3 i$ |; n
  6. //查询4 e" V" `' c. T3 t1 K+ N, `
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于05 y1 n3 w) R. j. Q, N/ [6 d
  8. $options = [7 M# z/ E; p/ S/ P" ?
  9.    'projection' => ['_id' => 0], //不输出_id字段7 z* s- u# G: \& A' l. F
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序  w8 ~' p5 a( X% m1 r. {/ M
  11. ];- C3 n$ q/ m0 i' m. t* I/ B* e
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求4 R. Q% |* d% P) y; M5 X
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* n* M) Y5 z" k- v+ u! ~4 E' }
  14. ! O+ m% T; d/ w
  15. 7 I3 V) S; _% R" k5 j5 M- g1 ^: H
  16. foreach ($list as $document) {. L& c7 E1 S5 e
  17.     print_r($document);
    " R' X8 }- ^. M0 d! b% T$ j) n' v4 ^6 o
  18. }
复制代码

* J$ S$ T" S9 j: |查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 k: ~5 c/ a! h! ?* e% J
. i& A* u0 x7 j/ o  S8 Y9 l: a3:添加
* i' x- I# i( A( B7 B3 A$ V( q7 P8 P
  1. <?php
    ) @4 n! c/ ?; H1 V

  2. 4 ~4 q# j! Q: t7 v0 W2 H  v
  3. //链接mongodb
    & l" {- ~; o1 i4 ]8 ^7 ]+ `; H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # i6 i( ^" ^. h% X8 H. Y% \  D# C

  5. * B  Y( _. S8 M5 Z, ~% n+ P! @/ d! _
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    * s6 r8 ^. Q. v: L8 f9 U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 \# p1 J  g1 b7 g# o" Z
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);1 Z, ?2 _+ s3 h2 {7 q
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ @0 s% F  E) n# a+ N# Q% e5 H
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, t' x2 _; \$ C4:修改
6 i' |- J1 g4 L1 O, s- J/ [9 H4 ]- v! X  J& M  @/ H+ r
  1. <?php
    . U1 u0 E% L4 q( D% e5 e
  2. 3 o& z% a6 S. a/ @
  3. //链接mongodb+ `: h* \* t, P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " y8 [0 G$ P) l8 \$ C
  5. 8 W# N" o  C) _0 V" o- q  E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 x* e0 q, J; `/ v( z2 w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 D( A* K' H7 J) p
  8. $bulk->update(
    " c  S: W+ `* U7 D7 I; ?: U
  9.         ['user_id' => 2],& N" ~; L9 v1 P* Y8 z% Z2 t0 B: U
  10.         ['$set'=>['real_name'=>'中国国']8 v  |. z$ j: X2 R, e% u) \) k1 Q& o
  11. ]); 5 J. _2 x% M3 V9 C5 s2 N
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    5 W- {: L2 A- _( W+ Z1 |0 n
  13. //1:字段不存在会添加一个字段;7 R, n. r: K  B7 R3 g2 p
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    : f/ o% B7 x3 u" Z2 d$ v5 D* L" |. I
  15. 6 o' c3 D, |- {- O

  16. 1 U* J6 Z5 i* w
  17. //如果条件不存在不新增加,可以通过设置upsert) v; |5 g3 C5 R7 X0 O( r7 L
  18. //db.collectionName.update(query, obj, upsert, multi);
    6 o9 Y8 m) P( h1 Y! p2 D0 `
  19. + c/ @) F0 W( @
  20. $bulk->update(4 [% D; B2 y# u; U
  21.         ['user_id' => 5],5 g& y/ I" g+ ~& i
  22.         [
    + X6 Z5 v; @, t
  23.                 '$set'=>['fff'=>'中国国']% l9 b6 |) m# u/ R; Q
  24.         ],
    7 e% j5 ]# F0 t
  25.         ['multi' => true, 'upsert' => false]
    5 H: ^6 `6 ?7 u8 W* R( ?1 y6 u1 d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ' Y+ @/ |$ ]8 p& M: L
  27.         //upsert为 treu:表示不存在就新增( o, e  p0 p( }3 p" e; Z- j6 D1 q
  28. );7 N6 M5 F  k) K8 s8 s+ Y
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. \/ C" N# S) R1 P

' d1 \- |6 y0 _/ L# [( [ordered 设置
4 E( v9 x( Q4 y6 X7 i
: @' T1 y3 D+ _4 L4 n# n; u1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。* G* J* B6 a) M
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行, I: G* R  e9 e- v, \' o

7 W$ \, q+ @+ @. Y' t  J1 S8 F% Y# R" O5:删除
8 `! n( n& z0 k& [  q
7 M. }1 @3 t$ w) k7 r( N, S
  1. <?php! L* ~0 ~; y, L0 x( Y6 X

  2. + s: z4 ^# K9 T' J( N) B5 {, N: U
  3. //链接mongodb$ N6 l- o  _8 d; Z+ K  D+ [& S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: a+ [3 h% l6 T# a
  5. 0 a- R+ X' j  u# l5 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) E8 I# X. v* E" B( [
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' o1 O/ _5 p, }  p! Z# p
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ) i8 L% S" D4 u& a" U  U
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合, w: o% [+ z" d: I; ^( d
  10. delete还可以通过limit设置不同删除方式
    ; \/ M- @0 o7 I% d
  11. ; Y( F' ^% C5 I- @, _. u4 g! S
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据; j% t8 P! G) v+ r4 d0 H
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

7 O- i" [: |  X" B* Y
0 C+ K# Y6 W* U  `5 v3 T6:捕获异常& B5 \: a  d( W& Z1 o, O
8 B. g( r0 A* Q+ |" C8 Z
  1. MongoDB\Driver\Exception\AuthenticationException
    $ @2 R3 z, @1 A4 R2 q% A2 p
  2. MongoDB\Driver\Exception\BulkWriteException! X0 s+ s: g# C5 g. q7 s7 W
  3. MongoDB\Driver\Exception\ConnectionException" _1 P) h0 o% N) [) A
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    - U  Z- a8 E, K: K$ d
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口/ x) e5 Z' E) B9 h& u5 e4 ^' ~
  6. MongoDB\Driver\Exception\ExecutionTimeoutException0 c" i$ t2 j, A7 K& b% R% _
  7. MongoDB\Driver\Exception\InvalidArgumentException' ?% K0 d6 F' R# }$ S8 y4 E
  8. MongoDB\Driver\Exception\LogicException
    4 Q0 a- q! h' k# ~' D- U/ ?
  9. MongoDB\Driver\Exception\RuntimeException5 }3 ]3 ~% y# g3 P9 S
  10. MongoDB\Driver\Exception\SSLConnectionException- e. k8 q6 i) J9 O% u/ |7 m, M
  11. MongoDB\Driver\Exception\UnexpectedValueException/ f6 T8 E5 T( A
  12. MongoDB\Driver\Exception\WriteException
复制代码
( G5 v$ v" u. |$ F- Y7 ~
: b% W9 x& v. y- |3 E
游客,如果您要查看本帖隐藏内容请回复

+ k, K$ C% J' m( w点击查看全部3 R+ R! j2 @9 r& [

/ R* f3 v& B( S, l9 u5 u. O* B# [0 N* m' c% ^) Y' n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 16:25 , Processed in 0.060482 second(s), 21 queries .

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