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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11542|回复: 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不支持以前的写法。
: P9 p3 D4 V  r3 p; K0 K6 _8 }+ a. O  N
下面用PHP7新的API总结一下:
! Z5 C" G  W3 G; K6 b, s- P" `' u/ M2 \# c
一:CURD
- ~( a/ _! S6 i3 r8 @- w0 ^; g; ^* d3 s% j
1:链接
( \7 C; [: H. A) x
; |. ]1 O* E9 d! Q
  1. <?php
    5 D$ {+ p- }# l* \5 y* a6 _
  2. //链接mongodb
    0 x3 g& c& z* s; J- g
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');  @* f7 J, F; X+ {/ S/ M& o
  4. root 用户;123:密码;如果没有密码则不写
复制代码
$ G# R( y9 |( q# A
9 ~; J: d/ w" ]0 m# F; K
2:查询
: T. ]; f) x* q4 e/ h1 J1 Q: S/ D& l. k* i* ^" q& `# X9 E! h
  1. <?php- h: V6 A/ }# s0 ^
  2. 2 M& R6 L' ~8 ]6 r# m" N/ N
  3. //链接mongodb
    8 p+ a" X1 _6 D& e) R5 i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * |* E. N. k7 G4 v! @

  5. / K- `. Y* t6 c( f, F
  6. //查询
    $ y8 U5 T& D" |, H
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    $ B) f6 Y3 F# M9 P0 p  u% |
  8. $options = [9 N5 }, ~1 }8 z0 ~+ m  i3 w
  9.    'projection' => ['_id' => 0], //不输出_id字段
    " j& _  p* K% V, m$ d7 `
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    3 \/ i6 j  I9 ]  O' ?# r6 \6 D0 s( _
  11. ];4 E0 Z8 b, `% S1 X; S2 c
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求4 S9 {5 N+ H, U
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # q* T) S, X0 W' E# V' c$ |7 ^. ], k
  14. 5 k4 u6 s' q: a! l# a" m6 m- D

  15. + b$ u6 `7 P- s! K
  16. foreach ($list as $document) {
    ( ?8 Y) a; K0 s
  17.     print_r($document); 9 |3 I1 d+ N6 m2 u# m
  18. }
复制代码

9 n( w: k+ S( ~6 t6 {查询更多条件使用方法,参考第二节mongodb基本命令,查询0 n9 Y$ Y# G/ v# M

8 N6 K5 j# Q% f3:添加0 @( a2 E8 O1 K. Q' {

4 a% \8 @' W1 j4 @+ b
  1. <?php
    ( f5 d' j* d5 Y) C1 H( n/ n* W
  2. ) w& P! A  K+ S% m! B
  3. //链接mongodb* B  D6 d) b3 P6 E$ E( [! t% G
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 e) h- P4 _3 ~1 R" W/ c
  5. 1 y3 H% s% c; \" [- j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 s  C5 D, ^7 j
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! S) Q: G2 E, @! I7 }. ]
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    2 N: g4 Z9 o  U* @' [* |; z
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);: l; ~" A' k/ q# d0 \0 q
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

. T5 b! m) a6 x4 R4 q4:修改3 }: f: }0 i/ ~5 i5 {

) t! M- U3 N8 O: k
  1. <?php
    # r% f: J6 B2 B

  2. 4 l! m: Z8 J' v7 j- Y: M3 ^
  3. //链接mongodb
    # q7 j3 A# L1 G7 p; S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * `+ T& {' M, Z1 Q
  5. . C& x# L9 S5 t5 H3 \% l, Y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ( z6 P( `8 z3 f5 }/ M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* P1 v; z7 M% [" o4 w% O
  8. $bulk->update(
    $ C. q  K5 M* b6 t7 F
  9.         ['user_id' => 2],. X! L7 o4 S# F2 W' n; {; R
  10.         ['$set'=>['real_name'=>'中国国']
    + E  {9 z* w% w
  11. ]); " I  q% h& r+ g& H" z
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    5 a% P& @4 d1 u
  13. //1:字段不存在会添加一个字段;
    . C* h3 X1 W- Y
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    . r9 F+ L3 x4 V1 j
  15. $ X3 @# k' o/ ]4 s" X) V
  16. " T# O2 S% U9 U
  17. //如果条件不存在不新增加,可以通过设置upsert8 ~" _" u( r, e  _( ?7 n7 V! M
  18. //db.collectionName.update(query, obj, upsert, multi);
    4 G) W8 e7 X+ D+ S- X; z
  19. * w. x: f) M. P
  20. $bulk->update(
    & D9 _" ~6 w. G( f: Z5 b" w
  21.         ['user_id' => 5],
    $ p+ l6 p9 o4 \" d* _
  22.         [9 M3 r( W4 J! a. ]' b( g5 `
  23.                 '$set'=>['fff'=>'中国国']
    ) L5 R. {0 u+ r+ s2 M; O0 t  [4 _
  24.         ],
    / }% b; Y) H( o; s5 U
  25.         ['multi' => true, 'upsert' => false] - y( m# J9 [6 m, m# x- r
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条0 m% ]' x1 \! F' L* s
  27.         //upsert为 treu:表示不存在就新增  {" s- \" n9 c* D% i( o4 k" }
  28. );% r+ H& \0 T0 ~- w6 P# Z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. y, h* v* C3 D/ u6 }* r( A

! b! ^' D( i/ E1 l3 qordered 设置  B1 O$ T8 k; k  n0 L% x; n/ O( q
7 M" u+ g2 {$ Y; w3 {+ E9 A9 b' T- v* l
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 i* `% t6 Y! X9 \2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
7 x* |: y) R6 c# s$ F( G7 v' Q/ k/ n, F- M# S/ `, g  T  ]2 H( i
5:删除" C) F0 b2 `/ u, L, p: s" X

* B4 x. C) a" t' y1 M
  1. <?php' a" L8 Q$ M1 }
  2. 6 }) Q  n0 E* L' Q7 ^
  3. //链接mongodb& U& R0 [/ j8 W8 f& o4 A* b" [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 T7 a& B8 U; f/ r! q. g. N8 j* a

  5. % J7 K+ p' i  ^$ ]$ q
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    % q$ o- G% k7 J8 R0 {3 x/ U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 A0 G4 b: G: \. g) f
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段; M: U) a2 ]5 w/ O" P
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) l! D! Z- v& t& U
  10. delete还可以通过limit设置不同删除方式. [% ?- K6 ^' H" U2 k  i5 `

  11. 9 s8 N* ~- ]4 K, t8 p' j
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 c  D5 h* b/ z2 E
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

9 B# `) P# d' L- m6 k: {# |# m' ]  z7 z6 X5 e# l2 G! B3 b
6:捕获异常; m/ D2 }$ U1 k+ O& D# b
# u% _% ^# r# i
  1. MongoDB\Driver\Exception\AuthenticationException
    . A( \8 V1 e% y. u$ z: K7 |% k% U1 @
  2. MongoDB\Driver\Exception\BulkWriteException
    / p0 I; X' I  h" j+ B9 n& R
  3. MongoDB\Driver\Exception\ConnectionException
    - e* O* H5 W+ }" V: p. X+ a# n
  4. MongoDB\Driver\Exception\ConnectionTimeoutException; R; r5 m- J! w' J4 U$ k; M3 D4 M8 R
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口2 l; G9 C; ^9 p  ^3 ?& g& e1 a
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    + m! c+ O  R) C5 v) C1 f" ]2 L
  7. MongoDB\Driver\Exception\InvalidArgumentException
    % I" m4 R6 E0 c; f! K) M/ j
  8. MongoDB\Driver\Exception\LogicException
    4 v' _! b; D: C: |6 j6 e+ o
  9. MongoDB\Driver\Exception\RuntimeException
    " @9 E5 t, T& K( L: B4 \
  10. MongoDB\Driver\Exception\SSLConnectionException: n# _8 q4 t0 Y  I8 l: A
  11. MongoDB\Driver\Exception\UnexpectedValueException
    6 Y4 _* E/ g! e  U! n8 |
  12. MongoDB\Driver\Exception\WriteException
复制代码

! U6 n% o0 E* x9 V! S" y
) ^5 U. ~5 a4 A, z
游客,如果您要查看本帖隐藏内容请回复

7 l% }* ~, P1 w$ I% {  j; z8 v点击查看全部
# D6 A7 y2 c1 D+ C
2 y, [: A4 u7 k: x: A: b  \! @6 `) Z# D2 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:09 , Processed in 0.125578 second(s), 19 queries .

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