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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15377|回复: 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不支持以前的写法。
& m9 L& N  e( `8 o& t8 Y" f2 V  W% ]' D$ ^/ U6 ?
下面用PHP7新的API总结一下:; Q2 b0 c( n( S2 a( v
7 g8 L1 E5 W; H9 e8 t- u
一:CURD
. P' t# `& ]5 H7 |7 ~9 j
4 R1 y# l; ?) ~- w5 T9 Q: t1:链接
- m+ F" q* d" \+ M& {# [% Y
' L/ Q: B, r, m* b
  1. <?php
    6 N( i1 m: d6 m
  2. //链接mongodb# N7 N3 \2 R5 Y9 p- [- t2 Q( [$ e1 f
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    % Z: N. E  U8 D
  4. root 用户;123:密码;如果没有密码则不写
复制代码

: d: j/ F5 }) ~  Z6 F/ Y: S" k+ {' C+ J6 w! _. P2 F% d  \& `& _
2:查询
' a& h0 ]- w2 I9 d/ W8 v7 v# a) z$ g
" e5 @0 }  R; P, ~! D/ D4 k1 |# [
  1. <?php
    : [) p0 R$ j$ |0 P+ A! o2 \
  2. + h% A% J$ x( T# T$ h+ b
  3. //链接mongodb* _2 r5 X- c% Q* I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' C5 U9 ]6 N2 Z

  5. * m  Y8 V, B2 B& Y: c! l5 g
  6. //查询
    & [" x* R7 X+ i- o& }  e7 v' w4 {" ?' \
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    0 x0 W1 z7 d3 i' o5 X  J' Q4 B
  8. $options = [
    6 `3 y8 Y& a6 @7 l& j' J
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ! `3 K2 Z7 a8 w) u
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    & ]# b) g& m9 a- l7 R
  11. ];
    % v! M! v# T3 V- z% t: ^' O
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求% N" o1 O* @$ F- L: w4 U
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    3 e- D! q. @4 G  ^3 D9 a! Y/ }9 ~5 x# X

  14. - S; o# B- C) Y

  15. 6 L4 @$ R: R8 B; q7 J/ y# c
  16. foreach ($list as $document) {
    ; s# x: d* ^3 _* m* ^* W" c0 I% \5 |
  17.     print_r($document); 5 q: T# p0 a5 P- d
  18. }
复制代码

  h9 v, J" ?, S: T& y查询更多条件使用方法,参考第二节mongodb基本命令,查询$ q% N1 I/ v9 X# I
( S- {4 E0 m3 |0 U# p
3:添加1 W/ S6 I. ?9 J3 F$ t7 W0 r$ R

, l4 f+ W7 U7 |/ y
  1. <?php
    ; c& {  K+ Q1 X! Z
  2. ) x9 T! m* X7 r, L8 k2 k
  3. //链接mongodb
    + [$ z. r; I, s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ q+ g$ N4 y; B2 g. D
  5. 4 V1 g1 |7 R& r3 S
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 A4 C1 ?+ M0 t/ |, M+ k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    0 u0 G7 Q. J5 w
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);- G( o9 X8 x& T% `' h' W% L+ J. T" N
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 v/ w( ~- C; H2 x
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 O; R+ h, {3 a, j
4:修改
; Q; r! d: b: m5 s9 g- c
+ {; u" m5 ~8 L& [3 M
  1. <?php
    0 C; r5 Q. x; s3 w) o& }
  2. 1 ^* Z; P  \; h3 ]/ Z" P
  3. //链接mongodb- @* L1 h- O5 Q. {2 ~3 f$ c/ a* I/ o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 G0 L; t9 `' D/ Y# }1 E4 P

  5. 3 U, q9 B9 `. ~$ h7 k$ }
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 Z; C/ v+ f* ^9 r8 z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. ?: V8 ^# b8 C
  8. $bulk->update(
      j. w, q# ]4 N# a% o
  9.         ['user_id' => 2],/ m3 ]- ?# T( p$ `
  10.         ['$set'=>['real_name'=>'中国国']& E+ o% p) C7 W
  11. ]);
    $ {0 j6 B+ C! M) ~6 U0 M! h0 C
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,: C2 ?) i/ x/ }# M
  13. //1:字段不存在会添加一个字段;. I0 ~9 X& s( _/ y# Z) K
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert: F/ g2 a: J+ b$ ^- \: X
  15. + U  }7 ]5 D+ d' d, I8 T

  16. 3 `4 z, K( R2 @
  17. //如果条件不存在不新增加,可以通过设置upsert
    7 h2 G6 b2 \! Y1 ]( e, D5 e* p
  18. //db.collectionName.update(query, obj, upsert, multi);, C& c8 I  {4 J  z. O" Z5 p! l
  19. + `" z' ~6 D; o" x5 r4 l* t- R
  20. $bulk->update(% s3 V( L6 D; p' L5 w
  21.         ['user_id' => 5],4 B, ?& e( a! T  }
  22.         [
    0 I( `4 E# X: J( @2 k9 X: {- L
  23.                 '$set'=>['fff'=>'中国国']
    ( }# F* G. p+ H
  24.         ],
    & I) Y5 s  g2 F( v7 K2 [# R  c
  25.         ['multi' => true, 'upsert' => false]   g- T$ x3 I9 Z$ `3 l& g
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 a/ {) {- r3 p) o  O
  27.         //upsert为 treu:表示不存在就新增
    % w( \0 h- D5 b. m
  28. );
    4 b  z- _  U  i/ ^! Z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" S; b& G5 m' a0 i: x0 T. r, B

& ?/ D. S/ ~( ^2 V$ s6 ~ordered 设置* O8 n0 `2 i6 z/ f
5 g4 A2 i6 _- K7 w0 I, P
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
% ^9 ~8 M( u( w2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行* m# O3 x: q/ N, N1 x, o

( Z4 Q1 J; y/ S' n' ?2 H, X5:删除
: `. J( J% g5 K5 q. s  O- W1 @( X( ]8 t7 O0 l
  1. <?php
    & {, e6 G* ?- Q  q
  2. ! O0 w8 `1 u+ q' I* F& ]- U
  3. //链接mongodb8 Z& e/ g/ V  l& \; ~0 W* y+ U
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + _; H6 d) M' q+ E# l, q

  5. ; W. J7 F- j. H5 ^* x. j( i+ E, D
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; y  E3 p! ~  o8 ]) W4 F+ O
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. L: }3 n* a! J& K! @
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段8 a- [$ B( z' L* q1 x2 v2 k
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    + K2 w* c. }  p! t8 F( V
  10. delete还可以通过limit设置不同删除方式9 k9 H; H4 w4 e# p8 Q" U: K

  11. 8 C; X+ [6 x% _5 [) V' w0 d' `
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    6 ?: ]& f7 a! ]* U2 L' f
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

, ~( k( B& `9 M2 x6 C' P
3 V% U; t4 V) a6 j* E: w6:捕获异常2 p! r; ?9 z' f' V8 k' ^( R, x! O- Y
+ Z3 p  {- z; p- R
  1. MongoDB\Driver\Exception\AuthenticationException
    6 ]! U1 {% A& I4 Z2 m: x8 K# y
  2. MongoDB\Driver\Exception\BulkWriteException  A& ]$ A- B0 X+ d
  3. MongoDB\Driver\Exception\ConnectionException! i* D! M3 `) |3 t/ F. P# Q# v5 E# o! x
  4. MongoDB\Driver\Exception\ConnectionTimeoutException, ^1 U5 r2 n# `* ~- T
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    7 a2 A, w& m3 v& x2 ]2 q
  6. MongoDB\Driver\Exception\ExecutionTimeoutException8 w- d3 ?# u  I/ K9 ]* I
  7. MongoDB\Driver\Exception\InvalidArgumentException/ i+ [# T8 f/ j1 m* w
  8. MongoDB\Driver\Exception\LogicException
    ) a4 g" Y; S4 F& m
  9. MongoDB\Driver\Exception\RuntimeException
    ! [( J+ h+ O& f4 p2 T
  10. MongoDB\Driver\Exception\SSLConnectionException" x5 u/ k! v- Q. A/ k/ U
  11. MongoDB\Driver\Exception\UnexpectedValueException. l* @# a' M: y1 c. Z1 K- s2 W4 k* }
  12. MongoDB\Driver\Exception\WriteException
复制代码

! K. ?" _2 i  X& k! |/ m; K; Y. t! W/ h0 q' A
游客,如果您要查看本帖隐藏内容请回复
. T& ]& m5 `, o, d+ J* }# L  U
点击查看全部
7 W& q+ @; Q6 e9 R5 J, g' W7 R4 j! q1 d. V3 Q

, R/ g, h/ _1 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 01:10 , Processed in 0.055833 second(s), 19 queries .

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