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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15360|回复: 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不支持以前的写法。% P$ |7 D3 S3 R4 D- T0 H  A

4 ^! t1 i& M  G% \8 `- t! s/ ?下面用PHP7新的API总结一下:' S7 h0 j6 p' w' K
( N  u, d* w8 L% ~) e
一:CURD% O; r9 X& u9 R6 o4 d2 `6 h5 @7 I

/ Z% }( i" y- y5 T3 i1 m1:链接
5 Z' i* {6 g3 }/ Q' A
4 F$ j: O% X7 \, `
  1. <?php
    ) T( Y% ]- S% S# C$ E
  2. //链接mongodb
      v+ X2 G) W7 `; I; Q* h: l' C
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');$ c% P  k% J3 J4 O* c
  4. root 用户;123:密码;如果没有密码则不写
复制代码

! ~, O# }' T+ ]( r& K$ c( T# N& P, M. }- G/ _
2:查询
  h9 Q+ \: r! t) z& A; v8 o& v/ n7 q$ a4 X2 W) Y9 L
  1. <?php0 n9 V9 Y. b: S1 ]1 @6 u; d8 s
  2. 8 @7 i8 o# v9 `0 P& }7 h0 u
  3. //链接mongodb, k% l2 A: G6 H1 @( `" o  h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' n* H* f' [' z7 V6 @4 R. s/ r

  5. ' C7 C5 a2 q4 Y# R7 g
  6. //查询  |7 F$ f6 W, d$ ?" i, |
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& P* `* e! W+ m5 t+ k
  8. $options = [
    . B( l" n! _# Y" a' W: y
  9.    'projection' => ['_id' => 0], //不输出_id字段
    4 U5 [0 c4 `, {8 [
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序8 ?4 |' N5 F# I# @
  11. ];
    ) R! p! x- F8 M4 ^, t! X
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    8 K* H% @7 H5 I4 z; L6 G$ U
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合$ o+ _: I. O3 _2 S, f" l+ z. \

  14. 2 [, W8 t; q/ R' Y8 _

  15. $ N" b& Z; _3 @6 z( \1 p
  16. foreach ($list as $document) {0 [& Q, Q* b. |% S* E" m( W
  17.     print_r($document);
    ! G. p  q) w  M3 s
  18. }
复制代码

1 x3 U+ P' a6 q: j; O* `查询更多条件使用方法,参考第二节mongodb基本命令,查询/ y% Z# W' e/ b: ?) v

$ v3 D- _5 n# s. g$ z5 ~: p3:添加
0 y# ~: }' A# }9 ?# V
7 I2 m! r8 j1 N9 j0 x- n
  1. <?php$ y2 K2 n- p' G+ l" v
  2. 7 p8 q- R1 _0 S
  3. //链接mongodb: _7 x3 ~, R' [" T3 F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ U/ p0 i, }" e5 `2 c
  5. 0 p0 }, F! z# U) \
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* y+ f* R8 g) _0 X% }
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, _  U' v, S8 t$ n* w) X! i1 d
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ; Y: P+ x, ^2 I5 Q3 A4 d
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ r" {: [+ p5 o$ p
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

0 I1 v: v/ i0 N4:修改
) K' A0 V+ o# u- P8 h0 K9 ^7 A2 ?" W, ^, a9 O/ j+ X+ C$ s
  1. <?php
    6 y8 @6 A  c0 z) W% G# R9 O8 u

  2. # O' |/ e5 i5 |7 b) N
  3. //链接mongodb
    ! E. W6 j" }3 a" a$ U, ?/ G* p
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      [8 x- r6 \3 c4 B

  5. : ~8 U8 ~$ z4 s! l9 ]# B# z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: W1 T2 f* D! ^) F$ |: R
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 ~* F: m# \; c. n& ?" G
  8. $bulk->update(
    * e4 L. |. V+ ~4 V: P5 W
  9.         ['user_id' => 2],5 C: z& C# e( s4 L4 w
  10.         ['$set'=>['real_name'=>'中国国']1 r" ~9 r) v. Q/ U& M7 o
  11. ]);
    9 Q# l% ?, X/ N
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    7 t- W+ N6 E) V+ b8 P+ v! a1 `
  13. //1:字段不存在会添加一个字段;9 Q! D% w( ~0 L: q4 U) ^
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert) c: S, Y3 T9 P2 W

  15. ) E+ G  l" g% f' [$ }0 U9 R
  16. 9 u; G/ \% q1 ]8 ~5 ?' F
  17. //如果条件不存在不新增加,可以通过设置upsert+ I' d' F  O3 d) J; c
  18. //db.collectionName.update(query, obj, upsert, multi);
    3 w& \" {0 y/ q; A4 }2 G

  19. ; Y$ l1 g8 z9 I$ A6 I9 ?; `9 y5 u
  20. $bulk->update(4 V( g; |- B. r5 W" D! r  g; a
  21.         ['user_id' => 5],* X( z( m+ N, o4 H8 X* l
  22.         [9 E6 p$ c8 p& C# Z4 H& t9 ^
  23.                 '$set'=>['fff'=>'中国国']8 }% X$ T  l4 P
  24.         ],
    ) `6 E9 m5 M: u/ v% `
  25.         ['multi' => true, 'upsert' => false] 3 h: K+ H4 y1 n" }- Q" M
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    . n+ S" a4 d5 P; b; M. [2 v
  27.         //upsert为 treu:表示不存在就新增
    1 r6 _: S! {5 y; {/ e
  28. );9 \! x8 I9 W1 f3 H2 x3 l. M
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* c* ?! h) n. {) }
) s# {7 u! b7 }ordered 设置" T0 z+ p3 m% R
" ?  U: s: d* D( T  K
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。. _$ a6 z0 _* U
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行3 r+ `& l4 b" y2 l9 ?: P
& g+ k. L( G, z8 n- P2 A) q, \  K
5:删除
& S( Q" T0 U  w5 J( ?7 {( y, M8 j+ a
' y5 h# H" `0 d
  1. <?php( k! I# o* T3 K* ?5 H- V' M( b5 T

  2. + g! S, A" ]+ V& c: L( K
  3. //链接mongodb8 v) l# H3 Z: E0 S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * y: E7 I! k. @1 P

  5. ) }# y, P: p3 z7 l4 h1 t2 r
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& D* z5 H" n7 m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ H; L: D$ X9 T
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ) ^( K" U; h6 ^" X' j1 X
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    / _, O- i; \: c( C3 J
  10. delete还可以通过limit设置不同删除方式
    % \: s' A) G8 }; _1 Z
  11. & J( o0 ~. h3 K; S
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据8 g9 x$ G8 t# u7 Y3 r0 w
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

: {9 l9 x3 B# \  }1 D' C; n# N6 o6 t4 h( c. Y" Y' q
6:捕获异常- m5 d$ Q# S3 E) ~. l; E

5 K2 j+ P. W3 g' W6 H
  1. MongoDB\Driver\Exception\AuthenticationException
    0 f1 ^1 o% y% V2 }5 P4 p' r
  2. MongoDB\Driver\Exception\BulkWriteException
    ! q; p% ~8 `3 A- M; \
  3. MongoDB\Driver\Exception\ConnectionException4 s# ~) K3 w6 f" ^& Y1 ~& P+ R
  4. MongoDB\Driver\Exception\ConnectionTimeoutException6 v  C$ s) x% a2 ]& s% v
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    % u' A2 _# c2 }- C$ r+ o5 S& w/ `) a
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    6 k! \8 l1 F. W5 C
  7. MongoDB\Driver\Exception\InvalidArgumentException9 O4 U6 I) _. @( y+ x- [! A
  8. MongoDB\Driver\Exception\LogicException
      _- N6 C, T+ R, C
  9. MongoDB\Driver\Exception\RuntimeException* P" S: a9 S6 i; x. o
  10. MongoDB\Driver\Exception\SSLConnectionException
    , {5 p$ o7 v  Q' Q  \  d+ H
  11. MongoDB\Driver\Exception\UnexpectedValueException: W/ g- b+ A9 o: v  A: z
  12. MongoDB\Driver\Exception\WriteException
复制代码

& H0 q, m7 \$ m9 d1 h+ R/ F7 m5 @$ B
游客,如果您要查看本帖隐藏内容请回复
0 v3 e' U( ]( Q- \% i$ E5 V6 p
点击查看全部
+ X3 @2 ]# h! @. f
; t7 X5 R0 L9 h' |* M- ], G6 l& }
/ c; W6 h5 G9 @  H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:55 , Processed in 0.075873 second(s), 20 queries .

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