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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14735|回复: 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不支持以前的写法。3 `9 T. n, z  ]% X) C4 }! h
+ V- O8 j* e  A* b. v
下面用PHP7新的API总结一下:
8 X( C( E5 c$ M9 g% T% ^2 v: q2 L3 N! \3 F" v
一:CURD  |. N, z0 }6 z/ T7 z5 i6 h+ Y

/ |- e0 j, i0 L6 S9 g! C4 k1:链接
& B/ u7 r6 F8 r$ u8 N; @  U. \8 Y; Q
8 Z  E7 M5 O  o  Y, }. d
  1. <?php9 Z3 Q9 J% N) ]5 |
  2. //链接mongodb" u+ q0 l1 g+ r5 U1 A2 T- K
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 D! \/ B" Z3 C; N9 O
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 z2 M1 K5 ?0 I2 A1 X
3 n, ~' N* F" R: n2:查询
/ y0 s5 M$ z( u# f8 K9 x& L+ f+ w" }- f% Z. f
  1. <?php
    " K4 `$ N1 l- H
  2. 9 W/ e9 U7 l( |) O# ~3 N
  3. //链接mongodb" O3 w, G  g# Z+ r$ r3 [; T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; U- y3 M9 j( s. @: t
  5.   I0 n: B( h, y0 J( s+ {1 T+ h
  6. //查询
    6 c( i: h5 B' G2 B+ u% a: q0 a
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 L9 R8 I# }% b3 ]5 L, [
  8. $options = [8 \( v7 I  {; O9 P+ ^6 }8 o
  9.    'projection' => ['_id' => 0], //不输出_id字段6 L0 R* [# \8 B0 _
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    5 O6 h5 F2 w! U# [
  11. ];
    " }. K0 n# C. r( y  Y0 S; B2 D
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 W: W( m. ?9 p+ s, m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    & U# p1 K& w1 {8 _$ N% W" G/ P
  14. & \) P& D3 S! S' N

  15. + ~& @) R$ c; K5 u
  16. foreach ($list as $document) {1 C3 I' x/ \, h" Y* U8 Z7 b6 R3 A
  17.     print_r($document); . `6 I, W6 l2 d: A
  18. }
复制代码

% B: r5 [' M+ C7 K5 \6 w查询更多条件使用方法,参考第二节mongodb基本命令,查询
" y5 w6 s4 v" d6 j9 B, J4 Y
, y& w( X) D) h, p) Z3:添加
$ X- f; c$ S# \) ?; X0 B3 I4 S& \3 t2 h  T* e. s/ l; K
  1. <?php, Y! n) g8 l9 D" l
  2. * g3 _* J/ b: @9 C
  3. //链接mongodb" j+ k$ {4 a3 S* n* d& g
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 ~( ^: R+ s7 R- a& F1 X% y

  5. $ d. ]( [7 h" }0 u( _. T- ^: i
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 Z  L9 ]$ j% @; i5 c$ j  e- U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ l4 j& k7 b: v- x9 \
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    3 _! z& P4 ]) F
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);) u6 \' k9 \  `+ f9 H9 a
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 q% a$ `8 B: R: N. y' s0 T2 u' H( p
4:修改2 q5 T$ Z/ c2 m

% r# e3 [! r" |, l
  1. <?php5 ^/ D. {/ S( c+ }9 |; a* L9 z
  2. & T( }; ]" s1 ^! ^9 T& r' r
  3. //链接mongodb/ h0 M4 Q/ U  g9 s4 X6 ?( n8 M* B
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 @) i7 l1 D1 {

  5. ! J2 [6 X2 p7 V8 O
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' S6 U# {6 ]6 z3 f! n2 x( I
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    0 h$ K+ s: ?2 J- ]4 s7 g7 U
  8. $bulk->update(
    ) X& B) E6 X, `- D7 c
  9.         ['user_id' => 2],
    2 f/ t, n  `1 Z  |: e
  10.         ['$set'=>['real_name'=>'中国国']
    ) M3 p3 ?' S8 [
  11. ]);
    : M1 {7 I* W; _( y' i, ^0 j( e+ R+ P5 H
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    4 _' N9 I% |/ d) V3 c7 _4 P
  13. //1:字段不存在会添加一个字段;- Y$ |/ M9 Q! A# y( `
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ; I/ V: m' p$ w

  15. 3 A- @; [% l0 J% s' |- [) u
  16. 9 j/ t6 j! w; Z4 |' P) v8 G0 Z
  17. //如果条件不存在不新增加,可以通过设置upsert* r. t; N! k" A
  18. //db.collectionName.update(query, obj, upsert, multi);
    ! p: o( u; {* {) q2 z8 ^
  19. % C  [3 l/ s6 F3 w! W9 m
  20. $bulk->update(
    " O* ^0 d( v" `  `
  21.         ['user_id' => 5],) A9 V0 j4 U8 Z
  22.         [, E3 X# ^) ^, e# X
  23.                 '$set'=>['fff'=>'中国国']) I2 R, {; u0 n/ n" I
  24.         ],3 W; p! g- C' u8 A( Q
  25.         ['multi' => true, 'upsert' => false]
    # g6 d  ?$ ]! P1 J$ ]
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 p5 s9 |# e/ M0 Q" ]* D
  27.         //upsert为 treu:表示不存在就新增
    " B! Z5 D4 S, U0 p! p
  28. );
    , l7 \( t# {* Y
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

8 y- `9 I" n9 }. ~, G0 M; q
' W7 m/ j7 k, k2 m5 z2 q8 y3 K! f0 Kordered 设置
) y/ m5 {* D# ~
/ M2 o( Y$ W- c- X' P1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! ~- d' h) R0 m
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
* e5 b& T0 k) n" Y& U% q) W& T1 Y% U0 O; T4 s0 `4 y
5:删除. D/ s1 u9 L% j- }
' V0 Z% {8 H" p+ T& q7 ~7 d# j
  1. <?php9 x; O6 Y" G0 `$ s+ ?. U
  2. 0 ~1 H. w5 u, D0 c  c
  3. //链接mongodb
    * q, |& [6 g' |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ; V& a* _, m( Z' M6 J
  5. + v. o% l) Q: G0 I& E% d
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ X6 o8 n% ~, x# ?: d2 l7 j5 A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 O4 t) D5 [0 Y, |( ]; U
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段3 \  O- Q/ K0 a! P3 ?, X7 b
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    0 [! A! F1 s+ {! l' a( N3 g" D$ I. S% a
  10. delete还可以通过limit设置不同删除方式6 F) }8 X- x& Z+ k
  11. - `* Y$ p. D/ H! @, Z- S
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) I' k& E" R' @  Q
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
3 ^" X6 \2 M# B! t, [

* _, F2 i" R8 g$ z9 ~" m6:捕获异常
! Z2 h, \! ?  k6 k$ T. L5 E7 t' L$ w+ u) W
  1. MongoDB\Driver\Exception\AuthenticationException! x4 \% g+ x1 r! a, k
  2. MongoDB\Driver\Exception\BulkWriteException
    , s1 M$ j  x" H  \3 n- {$ ~! ~
  3. MongoDB\Driver\Exception\ConnectionException8 T4 s/ X& R1 b+ E# d7 ?% Q: c
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    5 X- P3 K+ h# B! r- q4 g+ H, p5 L
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    / s6 n; S; p, a8 i# X6 a" T/ ~; h
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    : w' R% w+ Y, Y& Z' _+ Q3 S) X
  7. MongoDB\Driver\Exception\InvalidArgumentException
    6 s  q4 f3 M4 X% J
  8. MongoDB\Driver\Exception\LogicException7 \; s! N  V, h1 E2 I& E
  9. MongoDB\Driver\Exception\RuntimeException
    - T! k+ w$ B+ g+ y9 X9 D  G; b
  10. MongoDB\Driver\Exception\SSLConnectionException
    " w( r  Z$ R# J0 _) h! p
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ) G& R1 a" G- x- }8 E$ E
  12. MongoDB\Driver\Exception\WriteException
复制代码
3 Q1 q5 P, j7 e% X( z8 K

* Q, C  ~* v; {
游客,如果您要查看本帖隐藏内容请回复
( {6 A" A( M$ T: H) V
点击查看全部
( \' ?" u9 C/ l) j0 ~
  [4 t+ Z0 ~9 L( m& D# f- w: D% h; z- C1 L+ P" p3 L4 {; K# a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:43 , Processed in 0.053634 second(s), 19 queries .

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