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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11538|回复: 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不支持以前的写法。8 i0 d$ b  q: v; O  R
# u$ y/ d1 F% q& ]3 W' m% i( @
下面用PHP7新的API总结一下:
- r! d% [0 T1 w) ^# ~6 |+ g. D/ _7 ?' y$ h" H3 I
一:CURD
6 A; \7 q* m3 q% |
- G. U3 ~$ M2 i; J8 i( W1:链接" U% r4 t/ H7 {, L

) W3 r# F! V7 ^  X% r; _
  1. <?php
    ( D5 _! p$ f, k8 i& J# r; y
  2. //链接mongodb- E. p  X. P( `# N
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');* }& J: F/ L& {  l$ G' Q
  4. root 用户;123:密码;如果没有密码则不写
复制代码
! E# |# R1 y) {. W

" K1 M( e; E; g2:查询
$ D; C6 S- Z: D! s2 v% I: s- h4 f3 R8 v2 g
  1. <?php
    1 }( U4 c: A, m( `6 a8 M

  2. / v$ r3 m* k( r! N% t) ~
  3. //链接mongodb3 d( ?* |. F0 [# J; |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 O7 o' T& E- E5 |4 z8 w- w8 [; R
  5. . k0 S: w/ \5 B; |# \
  6. //查询5 q" [& W# C  ^9 K) Z/ E& _
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 }4 ~! X7 V8 H' q# W  v
  8. $options = [8 t2 N- P: ?3 r1 g: m
  9.    'projection' => ['_id' => 0], //不输出_id字段
    * ]% R, x% j# p9 k
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    & |. a8 C2 C$ C
  11. ];
    / f0 s2 ]8 N7 n  N/ e7 X6 X
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ) e- g! q6 |  E; _; A  q2 l2 V  @3 U
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合! j3 o5 b  I# f6 o, S
  14. ; N+ C; H$ ]8 J# s7 |) }

  15. 8 X: q& _6 {" G
  16. foreach ($list as $document) {
    8 w+ o4 `4 T. L' L( [% v
  17.     print_r($document);
    . l* [& s4 b) o; |6 r+ @
  18. }
复制代码

3 a$ [! p+ |4 ?; _5 ~& ~查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ ~* \+ f- ?8 g+ T
/ R( }! T4 c: E6 E9 [3:添加8 u2 B7 q: F' X# B6 U
+ O9 A5 d1 q; E
  1. <?php
    & K7 E+ c# W: h9 I# X

  2. . e0 Z6 @1 X9 E& {/ T* o, X5 m
  3. //链接mongodb
    $ ]6 u: I7 n' v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" ?9 _* h9 [* n' s5 y  Y2 q* K

  5. % Z; M, W. k; x4 f# @, K5 C% B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ A( z3 f0 Y4 O6 L2 V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 Z( c4 B3 K2 d1 }
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);, V% V! o& }& Y6 [2 o( H9 i1 j) b
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    % d" ^1 v$ W8 F
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

% v4 Y- G, d3 T. D' I4:修改7 S: V3 i7 V, e* e6 B

( X# W3 [! M1 @( l  j
  1. <?php# Q& v( L- c) }- {0 O, o9 w

  2. : [1 n" c* k5 Z  X, u4 y. {
  3. //链接mongodb
      j! M7 X5 E- \- t, J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 D- q* x! X. H- I* T% F
  5. ( N/ N' V2 l% ^3 l$ ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    % y4 p8 g' C# M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * t+ P$ l' y/ G" B" J
  8. $bulk->update(
    ' x0 i9 s$ B# Z% `2 c; h! [2 `
  9.         ['user_id' => 2],% a; P: s6 L' R% ]+ w
  10.         ['$set'=>['real_name'=>'中国国']1 j- I2 N0 G6 k( a
  11. ]);
    8 b0 f3 P; c1 B/ z; H! L+ p. p
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,: q" Y5 F) Z0 w* i1 B
  13. //1:字段不存在会添加一个字段;
    ! ~3 n4 p. T& q/ c
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ x9 ?  l6 k% X" Y

  15. 3 [4 i/ n4 h# e* v

  16. ( s" V- r1 ~" P
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 d# ^8 j% M* c0 b8 ]' v0 \
  18. //db.collectionName.update(query, obj, upsert, multi);5 E4 t- o0 m3 h

  19. - c* n. q$ y0 E5 I5 G2 a7 y) f& w) v
  20. $bulk->update(
    ) S$ W1 @) q5 Z1 f0 S7 h0 K
  21.         ['user_id' => 5],
    * t  W' X. l- ~
  22.         [) ]- D9 f  W- z
  23.                 '$set'=>['fff'=>'中国国']# d; S. a6 P" {% ?& Q
  24.         ],5 x) z. s9 g# Q: j( x
  25.         ['multi' => true, 'upsert' => false] ' I& k5 Q) t5 C3 n
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    " {& Q( c  {& X6 }8 K
  27.         //upsert为 treu:表示不存在就新增
    3 h: c) Z: g0 O
  28. );/ w! b% O- x4 k) _' i+ B
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

% ^0 Y# E* @/ p2 |3 S6 y& Q/ k7 r. U6 }' T
ordered 设置
& G5 O- q/ {+ }; Y$ e8 t, x& M3 ~
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) h: y9 R9 I5 z0 j" ?7 C2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
; p- w1 }0 Q8 ~) d4 Y7 l5 m6 U# ?8 Z  }* E  [: n# G0 t
5:删除1 G6 m. l& x5 i, w
* l% i/ |$ O. [
  1. <?php
    ' A7 c9 k! e$ N! E8 }4 l

  2. 3 J5 k; s" w$ i' |
  3. //链接mongodb) ~' ^4 l: b6 J3 |. }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * h  U4 F6 i, F, f) L

  5. ! {6 m* _) h) ]( a0 j/ T! z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' `3 E* {1 t2 K' t3 y! F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ' B& Z& _8 B7 u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段6 D. k7 C7 ~5 G4 ?9 y
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    4 K) z9 _$ L" Q+ F6 A6 ]
  10. delete还可以通过limit设置不同删除方式
    : {  M$ V! L, ~/ z

  11. 8 s  k# \4 i) B
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
      n7 E2 j( a# j- t) l2 a
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

% F2 A# a6 ~) z$ }* G  U4 w/ l6 V: V+ R2 \
6:捕获异常8 C* x& a  O! F8 e& u7 }3 V, ]
$ e# W9 }8 w/ Z/ @; h- N
  1. MongoDB\Driver\Exception\AuthenticationException8 m1 c, |! I/ A' t7 u* h) g
  2. MongoDB\Driver\Exception\BulkWriteException3 `9 N5 ~6 G7 q7 j6 D$ ~. Y. d% h- f
  3. MongoDB\Driver\Exception\ConnectionException
    3 @' r9 b5 n2 A0 O) a. B3 x6 Y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException; a) [# m5 D6 @9 e* S( R
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    0 ^" Z1 Y2 }7 m; [4 Y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException/ A) D- G1 N' J, i0 j9 w
  7. MongoDB\Driver\Exception\InvalidArgumentException5 w2 I; d# B  E3 j4 g& N; A- R8 l
  8. MongoDB\Driver\Exception\LogicException0 \  [; {2 V8 a; }. S- O( }; {) m
  9. MongoDB\Driver\Exception\RuntimeException
    $ P! S' s2 W% m* \, _0 c' H
  10. MongoDB\Driver\Exception\SSLConnectionException
    2 J; `$ s9 n6 C. u% g# E+ @
  11. MongoDB\Driver\Exception\UnexpectedValueException! @' o7 R4 o& l; O+ _* ~0 g
  12. MongoDB\Driver\Exception\WriteException
复制代码
) V3 H0 Y3 q) {% H2 p. _
: f$ N; r+ j; V) X. x' o% Y# j: c' x
游客,如果您要查看本帖隐藏内容请回复
0 t& p8 A+ Q0 z) m! c! X
点击查看全部
8 ?  Y2 k& z6 A. i8 ?+ C) G9 r; m" C! F. V/ x
- a1 W. N3 T* ~' `4 b" v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 12:11 , Processed in 0.118709 second(s), 19 queries .

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