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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14458|回复: 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不支持以前的写法。+ T$ B7 F9 f" Y" U" d. Z
& Y- R& F% T9 S0 T, _
下面用PHP7新的API总结一下:
2 K' e! r5 I  g1 M
. t7 a2 ^8 \! V$ K- {9 U+ i" E一:CURD
. j. \$ Y/ X, [$ q& a* o2 w- Z+ t7 S
7 |$ T8 o3 u' L. B/ z6 d6 e- Q1:链接
" k! h" }1 O0 Q+ P7 h+ }' ~3 b$ [- ^  b, ]3 u. P; k1 f- B4 j
  1. <?php1 N8 C7 q! k: x# h5 S- L1 x
  2. //链接mongodb9 h9 y. K3 X: P
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    " ]2 Y& X% f; N9 ?
  4. root 用户;123:密码;如果没有密码则不写
复制代码

+ [% _" i# }  K9 e6 A' t# J+ X7 @" h5 i
2:查询' ]. i, d+ G8 z) E: w# o

/ B1 ?, f$ |  A- ], l
  1. <?php* T2 }7 p. J5 _$ _

  2. 3 x2 W# e: T/ Y: |
  3. //链接mongodb
    % K  o2 {& f; F! Y3 w, W
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');( w- g2 R6 V' p" g, m$ C; z
  5. % U6 p) w4 z7 ]& B" |
  6. //查询
    , L- i" _7 \) E
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 Q* S% p. S9 z) c( Q
  8. $options = [4 i6 r. @: t( U( g2 C8 X
  9.    'projection' => ['_id' => 0], //不输出_id字段
    1 f5 |5 b# {0 O4 x; T. c
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序. D: ?' j3 _8 ^: |/ j
  11. ];
    " C4 G$ C  ~. G& j
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    * {2 w3 O3 m3 O1 I6 V" b  m& m
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    + [" p9 F, B" @. s
  14. & P8 s$ q( P! \6 F
  15. : J! h: _; e5 x/ V4 _
  16. foreach ($list as $document) {; l% P( |6 i6 _9 ]/ H% Y
  17.     print_r($document);   f0 @# F  T7 \
  18. }
复制代码

) @! o" l9 z6 n查询更多条件使用方法,参考第二节mongodb基本命令,查询+ n4 }. v* U4 v

5 g. j# i7 m4 _) w" {3:添加8 `! w3 z, E2 Z

, `* |4 ?1 p* X; }
  1. <?php: B7 e- ^7 ~5 J, ]- W0 S

  2. / q7 _8 v8 ^: ~
  3. //链接mongodb
    ( P  D2 z, H# s, @' E) U' U: W$ ]/ l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) L6 G. _' U! \* h- T5 N

  5. : f8 O0 A" [& U2 l3 Q# M
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! [1 @9 X7 u3 v) F$ Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 M: M# V, s0 p9 [+ W
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);4 w/ m% ?- c3 {" }4 Q' o
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    % [& W$ U: Z" h
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
% \; ]0 X/ [5 v  }
4:修改
; a. @8 E+ Z5 _# w& j. @8 \1 K
- Y& c! F9 O, c" M! e& s
  1. <?php
    * I: |0 H0 I4 s8 I2 q

  2. 4 T  A. K2 F" M4 ^& ~
  3. //链接mongodb
    9 G; p4 }" j# N& Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');4 Q5 t0 [8 U( C+ B1 q
  5. " D8 e1 b" y5 j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, W. x2 P( p6 d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: ~, d# R3 x4 B
  8. $bulk->update(
    - [0 w) t# B) t5 E
  9.         ['user_id' => 2],3 ~" B2 K, f$ W/ a! ]
  10.         ['$set'=>['real_name'=>'中国国']
      k- W: f7 [5 {0 U% H' |+ r
  11. ]); 5 M( B8 I: g$ u+ u% j4 y5 r
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ) w1 Y; s! X% X  P
  13. //1:字段不存在会添加一个字段;- e8 [$ y: u5 L3 V3 W* Y* |
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    % k5 S- R. M& }3 j8 b* l- R" {) z, x
  15. * ~" h- o/ A5 F6 n

  16. . z  n! u* d6 [9 S9 a
  17. //如果条件不存在不新增加,可以通过设置upsert) M9 f( Z, {4 f  X9 K2 A. L( ~/ D
  18. //db.collectionName.update(query, obj, upsert, multi);5 ?( Y# B$ Z* {1 ~

  19. 8 B& S& i. F; i, w; B/ z4 |
  20. $bulk->update(
    7 g  T! d$ _+ i0 R! B; Z; S2 l- M* m
  21.         ['user_id' => 5],, i. u+ b$ i' u6 T7 I
  22.         [+ c! n, B6 d; A
  23.                 '$set'=>['fff'=>'中国国']
    3 X9 _+ m9 v$ N% r4 P
  24.         ]," V7 K5 ]' Z4 s1 O; z+ r/ A$ n
  25.         ['multi' => true, 'upsert' => false]
      Z# f7 |& A0 c( Q
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 o, H2 l" P/ {0 N1 t5 X  D
  27.         //upsert为 treu:表示不存在就新增
    8 w, c& X4 y7 E2 \3 S) S2 d
  28. );
    # H) n" U8 W' j. v  T/ A. h
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

9 U# g. ~" N4 f3 a( K2 \1 m7 a
% L, A7 c9 A" hordered 设置
2 X# L( H, h* u- m8 j2 |- e* K3 t6 ]/ V4 D
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。* z) |! H( V4 x# I  J; d
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
) G8 q7 U" z5 S$ v- f! U. D2 X- p  C4 u' r4 r$ H
5:删除
: d+ M$ h- t3 z6 s" i7 c8 M* x' k4 o+ F
  1. <?php: b- E" l2 N8 ?; _7 `

  2. $ Y+ J& Y( F: h% M5 W$ w3 m+ t0 D
  3. //链接mongodb
    ) G3 u8 i- i4 @1 e% |1 }! G
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 ?  y" b$ U! k5 m/ e' |" O; u

  5.   x( J1 F6 N2 B# k$ {# {; V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; p* y3 ?0 I+ c
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 P+ \/ _+ w: p2 |0 Y) k
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段9 ]1 b0 ~9 e. o; j: V% |' A9 p
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* F  J. y% d3 z7 ?- e6 M
  10. delete还可以通过limit设置不同删除方式
    # k/ m. Z% J$ ]6 ~6 @7 p# e
  11. ! j6 X# ~, Z; x+ U5 S( g
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    2 B8 ~$ l# ?6 C: x
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

6 J1 Z' }1 J7 N7 ?; W1 U$ K: U1 P+ I- p; }: a% _1 b
6:捕获异常
3 A8 p1 V8 B1 d* I1 ~& V" `5 _& o- P5 @% ]0 H$ s
  1. MongoDB\Driver\Exception\AuthenticationException( w- W6 B6 b" V7 g/ e# R% ?. ~" M" N% }
  2. MongoDB\Driver\Exception\BulkWriteException
    - Z: t: V3 k3 D8 e
  3. MongoDB\Driver\Exception\ConnectionException" E2 o" L' N6 Y6 c- q  K7 c
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    5 |. [& e  J! f1 a+ X: v5 A1 E5 V; w
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口0 v7 _$ t- O1 n' j$ [! U
  6. MongoDB\Driver\Exception\ExecutionTimeoutException+ m0 f3 v: r3 n/ U2 a6 O% b7 _
  7. MongoDB\Driver\Exception\InvalidArgumentException9 I' x3 m: w4 S% D
  8. MongoDB\Driver\Exception\LogicException
    6 K2 ^/ O: [& w  G! K
  9. MongoDB\Driver\Exception\RuntimeException
    ( T/ Z) h$ U% w, y
  10. MongoDB\Driver\Exception\SSLConnectionException
    8 W9 Y& V  C. _0 _
  11. MongoDB\Driver\Exception\UnexpectedValueException% _8 I! ?. D; K, S0 H' p: k
  12. MongoDB\Driver\Exception\WriteException
复制代码
1 x+ M' @% ^2 I% F# _
0 o0 i; L5 T+ I
游客,如果您要查看本帖隐藏内容请回复
; I& u" e- Q; G1 I% |* P
点击查看全部# |/ |; p( f8 c6 i' @* t

- }! J0 s1 f0 e1 N; w& E& D' ^% a/ y- v, W  e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:09 , Processed in 0.050758 second(s), 19 queries .

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