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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14343|回复: 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不支持以前的写法。( c* l& m- O" f/ v/ r4 r% h
4 E3 W4 }3 g& P) n3 R7 w/ v! @
下面用PHP7新的API总结一下:" Q5 v7 E* }$ j. G2 g5 [$ b' ^- {/ s

1 F+ Y+ X4 E# |, P" g5 v; M% c( k一:CURD
( L* C' m0 Z: o/ C, O
* |- G9 L5 N' l4 j+ P# F1:链接0 I# }$ {7 U0 f( @' T& v3 l0 [% ]
$ V9 H0 `' i$ w; i" _$ q) |
  1. <?php% r9 e9 |' v9 N) f
  2. //链接mongodb% W( Z- \; v9 o, ^- S
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 p7 \6 r0 s! A! X$ J0 t4 t
  4. root 用户;123:密码;如果没有密码则不写
复制代码
1 y6 U* H" |/ H, R4 l  B

# I8 I# N. \; H4 j. \! S( U7 s8 G2:查询* V' f& j4 a* n
& c( V4 Y; n+ N- }7 E
  1. <?php- {6 k. X% Q4 ]- M1 m
  2. % w& d7 J. j8 v0 y- t7 C" J
  3. //链接mongodb
    / c5 D# t: o& p8 B: @  s9 w9 Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');( N1 \3 X2 O! V7 r

  5. 6 m6 f1 F( C' b4 C( A
  6. //查询
    : ]8 G" N2 I" I  T$ f) h# F: b1 X
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ m$ O3 _! R8 v' o& }
  8. $options = [$ U8 [  b' f4 ^- F. q7 e; t8 \9 B
  9.    'projection' => ['_id' => 0], //不输出_id字段
    0 b" n8 \- f7 r: p
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    / M0 O& w0 h. s" _# f+ U& Z
  11. ];
    ) _" ]# y$ @/ m% L  S
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求% B7 ~9 g- j1 e" F. }
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合8 _, t/ V) g+ T6 X
  14. # a: E: W1 G) c$ W! F) O( {

  15. . H0 O. o4 Z, h! x% @2 T* {; ?
  16. foreach ($list as $document) {
    * o3 `5 `4 ]) V( u0 c
  17.     print_r($document); ' L  r; U$ E) L% L
  18. }
复制代码
6 S1 H: D! \+ k; |! s; `; a5 w
查询更多条件使用方法,参考第二节mongodb基本命令,查询+ ]' S. J3 Y# D7 W2 V

7 G2 r6 o# f5 J3:添加) R# l& P& r, S" U7 L

- O, }, P: z6 `3 [3 d7 o2 N! x+ J
  1. <?php* N" ?0 t! f9 Z; `

  2. ) z, w+ G3 F) a
  3. //链接mongodb
    8 |" P/ Y& |+ ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) Y" [3 ^  V0 c8 w
  5. 7 Y# S6 @4 T6 R& n3 l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 f( ?" P7 a& Z, Z+ T
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ u  ^8 {# _. U9 [% \' u
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    0 ^( k* @  Q& [$ H5 T' S( S1 e
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);' }+ z' A1 s! y6 j8 w4 D+ c8 X
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ S4 `, g9 s1 t) K, ^' _* W4:修改- `4 l4 n( w3 @) U3 \; U
2 A8 d- F# e: [
  1. <?php
    9 }9 m* Z, M, N* F% x% R- e+ E
  2. , ~% p  A& \' ]/ @
  3. //链接mongodb
    ( C/ C; M6 i2 F& y: X9 b* ~! L; {8 I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 |0 ^* T4 @# ?0 ~0 ^

  5. : _$ T1 r" F" W' R7 T) r% m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ y4 l! f) k' i
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " N# z3 U8 C4 ~6 W/ `5 e7 t/ p
  8. $bulk->update(
    7 _7 u8 ~6 W& r: u4 j1 h7 {
  9.         ['user_id' => 2],' r0 x+ a; R5 k0 X$ E' {/ g
  10.         ['$set'=>['real_name'=>'中国国']( d7 h: |# ?" R$ T4 o, j2 _+ F
  11. ]);
    / ^+ @4 S2 t; y; q( @  G$ j  s" |. q
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    4 M) e8 i, M  a: A$ o
  13. //1:字段不存在会添加一个字段;: y! a6 v( i, {; f% |
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    # J5 Y- L. M* ]% p/ K' z% ^
  15. ! G* J: u+ J& C1 I

  16. $ U6 |8 w- C% t; X1 Z# s
  17. //如果条件不存在不新增加,可以通过设置upsert
    / s( L) X- t6 g' a' c
  18. //db.collectionName.update(query, obj, upsert, multi);
    4 |' B1 ?. {" S  P# p
  19. " L( T" K+ w' |9 y
  20. $bulk->update(3 U$ z7 f6 P/ }
  21.         ['user_id' => 5],
    ; W6 t: x: a" u
  22.         [0 _+ {1 `* G* Y8 F. H( W0 s
  23.                 '$set'=>['fff'=>'中国国']
    3 t# L! i/ c% G+ _+ r9 s( D
  24.         ],7 f: X0 y. C4 I" A+ J- R6 G! {
  25.         ['multi' => true, 'upsert' => false]
    / k$ H' ?6 T1 {
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ) Q+ l  \# \( C2 Z" J4 A
  27.         //upsert为 treu:表示不存在就新增
    % j0 m' H  _, @( I6 }
  28. );
    " n# B7 d$ j8 ^
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

/ C8 K4 y$ ^+ Z" v" {4 R+ x( f- g3 p0 z+ b; j5 A7 i: @! \' m2 y
ordered 设置) y, N7 c' r. Z3 g0 U( y/ c

5 l- v: r  M5 L3 M1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
3 |$ a5 k, Q* U8 e2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行* F$ @/ Y; b+ y3 d6 w0 [" X

) F! D  e) \& `& x6 U+ [- W- U5:删除2 T4 e/ R: N. F2 T& s

+ W% Z' [  @0 k5 @" P* c  \" ]
  1. <?php
    1 X9 K" z, R; ]/ @9 B2 j

  2. " \) Z+ S9 F6 ]8 [- d
  3. //链接mongodb5 s* A- B' H+ g) A9 c- q! N) o5 l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 b; ^( h8 o2 W' F

  5. 2 y" [6 `3 r, |/ D9 W4 |; `( w; M  E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% e# @5 ~+ N5 A; G/ _' V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 n: i9 g7 X- ?3 [) S
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
      ^9 k9 ^2 n. H8 t
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合1 d0 a, H& D' w# _
  10. delete还可以通过limit设置不同删除方式. C  {# h/ u- }! p
  11. / p5 ]5 _9 S$ @' P0 R" {$ i
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据: w$ p2 h/ ^- Q% l
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

. D$ J2 m& X% ]* k* X2 X- h) g: x  L2 i
6:捕获异常8 v+ y' R* d$ \# k# y  S7 r
; l1 a7 \3 _4 x2 [! n& d
  1. MongoDB\Driver\Exception\AuthenticationException9 @5 `) s. |, l2 g  i, c! l
  2. MongoDB\Driver\Exception\BulkWriteException
    # z& o: U, m) [; Y: a. E
  3. MongoDB\Driver\Exception\ConnectionException4 r1 G9 N0 Q6 t) N* y5 ~: _
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
      C9 H9 |& v6 A$ P/ d% l. s! W
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, C. K+ o5 g; j& f
  6. MongoDB\Driver\Exception\ExecutionTimeoutException6 ?/ c- t' r# B
  7. MongoDB\Driver\Exception\InvalidArgumentException+ k: g; e4 G: q
  8. MongoDB\Driver\Exception\LogicException# {0 A1 g+ O$ e4 r4 U( h
  9. MongoDB\Driver\Exception\RuntimeException/ l7 [( R' H5 i2 v$ ?, @3 w5 P
  10. MongoDB\Driver\Exception\SSLConnectionException% S8 V+ |8 D$ w; k( k
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ) Y1 ~  M+ F0 z. _4 L( L) |
  12. MongoDB\Driver\Exception\WriteException
复制代码
; U3 }- c, K% v. v* B+ p
# [6 z, h2 _! m1 f* \, U( j  U  T
游客,如果您要查看本帖隐藏内容请回复

) c$ O( X' R& o( z" `5 o点击查看全部
; e5 ^8 m. U1 a. S: o0 O7 w) v( v8 J+ E! R+ }: n- B

$ `: N3 N# k+ C' w6 H" c- y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:45 , Processed in 0.066577 second(s), 19 queries .

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