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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9907|回复: 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不支持以前的写法。
% t9 [" x1 o( H- t$ T- G9 J2 J" N' m) K( B4 X
下面用PHP7新的API总结一下:
/ E. A3 r! a" _0 {; P# j
$ S/ y7 W  B$ s0 ~一:CURD
+ t2 V9 p: L# }6 {4 X5 {& Q
6 u: i1 \; a7 T- C1:链接
* E. d4 O! f8 N: V5 E9 `* T  [( y: H1 S/ P& z% {2 [5 m
  1. <?php! b+ x9 A5 \0 z- A* f5 m" \
  2. //链接mongodb
    - V6 B1 }" i9 X
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 M$ H' F/ |/ E5 i1 W# a
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 F7 W. Z% u+ I3 Y4 q: K6 m+ B$ A4 y* x/ T/ t. X4 s/ S% q
2:查询- I5 B" g0 s" i2 W7 Y6 J

) I, G! V$ m- z+ k) [
  1. <?php
    ; F9 D+ c. R. G6 a# v
  2. 0 U, }8 }' U9 O: c3 C
  3. //链接mongodb+ B, w/ F+ A. F' |5 Q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & a5 o( K  M5 `8 l! q; `4 |

  5. & e. x1 J+ a9 \. U. R; T7 a
  6. //查询2 R8 }2 c8 M: s& E3 W# T
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    : c* {6 H# U  E0 O7 Q
  8. $options = [
    2 s$ U" ~" G5 F6 p, Z* x3 ~
  9.    'projection' => ['_id' => 0], //不输出_id字段
    * ~6 n. r1 e  M+ P+ q
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' l- k1 m+ e9 S/ \3 Y" ^8 c( B
  11. ];' {5 r5 y: P! K
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求) r3 g1 f, d3 b* {
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    / \' b, t4 K) G4 ~7 Z+ t: [! Y0 t
  14. ) }5 z$ [$ V7 T. _9 j# C% P
  15. 5 M- G  U  v  z6 d7 t
  16. foreach ($list as $document) {
    % J( p& Y% d0 _; s
  17.     print_r($document);
    $ i8 ~- a7 S: l! \9 h
  18. }
复制代码

) K% F; W& m% z- x% J查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 U. k0 G/ f6 W9 n( T2 F" k- C0 X
" r8 C# k! t5 J1 q- O3:添加0 z) Z/ f+ B; \# q/ e4 A

) T* M: ]) Z8 d, G) u
  1. <?php
    2 `  V) Q3 {3 A: t* J4 B

  2. * j( N; b0 ?, N) V* P0 J3 _7 s9 X
  3. //链接mongodb1 a) j- c6 s0 L+ a1 M# L8 ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ e# _/ a6 H4 y1 `$ S  I0 e$ `
  5. 4 a* c" Z9 M2 D4 o$ u* \! n' A, m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      i! b6 `5 q" p+ I/ F7 F/ d( c0 L
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- _5 a+ g+ a/ T9 {: s( ]$ ?6 Z
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);. @& w4 q4 p. M5 b0 Y$ p
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    , A4 R2 [8 H% c) E
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

! f. Z7 b9 B0 j/ n4:修改# Q2 R' u! I; U

0 Y+ u5 b' }. S5 G1 e. U! C
  1. <?php; A. M  ~# E4 Q7 P% V
  2. 1 C. i1 j: f( c
  3. //链接mongodb! E/ ^; e7 ~( S' |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    % K+ T- A. q/ q, ?0 b
  5. ) ~* }( }4 D4 x4 q4 g6 g  K7 N
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- r0 ^7 q. C1 N( ?$ P' \# N/ M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    . A$ I5 F# D4 s2 G- Z- d9 }4 x
  8. $bulk->update(
    9 G  `; u" e: i
  9.         ['user_id' => 2],+ t$ k: K5 C( T
  10.         ['$set'=>['real_name'=>'中国国']
    6 x. [+ p+ R7 J& K2 G! X4 ]- P
  11. ]); ; q9 Y" T2 r+ `2 o# n+ `
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ H4 Z* `$ ~0 c4 Y: {
  13. //1:字段不存在会添加一个字段;
    3 B, i6 W) ]0 q* ^8 h, ^7 `
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ' ]8 T/ ^2 T, y% |( y# X. u/ S

  15.   |# h# t8 b! z) c: X

  16. 3 F" t) _) `& X4 u7 K% I
  17. //如果条件不存在不新增加,可以通过设置upsert
    ) f7 Z& {8 d) a1 b' o; {
  18. //db.collectionName.update(query, obj, upsert, multi);
    / j5 p$ f, Y  I
  19. ( a5 Y- e9 A# `0 ?4 m
  20. $bulk->update(3 @1 F* V* [3 X. C
  21.         ['user_id' => 5],
    ) S/ k( |' b/ J6 c+ e
  22.         [9 O$ ~1 ]' Z- N. R3 B! X3 g
  23.                 '$set'=>['fff'=>'中国国']
    # ]9 T. ^0 m) Q. j# h' u" m' N
  24.         ],* o1 O1 O$ h& A+ B. S
  25.         ['multi' => true, 'upsert' => false]
    ) o1 y1 @- o$ T
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ) Q7 O- Z$ \, e& @
  27.         //upsert为 treu:表示不存在就新增0 P' k* s' l" h; `9 o% F# `6 I- t
  28. );
    9 ~* X5 [6 \3 x0 H5 c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
6 e; U) C6 A2 O% y3 c" a- h

1 j7 k' f% t9 r2 @ordered 设置
7 M2 S2 Z  R- R% {, d; z2 W! ]( a& u! J1 r8 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 G3 p, n+ s) X7 p5 F2 f
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
$ G" b2 I0 E7 X4 ?+ b& l2 }
4 H; ~* z3 ^* S4 J- I( T5:删除1 S" G3 i5 x5 D6 f6 y+ e* v

$ X3 W9 E* S3 f( Y' c
  1. <?php3 E# w9 A  a" e$ s% [( o8 S  u
  2. " p$ a" f# O" t( _* \. r
  3. //链接mongodb
    7 ~1 r8 Q* s* J/ a1 p' c5 L# @
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; x8 @* P9 B; L" X; A
  5. ( u( [  Y. R7 i! m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    0 w; T# v7 `* u8 x' |  p! A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行  D! F6 o, C3 j
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    " k# R( L6 H1 A: A! w
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 B# G. h) W. h# O: F
  10. delete还可以通过limit设置不同删除方式+ y7 Q2 [6 S, r: h! y% Y4 K6 ~% n& Z
  11. $ o; v2 z2 ~: i
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    : h  l( a  U6 D( K* T/ j
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
5 g9 |. h6 X7 y3 s
) {  z& J% W! n
6:捕获异常( `) ]7 T; r7 C- I! ]' F% |

! J- G5 o! b% ~8 s& r/ |
  1. MongoDB\Driver\Exception\AuthenticationException! O: c5 i- r. F3 s
  2. MongoDB\Driver\Exception\BulkWriteException  Y5 E; M& @2 Q9 Q# R
  3. MongoDB\Driver\Exception\ConnectionException8 R3 s5 j8 L% S% B- q  M
  4. MongoDB\Driver\Exception\ConnectionTimeoutException- C3 e9 |- m( f
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ c1 R9 W/ u( P/ V3 t1 s2 u( M, z
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    9 @8 {$ ?  Z, s  j, j$ c6 ~* {
  7. MongoDB\Driver\Exception\InvalidArgumentException
    9 K1 L! z. i  q5 P
  8. MongoDB\Driver\Exception\LogicException/ m, @3 t9 y0 n& W0 j# `8 g6 I2 M% R0 Y
  9. MongoDB\Driver\Exception\RuntimeException0 H) {# w6 l9 h! G% j  ^
  10. MongoDB\Driver\Exception\SSLConnectionException
    + i- N- X  g4 }" M
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ; I' C  @7 @7 M& w( _* O$ w/ Q
  12. MongoDB\Driver\Exception\WriteException
复制代码
" Q+ H( V& a5 u0 ]2 v5 i
( J: N, k- X9 C
游客,如果您要查看本帖隐藏内容请回复
# [5 t! M# |( A. t
点击查看全部2 L: L6 C& {6 _/ o, \
$ W& j( Q& \  d: A. Y7 O
& t0 j$ Z- G4 N2 r9 C  o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 22:51 , Processed in 0.114949 second(s), 19 queries .

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