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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15889|回复: 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不支持以前的写法。
+ Y; W0 ~+ v( {0 W* C
) d; ], g+ g7 f; d7 b7 y下面用PHP7新的API总结一下:
$ J4 J* E9 o4 Y) J* n; J" y* V" s+ ^
一:CURD2 @5 K. _4 q" [. z& O

" S9 [) L* z2 X0 z! M0 ^3 S, \+ r1:链接! P' J' _1 g( [0 b; W( x* _+ b, p% W
8 ^5 J5 s& N/ N0 J$ ~9 c( i9 B
  1. <?php
    % N, P# ]3 B! K+ F; H. ^: X7 t
  2. //链接mongodb: T$ B; k! Y5 C! U" [
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    3 {$ P) j+ E$ P, _) H
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 Q) M5 q% I# }6 s
  u7 Y) S7 C( o- C" R2:查询
& I- o' g) X7 L" @% B1 ^
9 G4 N" p1 [. }* N4 }. f
  1. <?php; t+ z! z( }' H7 Z9 T* ~, m4 H
  2. 6 M' J1 S/ K8 J, \# ]# C: j
  3. //链接mongodb
    / R/ E0 b" `6 q4 I* b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% h. V& q  e  E+ e) J8 ~' V
  5. % E3 q, f" d3 o. k
  6. //查询; ?. d, h3 }8 a
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    $ I! P/ T$ P  F" u
  8. $options = [; ^  W4 J! [3 \# O1 ]5 Z/ o" ^8 r* j/ W
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . e- I2 s( r2 M& Y1 M' `: D( o1 v
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序+ |7 ~. E6 b+ ]) i4 w2 Y% u
  11. ];# ^$ B1 L8 T) M. V- {+ K  j
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求- [9 J8 O! @8 a' l) r" e
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ; u; K- Z4 s# m* M- I

  14. 1 b# f- H3 F8 H0 ^4 g5 L& N

  15. 8 y" N1 U6 r$ N6 t% V9 I5 j, U
  16. foreach ($list as $document) {
    / K( [9 c6 }* P! J) s5 H- ^' P3 f" p
  17.     print_r($document);
      ~: {: F1 ?+ q  W
  18. }
复制代码
& Z* z9 e3 A3 \$ f
查询更多条件使用方法,参考第二节mongodb基本命令,查询
( e& N3 j8 X1 B" i5 H, T, l1 f
3 M! z+ O, t5 E7 g3:添加
! z2 b: l% ^* q+ C/ G* \( i
- M5 [9 v8 y+ ?. L. ?
  1. <?php+ {" O$ d) t* L% n
  2. - U& o4 b1 n3 a4 T! m5 Q
  3. //链接mongodb/ j, L% @, H0 y$ u# O
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 F! z# o& y# x# n! X
  5. # G" F8 D2 E  Y( ]1 A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  \1 \1 G9 V9 I3 ~* U/ k* \- |
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ M+ |0 g+ u, j+ p+ b
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    % J) f: u$ e! I
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);( l$ M3 g+ @9 B- \
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" Q6 D& Q3 [# @$ K6 o* x) x5 [" M
4:修改" `! x3 `$ M" J% i$ K. A; G

/ f2 S* ?7 q6 Z# R" h
  1. <?php; k1 K3 Q: P# \  |
  2. 5 P; S; h- z- F; V% S8 e
  3. //链接mongodb- _% B9 C, u5 ?7 {/ G
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 L) ?! w2 j% ^* o
  5. ) j! e8 R; y) A. R7 r9 a1 h9 V0 N+ i
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 _$ K6 A2 @+ a* q1 J2 u& h/ Q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : y- l4 `# J7 R( d
  8. $bulk->update(6 G# H( X) q- e/ E6 o5 ?
  9.         ['user_id' => 2],
    % A8 M* U, O2 a6 ^* A- X
  10.         ['$set'=>['real_name'=>'中国国']! U6 `; L0 c* l
  11. ]);
    % a2 u% V% ^7 T+ S: k4 v6 ^
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,% o6 u! J: O' ]+ G
  13. //1:字段不存在会添加一个字段;$ C( y/ W9 G# m8 O" d  T3 q
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert; u7 B6 @6 Y$ ^3 P( ^  f/ B

  15. * ?) `" s6 F: H% k. i
  16. $ x( i9 C) T- p9 M  f0 d
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 }  v/ H. P2 h; D" H
  18. //db.collectionName.update(query, obj, upsert, multi);
    2 t$ l0 \. d8 e  s

  19. 5 B& ^% ^& h; x
  20. $bulk->update(
    5 E$ x1 y6 C( R8 \$ p+ R, _
  21.         ['user_id' => 5],) o6 ]' f) K6 L" A4 o7 U4 \
  22.         [
    : [- B/ B. I1 u" r6 {
  23.                 '$set'=>['fff'=>'中国国']1 X0 _# }2 {+ ^9 V
  24.         ],
    9 A  u  q& h  u
  25.         ['multi' => true, 'upsert' => false] ! _, x5 w2 g& |, b5 I" u: X3 l
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 O1 q; M( R  q1 N) M3 p# e
  27.         //upsert为 treu:表示不存在就新增6 j% Y/ w: C) U' m
  28. );
    6 h7 R( W# l$ M0 l
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, X/ u  J  m' N4 `6 y

+ E$ `8 _+ W$ N- Zordered 设置) \1 d" s" T! h. G7 b2 O- q8 n, Z

* Z& @$ C  D4 t" m1 T/ M+ j1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。0 A2 |; q( i8 J1 B' v6 r
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行; C( |) a" U: z7 ]- p9 A% q
% X5 Q' M* ]$ I$ a3 ^) s# h
5:删除
! u" j9 f; C) d7 f' L& y' @  k. P
/ f1 j. c+ C9 N, i) f
  1. <?php
    4 c* f; k. I- K* i  W) E

  2. $ C( J: J4 a$ p4 e- W# k) W
  3. //链接mongodb, T/ ^% G1 X( K, }  j' L
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  {  E9 J2 w: ~

  5. 6 `- C1 y- x$ Z; {% g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    1 I" b8 a) T/ O" x; K" G: p; f6 `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # C9 Q: j5 ?8 }5 b) U
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    " e) V& R$ w" D) S' o: l( O( {
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* H. e/ b3 Z5 q8 `! Y# l
  10. delete还可以通过limit设置不同删除方式
    6 R8 b( p2 l6 M+ \) Q
  11. " x9 E, p' g' N7 e, T( G
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    3 P( p1 p6 s0 P4 y
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* y  A2 R( P# l! K" b% n4 W- k/ y% P! T- c: p# A
6:捕获异常. w  r& H# a) v! ?1 P3 [- }2 A0 E

2 y( L1 |+ e+ H/ A$ e
  1. MongoDB\Driver\Exception\AuthenticationException) b; o) [7 S  O* ~& @3 `
  2. MongoDB\Driver\Exception\BulkWriteException
    1 X/ x" T- V1 u  k  G& f
  3. MongoDB\Driver\Exception\ConnectionException
    . S0 i  R# ?) S4 M" W" p( G
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    3 w0 s+ Y8 l+ K0 F( O% H- e# H, q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ) @1 l! |2 ]. _1 M7 x
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' @+ R+ t9 j$ K9 |$ t
  7. MongoDB\Driver\Exception\InvalidArgumentException2 z- w, K( k* ^4 G
  8. MongoDB\Driver\Exception\LogicException
    1 E$ t# P7 S) g$ e! K! z
  9. MongoDB\Driver\Exception\RuntimeException
    7 a9 A6 h+ V0 J+ }  l
  10. MongoDB\Driver\Exception\SSLConnectionException9 Q# _; L5 \' k- S" ?/ q" h. ?
  11. MongoDB\Driver\Exception\UnexpectedValueException- p+ O+ `/ O3 B. x# A( C5 Z
  12. MongoDB\Driver\Exception\WriteException
复制代码

5 ?5 Z, ]) h2 i( ^& R7 Q& f% A; i4 g) Q
游客,如果您要查看本帖隐藏内容请回复

, g6 L$ ^3 B% U" h点击查看全部1 F: A1 g+ C) I" L# c& ]
8 v& b) C, C2 p

$ L# i9 G+ ^2 k7 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 04:18 , Processed in 0.049146 second(s), 19 queries .

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