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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11550|回复: 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不支持以前的写法。
' Y: _3 [; C# ~- k1 W8 c& M) z+ Z, E0 p
下面用PHP7新的API总结一下:5 @- @$ d$ ]/ P$ \4 z6 f7 }6 M: Z

3 T8 @' ^" p% i/ {& a一:CURD; o# _8 G- t  c1 y

4 M/ j/ o! o/ h. S5 d1:链接
# t3 X( |7 q$ ]; {& M5 m2 E( h
  j- ~+ d' E7 \6 t* M. X
  1. <?php- @8 q, `& {! E0 v+ _) Y# s
  2. //链接mongodb/ l2 u  f, [1 B) ]0 d& f, ^
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    # n5 s: ]) T' L9 X& l4 _
  4. root 用户;123:密码;如果没有密码则不写
复制代码
4 }7 C: o1 J* v2 X2 A7 i2 ^
( ?1 y2 x( R) d* H8 Z3 B
2:查询' P) }; Q: c6 @# t% C7 J. f; {* O2 ]
" l8 U* T5 I7 a" O+ |5 z
  1. <?php
    5 b9 m' K' S) b5 k0 I1 ?3 s

  2. 3 {5 Y! ~; g) X4 p  _5 r
  3. //链接mongodb6 J' c+ i/ C( M% `5 k
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' b0 V+ B9 r- Z! S% K6 C

  5. 9 r4 a1 ^6 h  g: x; F
  6. //查询
    1 E$ p! T2 ^, o, C2 Y5 ~' O
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 J6 Z7 S5 X6 C' W
  8. $options = [4 W9 a! O; a6 g4 }0 j2 R# N
  9.    'projection' => ['_id' => 0], //不输出_id字段
    6 G8 ?( I; E) a* ?1 }; L! L
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 u  U6 _( `$ v4 l( T
  11. ];7 ?$ a% m  N& `! M+ r) n* m( _2 w
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 D$ e: p. j6 D" j: f$ w, a  j
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合+ G8 j" A" y0 p/ k7 l

  14. 5 [. ]9 g" N2 T- \7 H* ~
  15. 5 N; _& e% o+ _2 H
  16. foreach ($list as $document) {2 M! P, k' K8 w
  17.     print_r($document); & z) o. c9 ]! w, w6 _4 N3 A
  18. }
复制代码
/ y( W+ l# c; N; q
查询更多条件使用方法,参考第二节mongodb基本命令,查询, |4 k6 ~: I5 p! R
5 H* j4 ^* j) H
3:添加8 Q3 L7 x" B0 d- f6 r7 ]. X9 @
0 I& P% e$ ?( f4 A  c: }0 U
  1. <?php% d* {! I1 Z* X+ ^3 n

  2. & c3 ?0 y* h# d4 c$ \8 @
  3. //链接mongodb0 t9 M3 r( S' {+ Z! Z7 x
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . p% y) r. G; i
  5. 7 r! a" j0 I8 _" O3 Q
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' I1 D0 R) [2 I: M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 Q3 P0 d6 ~0 G$ f! {
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    - ^; O/ y" @9 {7 w8 H4 K) ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    & [1 x4 }2 Y9 X  `1 q1 g% s
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

8 s! a6 \0 ?! ?1 J4:修改
0 U, ?9 H% r: E  w
; e# E; U$ H6 [4 w# ^
  1. <?php  O8 ^: e: X- c  g) c& F

  2. % ?- Y. N+ J  v. x2 c+ L* S6 x
  3. //链接mongodb
    3 Z9 X8 C/ F; M5 h% m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 O8 u/ O) a: p1 q) X
  5. $ \4 w4 s; m. _) ^/ i4 H' r
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # A9 l  p. Z- ^! v1 `/ L9 T
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : g. B: U1 ?2 [  ~+ O9 h, b; q
  8. $bulk->update(
    . P( T7 x. U4 y4 p
  9.         ['user_id' => 2],
    9 v, b$ K" j! W
  10.         ['$set'=>['real_name'=>'中国国']; y5 [) B& k- m2 N
  11. ]);
    * S; r6 r* C' R; U
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ' M# d  v, c* L; D( I. C
  13. //1:字段不存在会添加一个字段;
    : @# J9 ~$ n6 U6 l
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ ^4 t: b5 R" p4 x- s' Z+ ?
  15. ; p& n4 v& f  d/ d3 b

  16. ' v+ \3 i4 n; u0 H  u
  17. //如果条件不存在不新增加,可以通过设置upsert: ]1 \) ^( s! g2 C7 d- x4 n
  18. //db.collectionName.update(query, obj, upsert, multi);- C  V: t8 f, t  h
  19. $ E: o0 j  u& p8 D9 j
  20. $bulk->update(
    + ], `5 D, A' ~  E( h4 A
  21.         ['user_id' => 5],. R. m1 y1 O+ }' Z% h
  22.         [9 d* Z7 k9 E+ N/ \
  23.                 '$set'=>['fff'=>'中国国']* p3 n; _. K  _* L! |0 b4 @* }3 P
  24.         ],/ o3 ]# _( n7 Q9 Y; Z
  25.         ['multi' => true, 'upsert' => false]
    & \; I" D; l" q
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& h; D5 c2 A4 X3 H
  27.         //upsert为 treu:表示不存在就新增
    9 ]3 |* K8 ?, M
  28. );) o; h7 h* T7 ~$ v- f
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

  c- f2 f: `; C* e* y1 g5 C/ ^7 ]7 k% s3 @: w1 r; t2 |
ordered 设置
- f- G: o+ I$ L, h
4 ?" d9 j% ^9 ~  [/ i" a1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 }0 x. W, Q1 R6 B5 V
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
$ ?# z% s" G5 W9 O/ R7 Q
  S8 U3 i( k9 |  u  P5:删除, W2 h  K8 Z8 X; q

/ V, `$ O) ~% {; [4 B; B: I
  1. <?php( d6 v, V5 N# K! K$ M

  2. 2 Q, K" b* t. P. u/ W
  3. //链接mongodb
    2 D1 y$ a, Q& v. |. S  m1 \/ Q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # R: M. D, X1 u( ~7 ]

  5. 2 X6 R; O! p9 l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" w* h$ f5 F; Q% N* i/ p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + l  c4 m/ T8 ^, I: b& ^3 L* E8 W
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 `3 \. k# h1 b! F  S
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合4 \% V4 ~8 N- o0 E9 b# Q( U9 R
  10. delete还可以通过limit设置不同删除方式! H, [- K% o( \: P0 q7 h
  11. & J' i8 w. ]/ K! W3 Y' d3 [
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    $ O$ l. t/ Z1 ~- z3 Y' `
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

5 D: B/ O1 C& v7 j6 I& ~/ n
4 t* y) \+ K2 h9 e$ Q* ?4 Q6:捕获异常8 Y% ^0 V( S9 _/ V, C% z4 S8 S
1 O3 Z2 W  [, c( a' v' K
  1. MongoDB\Driver\Exception\AuthenticationException# E$ L1 A) [" G) @
  2. MongoDB\Driver\Exception\BulkWriteException' ?* y# V/ ~- o" ^1 X
  3. MongoDB\Driver\Exception\ConnectionException% e. d/ w( Z# R7 \' L6 E+ ?! d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException4 H3 l$ d, z% G6 w
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ! g8 q6 G6 y4 y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException4 ?! @4 \3 D( z/ O& M
  7. MongoDB\Driver\Exception\InvalidArgumentException
    5 _7 {5 I- M0 a6 p+ D- j8 O
  8. MongoDB\Driver\Exception\LogicException
    4 O( M( W6 I, U8 h7 q3 R
  9. MongoDB\Driver\Exception\RuntimeException
    ' g9 N. @" t- ]* w$ |# w! t% _
  10. MongoDB\Driver\Exception\SSLConnectionException
    : P' T7 o" Q) ^2 q
  11. MongoDB\Driver\Exception\UnexpectedValueException" B0 P+ l! C) T2 B- [6 U( I5 T; V+ i
  12. MongoDB\Driver\Exception\WriteException
复制代码

# v5 j8 @+ W! ?
9 ?; c' `$ n- b7 F7 u! t7 M+ R9 D* @
游客,如果您要查看本帖隐藏内容请回复

# F& L3 m# f$ M) Y  W. P点击查看全部; ^' k- Z6 A) g, T; f
2 K2 I- @! B) Y

1 q$ u% }1 F% U! s& G9 h! q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:12 , Processed in 0.107912 second(s), 19 queries .

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