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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14953|回复: 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不支持以前的写法。
% e8 P( l' \1 C5 G: u" P
1 u! P+ r8 R  s7 [下面用PHP7新的API总结一下:
& y9 y  z+ n1 M% x3 C' r& @+ S' x3 m! W: E8 m0 y3 g
一:CURD; K( O% B0 b- {# N* S8 L' e
" |( c% b; Q7 R
1:链接9 a+ U6 z9 V. ?5 U; h
- d: ~: n: s+ _, k8 e- k
  1. <?php
    ! E! ~$ S0 S& W. v, H9 f
  2. //链接mongodb
    - u" v' o& w( o
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');5 |& R6 g, q& r
  4. root 用户;123:密码;如果没有密码则不写
复制代码
; ^1 F$ @2 [) v1 n8 Q: t
2 I' J( P% |/ B" w! ]1 Z# o
2:查询
2 b6 R3 Q( y: V; ?& C) W# \
0 G! g4 R  A3 F$ X, S) Y
  1. <?php, E. N3 |! `- K. p2 r; D
  2. $ W# X# e- x8 i0 w' i$ q  O
  3. //链接mongodb- e. f: R, J3 P& Y8 `
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 {8 b, n& v. S
  5. $ Z' b0 j, n8 p  {
  6. //查询- V5 d* A; |$ f& t5 U/ \, y5 D' I' Y
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    6 i& B  Z  e* {# a, S
  8. $options = [, O6 l' R, \! D) Z9 q5 n' t
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . ^6 L. M* f' ^* M, }5 O4 c
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序9 S# Z/ }1 A1 @. n; U  @& V
  11. ];
    - E3 v) c& J4 C. V# n+ g
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ' Q; Y! g$ w8 W, l. U! c
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合( C2 R" O6 |% {. x& {1 Q0 C6 N
  14. ' i% W/ t6 _) H. ]+ d4 V
  15. # v+ p8 r# b0 v2 H3 H3 b) c
  16. foreach ($list as $document) {0 g  q' ^; n0 b: M+ A7 k) m, p' l
  17.     print_r($document); & U9 r% W7 h8 j2 s
  18. }
复制代码

9 E' _4 u0 ?. s! f查询更多条件使用方法,参考第二节mongodb基本命令,查询% M1 E! s, z  Q0 H: N4 Q7 ^& ~

3 [( s4 [$ Z: k  k, e0 T6 {3:添加
5 Z+ w& m$ b4 o& t/ O% [" m9 O; C2 m3 f+ a9 l% k( ^5 D1 |
  1. <?php
    - w' C5 [+ d4 L. L
  2. ; X6 w  E5 N$ @( \3 y2 V9 \1 d
  3. //链接mongodb* E3 ^: I( G  [+ c! F( Q0 O
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! u. T9 j5 Z3 e( d
  5. 5 z' d$ c" _/ ?+ g7 I5 Z9 c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行6 \% {- e# H* z9 B  i
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 G3 M% c( F4 L: y' m
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    + y# R4 s# ?. Y
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 l2 I0 c1 t- {' Z6 q3 g) e4 K
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

6 M8 X% v5 r. Y4:修改
' C9 X" Q+ }( P$ ~- k" d1 X
) g- k4 x- R8 g; C
  1. <?php: e) G6 j6 D) V+ w8 O2 @! e2 Q
  2. 1 O5 L0 U2 x; w/ Q% E
  3. //链接mongodb
    ) y9 ~0 E2 ?" {6 s8 w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ D" u: f  F1 c' ?( w9 o

  5. $ Z" i9 i! J& O, ~8 X
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      _# N7 r! r" z3 V8 K! F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行) y9 U3 U  ?) L' n+ j8 P9 `
  8. $bulk->update(8 U: W0 _5 D+ y5 \8 k" M* Q
  9.         ['user_id' => 2],$ {  G" a! W! J: K
  10.         ['$set'=>['real_name'=>'中国国']! g: n; M7 q- |! F- {7 f
  11. ]); ; q5 N# A% k8 u) C; z) |
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ e8 O, w( L! Q
  13. //1:字段不存在会添加一个字段;  {* i  N: u6 q/ Z! B! X
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    1 B, A; |7 }  T0 V. x
  15. / j3 }( S5 E- r, b1 y, |9 c
  16. ! O1 a* F4 w, Y+ e6 K0 |( u+ G
  17. //如果条件不存在不新增加,可以通过设置upsert
    9 r, g* r7 B( D* X
  18. //db.collectionName.update(query, obj, upsert, multi);
    1 Z6 i$ ?. X8 F4 H
  19. $ W* A4 g7 g* n
  20. $bulk->update(# T9 T+ ?. c( S0 k$ V
  21.         ['user_id' => 5],
    8 r% T2 k3 O; H4 Z  a9 o
  22.         [
    : a" U% M; a; z3 T1 u/ ~' s0 _
  23.                 '$set'=>['fff'=>'中国国']
    7 [( _3 m2 E* ~0 k2 N% T! v! o
  24.         ],
    ) h  p! m6 }7 c6 W5 K& g
  25.         ['multi' => true, 'upsert' => false] 4 c8 G6 L$ ]5 J8 y8 \' }# s; g
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    2 d5 ]8 i% T- q3 m& g3 B0 ]  @+ K
  27.         //upsert为 treu:表示不存在就新增
    - W, S, I0 K- `! k2 q7 e% L: L, V$ ?3 ^
  28. );& _2 N9 X6 g/ ~8 g+ Q5 y! d: r# r
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

5 T* J* z0 ]! a: L
9 X" Y! w+ V+ G) Sordered 设置
5 U; ^9 i! y4 G2 E' E" Q7 ]4 n* T( o# ^6 V5 C, r) x
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 u& i# g/ M4 z7 y: }+ g/ z9 w2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
  h, D( y" x; A5 [7 E; p
7 c; T+ S, d* {+ ]; I% Z, y$ X5:删除
/ D& E9 Y9 `" L( k. M0 P
- o0 H2 k0 r: w0 g4 z
  1. <?php$ {7 C' |: u% D. _% c7 _2 S& W" l

  2. 5 o* Z& W5 X' r. Y. n6 S
  3. //链接mongodb
    / V! d) D6 A$ A; m" |. f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' W8 G+ R' [" b% B/ K, w

  5. 8 e. ]; }) Y: x+ d/ q, `; L( p- x
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 e) ?# J7 c: X1 O& E, \1 M% b
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - z: b5 J2 i7 z) ^
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    5 n# [) w) \6 u
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合0 K% c$ y6 \& f. E( b0 t! p
  10. delete还可以通过limit设置不同删除方式
    * m' C' N- C# S, @3 n8 ^3 i3 Z( p
  11.   U6 a0 f6 i: x* A6 `. C
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    ' p2 w9 K- r; v( K. J
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ Z: V* R; g/ y, ]) L
" ]9 n9 |+ h% X- e% D: Z2 T6:捕获异常/ t' L6 O4 y# r% c

7 |: s; R& r$ }
  1. MongoDB\Driver\Exception\AuthenticationException) r4 D; P3 w) ~) j5 U2 `% a
  2. MongoDB\Driver\Exception\BulkWriteException
    5 x" q& J: |  Q6 d8 [
  3. MongoDB\Driver\Exception\ConnectionException! f3 f4 C6 d  [& r, S
  4. MongoDB\Driver\Exception\ConnectionTimeoutException# K. t& z0 S, ]
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    : ?( u' d1 K5 B: ?6 c, j
  6. MongoDB\Driver\Exception\ExecutionTimeoutException, J! y6 l) D: J  X/ \, B9 ]/ A: M# W  o
  7. MongoDB\Driver\Exception\InvalidArgumentException" t; D/ h, r  F1 m. R$ t
  8. MongoDB\Driver\Exception\LogicException
    $ U1 }; L3 r/ T/ O: \& w7 }5 Q
  9. MongoDB\Driver\Exception\RuntimeException# J9 h! |" S& o- ?3 T+ e0 C2 T# Q4 C
  10. MongoDB\Driver\Exception\SSLConnectionException5 |; }9 ~! s7 k$ f3 V% \
  11. MongoDB\Driver\Exception\UnexpectedValueException( V& X% @3 f9 @$ R+ m( Y1 G
  12. MongoDB\Driver\Exception\WriteException
复制代码

1 ~4 n+ A  t/ G9 M, s
0 m) Z3 i  }& _# X, ?
游客,如果您要查看本帖隐藏内容请回复
: ], P- P0 c; u9 j7 \2 c
点击查看全部0 \' Z& [$ k/ z4 I

! b4 `, k. X% N; U, w% l6 B
  ?* ~# ^: G( @2 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:18 , Processed in 0.082174 second(s), 20 queries .

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