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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9721|回复: 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不支持以前的写法。
# o' {0 a4 i! E8 y! C5 g
/ d& `! b  ]' x$ I下面用PHP7新的API总结一下:8 ^/ p# `" J0 y: d) ?
* g& @8 W2 E. s- b5 Z  w
一:CURD
3 M  s+ A( a, c5 }4 A
3 g! d3 J) n! k8 c1:链接
) Z  q3 l- p" b; U; J
5 a# y& \* D  M0 W0 `( K5 Z  }4 W- B
  1. <?php
    1 H) E( l: z0 I/ U
  2. //链接mongodb
    ' b& l' j# V, H. e' y
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    / k- {. i) I7 H0 T) T( Q* Z" Z, x
  4. root 用户;123:密码;如果没有密码则不写
复制代码

$ H4 _7 f+ C% x8 x6 \$ z% m+ g- }/ I  T4 l; ^- K0 D- N
2:查询7 w8 w! R, h8 \! `& }

- q* i. Q/ V: X7 ]9 u0 ]' T0 I
  1. <?php2 k: R: y5 C& C
  2. 9 V( [- O6 s9 r2 e! F
  3. //链接mongodb
    , d3 @2 C& ~' N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ V+ I1 I+ Z/ Q4 I5 T1 q- z

  5. / ^9 n1 e& n. b2 a. ?0 s
  6. //查询1 ?+ ?. ]% f; k9 E4 I! U$ D
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0# w: t; u7 L/ ~0 ?
  8. $options = [0 Z4 t( X% b) i( Q9 A
  9.    'projection' => ['_id' => 0], //不输出_id字段
    $ R( f) A# i3 A" s* r5 [
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    ' ]5 l) U* }% f# J% X6 G
  11. ];
    ) r3 E3 v$ Z3 W4 Y4 F
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    % y) r7 l& C! P$ p
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    . |: k  E$ L) ~
  14. % ]$ i4 ~- C! `$ v# T: d4 d
  15. $ \7 H0 N' V3 e6 _- z
  16. foreach ($list as $document) {
    6 D, Z8 q- ]. h& T1 w2 t
  17.     print_r($document); ( T; \9 T, i5 D4 g: K6 e
  18. }
复制代码
# O# E, o1 ^# }3 ^$ ^/ i
查询更多条件使用方法,参考第二节mongodb基本命令,查询
; x1 H1 X$ v# r: d  d! g# o# ?% y# N% K
3:添加
( \( W1 Z# ~9 O- O% L/ s8 G1 I$ m2 j+ k" j* g
  1. <?php
    # A5 B! r; p& @) }3 H

  2. * A+ f' ^+ A0 S6 D/ E8 Y0 U+ k( |2 \
  3. //链接mongodb
    # }: k3 ]+ ~! M/ E! F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ Z, ?! g9 G1 Q1 V! L. K
  5. 3 ?4 r8 h0 o3 |
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; Z) w3 p2 {$ b9 ^8 V, i
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( @5 E0 o5 K5 B- {7 n
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);9 |8 z; f. |) n; m, B6 m  Z% K
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    " K% C3 O# e; w  G
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

! t4 `; g5 {8 C% h- ?, v0 \4:修改6 j5 t2 V! |8 D* p

! K# x, u0 d! g. J# _( Q: c' a& c
  1. <?php
    ) B, A6 h: l+ D& C
  2. * P, l/ Y7 }: Y' V$ v. b- d
  3. //链接mongodb
    2 }* b! O/ x, y: Q9 _1 E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " b8 d  o- k. d6 g7 z( @4 |

  5. , r, [2 }( j0 b
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Z& w) ]# {* L3 t8 X* V0 w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % L9 S5 u+ I6 \0 b
  8. $bulk->update(
    % |# }& I+ b" Q3 s# O$ D$ H" J, A
  9.         ['user_id' => 2],
    1 r8 A) T' v7 ~
  10.         ['$set'=>['real_name'=>'中国国']% x/ p/ s5 a+ @/ z! @
  11. ]); & _, X, _0 ^) J1 K- z+ u! E
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 S, N3 z7 g, p2 d
  13. //1:字段不存在会添加一个字段;* C6 m5 k- f" h9 a
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert! T3 W( n+ y& |' u! q: X

  15. 8 D, @$ A5 Z! l9 s
  16. 1 s* X( N4 e. `, \
  17. //如果条件不存在不新增加,可以通过设置upsert
    4 d& K, r! D5 j) t& }. b5 A
  18. //db.collectionName.update(query, obj, upsert, multi);0 [& H: M+ F5 _! n6 o

  19. ! b% p& m8 P" V$ h) ^
  20. $bulk->update(" k' v4 i. q% B1 a6 k
  21.         ['user_id' => 5],
    " |, n% r: e- T1 V1 |! I/ b' i
  22.         [$ D* m9 q8 }* ^
  23.                 '$set'=>['fff'=>'中国国']
    / e. a* Y+ U* q* ]7 Q7 v2 ]4 Q
  24.         ],* R2 I# K. G/ j  B9 S: |
  25.         ['multi' => true, 'upsert' => false] 3 i) v+ ]" Z" i2 w9 r
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    3 q3 V- @$ ~. p5 G) m
  27.         //upsert为 treu:表示不存在就新增
    7 Q9 c! L) J+ b. X
  28. );
    3 t. G& j, o% P' U1 M& ?
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 n) ~2 R2 K5 r; t5 Z

  z4 k0 p* L1 q9 T4 Xordered 设置
, E" g* x% g/ B( Y. j4 c% [% p, |7 F0 \* F5 D, o  z+ L) l2 \+ H
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- o* D+ O( O1 d* f" X  r, x- r
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! ]0 k4 L2 z4 S
. c: U& g: v/ N+ B' a
5:删除8 Z: M8 B) k, g3 X7 A/ T. d2 n# h

& Q7 M0 `8 Z9 Q' y. i
  1. <?php3 }& w: d0 g, {0 y

  2. ; M/ z8 d' `' Q0 s9 I0 ?" x
  3. //链接mongodb, `0 [3 m# G8 V4 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. c% m# q6 _& F; Z6 c' O
  5. 9 l8 k/ J) b& r4 @
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 A! c0 Y8 v: l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( |  X, `' g! `- [. h" [
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段6 l  K- I0 Z. z1 K/ v9 |6 ^* I& i
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    - m/ |& j7 ]9 z4 h* b! O
  10. delete还可以通过limit设置不同删除方式
    4 T& V0 _1 J& N( G" u8 I2 d
  11. ( O- w  E# ^% r- u$ d
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据. l) L( p' P) r) `8 `5 L* c8 H3 K
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
+ C; M8 H5 L5 Q. M
* Q# R& k% j2 E' R- p
6:捕获异常
8 X9 w2 C5 E, t; w" \2 |6 i/ d# c& X$ m. g; ~$ e2 l
  1. MongoDB\Driver\Exception\AuthenticationException$ N) ^) N& n7 i6 ~8 c: D2 A2 @
  2. MongoDB\Driver\Exception\BulkWriteException
    8 Q, E; I  h  n8 e  u" Q" k
  3. MongoDB\Driver\Exception\ConnectionException9 K' ?+ u' z3 w! y+ p; n
  4. MongoDB\Driver\Exception\ConnectionTimeoutException# h0 A& h* v2 `& R, d3 D/ X
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    / k9 O7 z8 ~2 V; o9 Z. T/ [. P
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    : P" B: u; `- [: H% s
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ( i0 T, c8 [( g  u2 I" Z
  8. MongoDB\Driver\Exception\LogicException
    7 E- \) ~9 E+ k7 n* g+ r! \; V+ Q9 }
  9. MongoDB\Driver\Exception\RuntimeException) U0 Z$ s: J/ c9 B' J
  10. MongoDB\Driver\Exception\SSLConnectionException
    8 Z1 A( G2 D2 \) J$ `* n1 a
  11. MongoDB\Driver\Exception\UnexpectedValueException
    - L% |1 Y2 d7 p( z  i' r9 u& o
  12. MongoDB\Driver\Exception\WriteException
复制代码
& ?6 A3 T; y7 y

  n& g* e. a3 i- Q5 Q
游客,如果您要查看本帖隐藏内容请回复
4 D1 v( a% U" `; v; @
点击查看全部9 d0 @7 a1 @* V

3 x. F; s* [6 E2 j" N+ Q* {* m# y7 z! p0 s' E6 B3 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-6 11:22 , Processed in 0.118742 second(s), 21 queries .

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