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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11116|回复: 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不支持以前的写法。' A% }( g0 }' ^. g- `& B
- @% W1 n" V8 s$ R# }
下面用PHP7新的API总结一下:
, V, O! @) v2 H  L3 e2 {/ o1 b9 n. V( I
一:CURD, X0 j2 M) s* q
$ C! b2 ]* u0 Y3 U
1:链接
+ V5 }7 O( O1 j" R  `. G" ~6 }
; a/ ~( L# A1 ?. N
  1. <?php
    6 O* v! d# \- ~" t7 ~9 ~* z
  2. //链接mongodb
    . H1 K2 ^- `. ]7 ]2 V
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');6 Z: A1 j- }3 O' L+ V0 C, ]$ {
  4. root 用户;123:密码;如果没有密码则不写
复制代码
! P) l" S- ?4 ^" y; o- n3 I
1 y- ?* i9 v6 X7 r
2:查询- H- d4 @: U( ]8 z$ k+ y3 g' Y

% C' |5 q+ u- j9 J, l. C9 X; v
  1. <?php
    ! z1 t# q: h* v, F( ^, P+ i! ?" W+ g, K

  2. 2 _6 j  \7 a4 J6 M, b% E
  3. //链接mongodb  A; V" D" }! z& B5 h) C" A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* ?: T( q' ^) X9 a

  5. 7 O3 \1 G% l' X0 @: x
  6. //查询
    : w4 P' N/ n$ e' p' f* R* Z! c+ L
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 _- h5 d, A" y: R, ^4 _+ g4 z7 u& r
  8. $options = [
    $ ?# k3 {  r1 `
  9.    'projection' => ['_id' => 0], //不输出_id字段+ n' K9 ?: {. g
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    4 e+ m6 v/ Y7 v: D9 b
  11. ];4 Y* a( `& J) {4 O8 N
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    / P' T2 V/ c0 {9 N& v, g
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合- S" o$ C0 n, Q2 e0 B& t* `9 F
  14. % B" g6 Y2 j1 K9 O# U0 D$ T
  15. ) l4 O+ w0 g2 i: F" ?2 ]# _
  16. foreach ($list as $document) {
    , G! B5 b# S" ?& {/ X- }
  17.     print_r($document);   G7 I% K4 c: O' _5 d
  18. }
复制代码

: a! m3 ?( u- F- z8 W0 v2 s) Y查询更多条件使用方法,参考第二节mongodb基本命令,查询4 A" e' ]/ g/ Z: X, M' N
, Q. C! v$ h  D* R  i0 k* n
3:添加
4 j/ i$ |+ Y8 N* G1 Z5 w' O7 y: A' ~0 c
  1. <?php
    6 E; j* ]8 w3 k6 v6 q  o

  2. : s/ `7 r8 k, c- V/ u: |/ J
  3. //链接mongodb0 E6 f$ i4 A& n: t; q, k5 P3 b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 y! p" S) x  C2 G

  5. ' J# i! _* N0 G) w$ z* U; j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 j( N, M/ J1 l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行; l* U! ^1 S1 _. _
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& z$ \' [0 v) I. |4 G/ d
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. Y" X% S* b  O0 v  `9 N  G& i
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, Z; d5 }/ X! F, g: M) K  ]4:修改. o: A0 C& F  N6 i1 {* ?
1 j1 B6 m# f5 ?  o
  1. <?php9 L: @- C' o) u# ~5 d- K. C

  2. , P$ a/ A9 e0 s
  3. //链接mongodb3 W; Z) E: |9 g+ T2 f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & H$ |9 ^/ R+ Z0 s2 b4 H  t# a: l

  5. / G4 O4 \; I' ^) i; ?0 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 ~! e3 `0 m9 S3 @: d5 N5 u
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% r0 x7 s/ `+ K5 B
  8. $bulk->update(  h4 z# N: j8 M$ {
  9.         ['user_id' => 2],7 D0 ~, G4 B" O* I
  10.         ['$set'=>['real_name'=>'中国国']* J' ^8 k& m- ?4 J0 U( Z
  11. ]); 6 N5 w( t$ r. O3 G9 j4 X# U# u
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    8 I) O- k1 {; }
  13. //1:字段不存在会添加一个字段;# a' ~/ T' Q0 M+ \8 g. Y
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    9 g2 v: X# f! t# |  a

  15. + N! M. ]6 K- d. Y% ?9 g

  16. 3 y$ h; M1 _6 ~; |
  17. //如果条件不存在不新增加,可以通过设置upsert) m$ R, p: I) f! N" c
  18. //db.collectionName.update(query, obj, upsert, multi);' b( L: O% m( v8 B) v& P

  19. 6 X/ }( w7 J1 T2 i
  20. $bulk->update(
    # l2 [& i, s) }$ v/ K* m# w
  21.         ['user_id' => 5],9 @/ F0 r9 M3 L
  22.         [
    ! c9 |5 Z/ y& X# j1 e+ z+ _
  23.                 '$set'=>['fff'=>'中国国']- Y. f# y7 A5 p9 U( N: ]2 A" I; J
  24.         ],5 r/ s& [7 P4 e& q/ P
  25.         ['multi' => true, 'upsert' => false] " r& l( c. y2 J" U$ w9 G7 e
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    , s" b5 h4 ]& W; u! Z9 k: K& r4 E7 G
  27.         //upsert为 treu:表示不存在就新增2 ]' N% b; E3 d% D
  28. );; o: u/ |; r! s1 s, e6 O
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# M% C6 c7 B3 q0 G, T) g7 X; {

# V8 F/ z: u- a0 ?4 r+ {8 z8 {# m) [ordered 设置% r, h1 h# E+ `' w- t) U7 K# y
+ p4 t2 a! Z* C# \+ A3 G5 W+ L
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。3 _5 C/ {, X7 l; Z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行0 E4 U! @' o& O+ e8 q
  v+ c) \$ m' J6 \/ b, |
5:删除
* K5 f$ k# ~" }4 |2 @# I* d5 R" T# U( L9 V$ v3 l- P- q, W+ F
  1. <?php& Q5 I3 l5 o" }! s" U8 s
  2. 5 j' g" x2 ]* P4 N# j& \" w  X
  3. //链接mongodb
    5 x; T+ \; ?  o' X' I/ A& K$ v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& e  F: b) \! u3 R9 i  W" p! Y
  5. , y+ m; |: o) A2 D
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 v& ^5 U: d: J( M3 M& h8 T
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ J+ o; v: \$ r  Q2 E  T7 P5 B$ `, `
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 @5 U2 ?* ^- B6 Q
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    % c" d% c5 k4 U- v4 g
  10. delete还可以通过limit设置不同删除方式, R9 u6 o' W* ~0 k

  11. 7 Z2 h  }7 Z2 x, t- n" w( e8 m! m; |
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 P4 _) ], W. \: l" \3 D% L3 I
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" y& K6 z% O/ g/ }: _0 |
" J5 c* i& @3 F
6:捕获异常+ b# i4 u" ~' J$ E, e+ n

! i$ r2 Q# a1 }# P$ j* t$ u5 g. J
  1. MongoDB\Driver\Exception\AuthenticationException
    ( E9 p/ }! h1 |7 e* X0 \/ D' [$ t
  2. MongoDB\Driver\Exception\BulkWriteException
    2 {. l0 d+ g; ?" Z+ I$ V
  3. MongoDB\Driver\Exception\ConnectionException5 x* }+ K- U9 ^7 x7 l" y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException. F4 W3 c( k# n& ^' A/ G- g
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! [# c& ?$ m# d" M
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    + I6 [  U0 C0 T+ I  n# f$ F6 v
  7. MongoDB\Driver\Exception\InvalidArgumentException
    3 J- _4 O; N6 @5 y# y+ T
  8. MongoDB\Driver\Exception\LogicException' d4 i4 {' Q& h9 }1 X
  9. MongoDB\Driver\Exception\RuntimeException
    0 Z+ T1 N5 R% Q% m7 Z5 l" [
  10. MongoDB\Driver\Exception\SSLConnectionException
    , q# _; N, J# U. H
  11. MongoDB\Driver\Exception\UnexpectedValueException1 _: g( M: Q5 v/ l& G
  12. MongoDB\Driver\Exception\WriteException
复制代码
3 ?/ ]' ~0 ^6 Y: ~4 |
! r3 K3 x6 a8 d/ _, Q  M
游客,如果您要查看本帖隐藏内容请回复

9 |& d, q6 _3 e) l点击查看全部
/ B/ f( i/ G- @3 q, r; E2 O3 {) @& V  H1 f: H9 w& X7 b) C
& a5 c' l7 B( j9 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-11-10 00:30 , Processed in 0.111717 second(s), 21 queries .

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