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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14470|回复: 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不支持以前的写法。( R. x$ W' n- }# j2 y: [% k( g) Z3 g
) E) {. \* |6 h0 r' s0 W
下面用PHP7新的API总结一下:
0 V3 C; n7 C8 p$ j! S  |1 Y& h5 }% q$ F1 s& t* |9 {/ U
一:CURD
) h- W  S$ ^7 C6 [
, c% v1 q! ~! c. g' ^3 H1:链接) l$ R- E# y9 D8 a& C% o/ L
$ w0 w) ^1 A# S: T2 K/ b
  1. <?php
    2 `( j; r9 L( f' E0 T
  2. //链接mongodb/ `% w  _. S6 G  c( q3 }
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    : s2 v9 Y/ m# q# X6 S7 G% Q
  4. root 用户;123:密码;如果没有密码则不写
复制代码

( d3 T8 Z. u/ K, Z, i5 a/ [  K! h" R$ v! r
2:查询
" R. \2 n, }8 Z4 \# F7 G, [$ H# k0 h( [3 o; g; I
  1. <?php
    / t1 f$ k/ M: J5 X( V6 y  b! R
  2. 4 [% ], w- X# D" X5 t( M
  3. //链接mongodb2 g6 H; z, T$ I. [2 [4 z. j! }3 r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 z, D0 K, P  O, N9 p  _4 [0 [# n
  5. ( o( \2 ?. z5 h
  6. //查询+ c4 V. F6 E1 S3 o5 E
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" A/ T/ L# |$ ?4 d
  8. $options = [& w4 j2 {" \) @7 M
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ! H6 V; b. u- x  l; }, I" ~$ D0 c
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    : P, z1 y6 g* ^$ M
  11. ];
    ' F, M. b% m8 \, ~  \% ^+ t
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    5 Y* U! k# d9 q" E8 ?
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; y4 A* Y- ~/ _1 v' Y* q. V
  14. 1 ^0 Y6 M) z5 w. X/ }. ]
  15. ( c  i- L; Y' f2 d
  16. foreach ($list as $document) {
    ' o2 v: p1 v( b6 R) \0 a
  17.     print_r($document);
    # B3 Z# p5 ?0 W; U
  18. }
复制代码
) j, v. g3 V9 y3 q( K2 o! b) M
查询更多条件使用方法,参考第二节mongodb基本命令,查询
8 Z/ ]4 i( x+ e! S, u6 F4 ]  m% ?4 f4 U
3:添加# D/ X: [. m# I  z8 A
+ b( R. N% N2 M/ \
  1. <?php# S# ?! p  i. |7 K6 Q8 G

  2. " y0 v; @. u! e5 a+ z' s$ V7 `
  3. //链接mongodb5 X5 v+ p. ]& ~3 S' R9 r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - J1 l3 q9 Z, o
  5. : b) y8 M, G+ F4 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , q# v% `+ g. v9 ~# l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 [( h. y0 O4 c: }  [/ ~$ V
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ( x8 p3 b! V0 P0 M, T  I9 y/ M8 x3 {
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);( D& d2 I- i& s, N4 u' K2 N( K
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

" G8 K/ q! B( t* e3 |6 X  \/ G4:修改/ A. H8 y$ s. u: r, g
" S6 b( V# G' M2 w
  1. <?php( ?: J- c" m: k* I2 [0 L
  2. $ }# S  }4 r, ^" G
  3. //链接mongodb( d% W) v' U9 K6 Y' T( @
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 B0 K4 R, k6 R7 n/ ?! p, M" y0 [
  5.   U$ A$ v0 d6 K
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ) g) Z' {# x- }: J4 O; b" r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, a$ u; h2 w& j4 \5 l* J
  8. $bulk->update(/ {% V7 u! v3 s
  9.         ['user_id' => 2],6 R  L( X0 O" A- p1 z
  10.         ['$set'=>['real_name'=>'中国国']7 x  A6 k9 `; o1 D
  11. ]); 3 V% ?1 ~+ Q2 x
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,# v4 E) d% A! o) E2 \" t" ^
  13. //1:字段不存在会添加一个字段;
    5 [" M) r" r2 Q0 E0 f- L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 i" j9 y% I$ P' j1 P7 G

  15. ! s! h: w5 ^$ I0 h
  16. 8 t8 D! i8 n) p, b+ j
  17. //如果条件不存在不新增加,可以通过设置upsert% ~. u: M9 @) O) ~: ^5 G
  18. //db.collectionName.update(query, obj, upsert, multi);! A7 u! g5 o+ e& D- ]1 z! q" i" M

  19. ; a6 H+ n) s1 w, D) ^4 I- w( ~
  20. $bulk->update(  K/ A* [0 U$ T" t4 j- d, y0 B
  21.         ['user_id' => 5],* }- Y! l, @. Z( A! Q' k
  22.         [
    5 Y* t" |4 {7 C# N' Z
  23.                 '$set'=>['fff'=>'中国国']* m' n; d' Y/ K% n5 k! o" T% ^0 f
  24.         ],
    ; y* ~  W) u7 |1 C3 `
  25.         ['multi' => true, 'upsert' => false]
    $ Y3 y0 O* v' i, U6 u3 [6 g0 g
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条- E2 a$ f7 m% F9 ^1 L+ s4 ]
  27.         //upsert为 treu:表示不存在就新增
    - j/ c( U0 g0 \2 i2 P" @, w
  28. );
    ) J1 Y6 k: J4 E( v1 l( N5 y% C2 _
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

" R9 @  b( r4 R7 `3 U% p( H$ E- E9 w7 \
ordered 设置
" M" y  g( l$ r. R; l. u4 E, A  v! Z3 _
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
% o' `7 k, `, d# f4 c2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行9 n; x% V$ p) @! }4 e

! y- O3 W. Y( A) `) h; P5:删除- c1 C% ?! s% t: N9 r, s/ ~( t7 ~. g
  A. `. i) w- G3 F" ]- l! ~- i
  1. <?php
    / w7 i) d# S) c! V" d6 w5 H
  2. 5 I/ K7 W" c, t4 Q) c- `7 I
  3. //链接mongodb
    5 I5 m6 o% `' k) e$ l( f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) s) R  G/ d5 |1 u' H2 p+ n' o
  5. * [5 t3 `+ e0 c- k, t
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' ?! q+ {, c7 y0 `/ A4 U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! |, b: r' E+ }' A+ {5 j8 S
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段& M9 E3 z& E/ u! }0 {
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合- m5 V! Y* E& ?. Y! h3 J, X6 n
  10. delete还可以通过limit设置不同删除方式0 M8 b9 t2 ^2 j- M9 N

  11. + y, y3 Q! H" N$ ^5 T% `, k. u: P
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    9 r1 Z0 d. n) @- e
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ Y) v( c* D4 C( d
) b  O1 z( m: k. }5 l6:捕获异常
7 W; K4 K& ~6 d/ ]* `3 J9 S7 k; o
8 `+ R- [# h, G: I7 k8 `' c' B
  1. MongoDB\Driver\Exception\AuthenticationException
    $ u% @; Z' Z/ k) |' d( w- \9 K
  2. MongoDB\Driver\Exception\BulkWriteException
    # @/ `: g3 H4 m* l2 S
  3. MongoDB\Driver\Exception\ConnectionException
    6 w4 D- z5 B: e7 k3 r
  4. MongoDB\Driver\Exception\ConnectionTimeoutException, ]5 F" R7 i1 }3 U
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口; B3 o0 K6 I% r$ B8 S0 J
  6. MongoDB\Driver\Exception\ExecutionTimeoutException# D+ ^) Z' u! i, l& m
  7. MongoDB\Driver\Exception\InvalidArgumentException, t7 ~+ X$ R' U: n; x
  8. MongoDB\Driver\Exception\LogicException9 q% C! M* v0 U8 {+ p$ O  U1 t4 _4 s
  9. MongoDB\Driver\Exception\RuntimeException% X' W) b" I! V7 _9 i* H  ?
  10. MongoDB\Driver\Exception\SSLConnectionException
    6 O- F3 B1 f* w' U  z
  11. MongoDB\Driver\Exception\UnexpectedValueException
    " }- q7 Z) c/ s. z) R9 B- |
  12. MongoDB\Driver\Exception\WriteException
复制代码
8 c3 B0 m4 T) r+ V# K1 s

8 A: R9 ?3 u% j$ s( C6 V2 }
游客,如果您要查看本帖隐藏内容请回复

3 ?# o' U  @/ W: I: R点击查看全部6 ]" M- d2 H$ Y& O5 s! s

+ m% Q. ]( P- x" _# U
/ I' ]+ I2 q0 N: B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:01 , Processed in 0.060176 second(s), 22 queries .

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