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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9908|回复: 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; _4 {9 P" O: g7 ^+ _+ e; ^
# A0 K# y% n# N4 y, u# _3 H' e' k
下面用PHP7新的API总结一下:5 H& q/ F, V2 e) I2 J4 E

2 |1 N% s0 Q9 E, N2 h一:CURD
% b/ l0 ]! \" S7 D; G
9 C: X- U' D; ?% h7 U4 @' ?1:链接
' _5 L6 K: U$ J
( _* x1 a0 Q" ?+ r  l
  1. <?php4 a2 Z3 t5 n4 }9 I$ p
  2. //链接mongodb
    ) X- |0 b% y7 u7 r9 b  v2 F
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');7 O1 O& M% |% c( \. K9 b
  4. root 用户;123:密码;如果没有密码则不写
复制代码

/ r8 ?( x- m8 W: D4 p
: ]( J! o. T5 Q( D# @2:查询; m. K" Z. t* r6 l
$ k8 t2 i) q2 `% b  C
  1. <?php) B. K' v; Y* b/ g+ Q) k

  2. ' y) @9 a: P3 Q/ n
  3. //链接mongodb
    : G/ j! \" E2 P: N7 r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 K, X- l  L  l$ \
  5. & N. S( Z- L4 m2 E
  6. //查询
    3 M9 @6 h0 o; R. |, c- z
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ z$ E/ @( W# k* N8 Y* ]& [
  8. $options = [
    / z% H# B8 b% |" |: R
  9.    'projection' => ['_id' => 0], //不输出_id字段9 s# g) `$ f. i& X( N8 h
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序& p# H; g5 u4 O% e( n
  11. ];
    / u) T/ s# I2 i3 }$ Q! T& [* N
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    . f9 l+ o3 G8 q: [. _+ k
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ( P2 Y' x" e# K

  14. 2 }& E6 ~* r; p4 Q% c& P% e
  15. 2 Y8 X$ q& _& D1 k) _: B" P
  16. foreach ($list as $document) {
    ( c: N/ p5 Y2 ~- G, L! K
  17.     print_r($document);
    2 J9 N% u% ]: d
  18. }
复制代码
" D9 D4 K2 A7 l+ J
查询更多条件使用方法,参考第二节mongodb基本命令,查询" V! }& R0 W- }

  k1 X: j$ }# b7 H. C, f5 v3:添加& ]. A. e# h' c2 \/ R6 v. `1 V* v, E
% [# m$ M+ P" g0 k6 C/ `
  1. <?php, N+ j6 X% {! T3 Q
  2. & M7 m2 N" l; @3 Z& }" ]4 ]- @0 c7 {
  3. //链接mongodb
    - p  z2 a" ?9 V" x  t) D3 c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - n3 h! _4 x% f/ C6 y9 A; }, g
  5. ' k, O4 G* g5 b! W9 O. d
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行/ d% a! `# O0 a% O) h3 e. d- R
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ x6 d8 v0 T' q4 D0 o3 v
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    % @+ s+ ?/ ~6 a  T+ j: B  j
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    2 z- J) b) ^8 d' i1 f
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
! h6 B7 s$ y6 z8 Y
4:修改) r. x) R9 G" {

  P+ P  ?2 |! C' B- K
  1. <?php
    7 q2 Z' D% D3 ^5 b" X
  2. + |/ ]5 F  p; N! _8 u' M5 b
  3. //链接mongodb9 n5 H( v3 W' c, b1 I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# z5 y" U8 C4 s- _  d  |; C  y/ q
  5. / Q7 c( `3 f4 d$ H( ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    4 O% ?4 a2 d5 d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 ~- q  Z) u) d: f% j9 P  s- e# c2 F$ h
  8. $bulk->update(
    ) o2 Z8 y$ C3 x7 p) B
  9.         ['user_id' => 2],
    9 l& D, M# t0 b8 D& e
  10.         ['$set'=>['real_name'=>'中国国']6 |* x+ e  C* }; ?- J
  11. ]); & b7 ?8 t9 J2 L. ^# H4 A) k4 ?! o
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ) ^2 u3 O% K9 q: w+ [/ c' ]4 C0 q
  13. //1:字段不存在会添加一个字段;, B5 ^. b5 S4 K9 S+ u
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    6 P. ], h4 G) U/ b7 [6 S9 e# ~6 Q' k3 G
  15. 4 N2 P( o: Q( r! @: s

  16. 3 x2 s" J+ A4 f4 ]0 K9 {1 S0 h
  17. //如果条件不存在不新增加,可以通过设置upsert
    * h7 ^- h; {, Z# `8 J5 G. K' K2 l
  18. //db.collectionName.update(query, obj, upsert, multi);% Z- z7 g5 l/ t1 ?
  19. ! o1 e' t" _' P" P6 D( x3 W
  20. $bulk->update(9 |! M& D- h# {" J! q- i9 v
  21.         ['user_id' => 5],
    ! R8 l8 ?' |! a" q3 o7 E7 l
  22.         [- }5 L; _* o2 i; H% m7 s
  23.                 '$set'=>['fff'=>'中国国']" |# x' m" C+ E; w
  24.         ],5 J% r- }' z% `2 N
  25.         ['multi' => true, 'upsert' => false]
    1 S7 ^- a( e" ?" X' r- E, d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    : h/ P- C0 }! L! m5 f
  27.         //upsert为 treu:表示不存在就新增
    7 T1 I, Z' H: {5 o, P* v$ h
  28. );$ O: j3 j& e4 b
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
& z; t- O5 i7 C* G) }9 `
9 W8 v( h- c: V  M) i
ordered 设置3 m3 n( j/ [1 v! M, f

0 _3 W* |& q$ ~( l1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
" ]; t1 }0 [3 P2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行  H, N$ L% T( m1 r; c- \2 K

2 K! g* ^- D+ |) R, l+ w' G5:删除. m" @/ {! n3 J
3 B. V7 X0 W6 v8 y; ^
  1. <?php
    6 }  d- q2 b1 _1 j0 r& d" x

  2. 6 K; {/ Y9 c) z( Y9 B* v
  3. //链接mongodb
    6 Z, _! s3 P3 R: E8 E3 X. ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 v7 s+ p# B, S5 V4 T$ ~% \

  5. ( K! \" Z7 h9 \1 k- I* W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; N4 k$ v8 C0 D4 O, z3 }
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    3 B$ _! q1 C2 \+ U2 e! m
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    8 F! }* e3 [- |2 d4 S8 W" q6 W
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合3 l6 i# W' ?3 w: `
  10. delete还可以通过limit设置不同删除方式
    1 R+ Y/ t1 K9 e1 X$ h

  11. 0 G6 D; o- A1 E& F1 x
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据& @. E, x/ }$ U+ @% q- p$ x6 m
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

  m) V- ~* h- d6 v2 ?5 Z# ~$ v, U6 n7 ]" p! x: o
6:捕获异常
  d& q7 P0 V( |9 D0 b1 h, \$ R' I  M+ O# C, ~' p" ?4 t# w+ i( C4 ?
  1. MongoDB\Driver\Exception\AuthenticationException+ c2 @0 ^* v  @0 j- ^1 s/ O
  2. MongoDB\Driver\Exception\BulkWriteException5 G1 z" f/ A5 b: \
  3. MongoDB\Driver\Exception\ConnectionException
    9 V( \/ o  c, `
  4. MongoDB\Driver\Exception\ConnectionTimeoutException1 |* y3 l; G, }& }7 o5 C% {
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口+ ^9 h; h( d9 G2 _* J0 n
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    1 ]/ s8 m2 a3 F6 @  @
  7. MongoDB\Driver\Exception\InvalidArgumentException
    , s& v& }+ \( S" V* n7 c( m
  8. MongoDB\Driver\Exception\LogicException
    8 R3 H% h6 v1 {1 |
  9. MongoDB\Driver\Exception\RuntimeException
    * K; W  m0 x1 B1 C$ P& Q" @
  10. MongoDB\Driver\Exception\SSLConnectionException* R  Q: }1 |- x3 r4 h3 j- K' y
  11. MongoDB\Driver\Exception\UnexpectedValueException% [; s) z# I$ p, F" S
  12. MongoDB\Driver\Exception\WriteException
复制代码

- x+ G0 Y7 N  R6 R: C" ]  z" a3 O# r  Q
游客,如果您要查看本帖隐藏内容请回复

$ k* p7 x( M" T! o; q点击查看全部
) C, i7 ~  p& m: b  h4 w$ C: n. v0 [6 X7 o4 g: h0 q+ i
; n1 N  Q* A/ i5 G7 z) w7 ^& h) N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 23:24 , Processed in 0.114217 second(s), 19 queries .

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