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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14956|回复: 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不支持以前的写法。5 r7 w; a7 A9 t; |: w' w; n& b! D: b% S
$ w  i) m# Q- b- h$ }" q+ G  g& c
下面用PHP7新的API总结一下:2 A' c9 y) Q+ T3 S4 I* h7 ^

2 }! M% ~  k  `6 h. R一:CURD
- S1 B$ V7 V( h/ o. ?; t6 Z3 Y3 W& \# q' ]7 S; `% `6 Q' Z- b
1:链接; Q  b8 N  i. T

6 E9 v* n" o! L! G  h
  1. <?php
    7 Q6 r2 |6 Q5 ?, e$ S* b# u( {
  2. //链接mongodb
    ; T. g1 j+ c& J4 j
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    $ }! P  ~6 m" e5 m; }% c
  4. root 用户;123:密码;如果没有密码则不写
复制代码

( O/ v" T$ O% Q! z# g- _
7 O( R  U5 K2 T  ~" U2:查询- O9 O6 \# s/ p3 Z
! \: E: V+ H0 v& j3 b, r
  1. <?php
    * c6 v  v. z: p* _6 U
  2. / x' }0 ?; ?$ K( G% i
  3. //链接mongodb
    / i! H, i" x3 y7 ^) B+ R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 A" M$ d" |- }/ Q% _0 M
  5. 1 M7 r) \5 }+ \+ B/ R& Y. Z) f* u
  6. //查询; V- L6 W$ d2 m* h5 G4 j
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ e+ T. H% C7 `) k- _
  8. $options = [
    1 z- [  ]' P; ]8 M: g
  9.    'projection' => ['_id' => 0], //不输出_id字段& i: c! l+ ]) G( o$ V$ F0 j* \
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    * `' _9 a. C: y
  11. ];% s! B# T6 O7 h% o: S! P
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求# h& e, ?4 d* p. x5 A* }6 w/ s
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; m( q/ `% E( r2 O$ e

  14. 6 ^9 K# J0 k) m% Q( [/ ?- H' z! V/ E5 k

  15. 5 {9 X8 j9 H  c8 s
  16. foreach ($list as $document) {8 A6 ]% B" ?8 b; y6 B$ o) \$ }
  17.     print_r($document);   e* j. |" a" W3 m
  18. }
复制代码
& F5 v3 C/ D+ M9 g1 |# P! d3 x
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* w3 x3 w2 T; d, o& Z* V- D8 v& W2 y% r6 B
3:添加" @: V7 o0 v9 u. w: \+ V

$ T+ W6 h+ E7 R( T: u5 S! u- _
  1. <?php4 G& L' u* b  c$ R3 H/ `, M

  2. , S+ b: F  Y& \/ d1 [2 Y
  3. //链接mongodb
    2 \7 [/ E/ A4 E* E! {! M* @. c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 F! Z5 _+ H- K7 q- n! B
  5. - {, W' |5 n& X) [. }+ H  A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ( S  V) U  ^7 B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 x+ y. G5 H7 [/ L
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);, ^5 a( n/ p, A( I; f9 P1 T
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ( m; M$ y% Y5 U  A6 y' d
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

3 w* n6 ]* }! b' t1 t6 L4:修改% k. |( x0 L% w
: T1 t2 V+ \' d
  1. <?php
    8 s. R3 c7 t4 O

  2.   w7 U$ A7 V5 F  Z: g. f; v
  3. //链接mongodb8 S7 U9 y3 R5 m; m: h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ; A5 U$ k$ S& E: {6 h4 H0 y

  5. # B+ a4 l. U8 Z- q- Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      u4 l- z, p5 y3 n; m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, i* B' {/ p2 |  t! e
  8. $bulk->update(5 J' T% ?: V9 W- I8 H. V* a
  9.         ['user_id' => 2],
    4 Q. Y- {& o; e) g7 L1 N8 x& |
  10.         ['$set'=>['real_name'=>'中国国']6 R# @$ K2 y) W8 F# P# _2 ]
  11. ]);
    ! o  d3 u. d3 m, V* n; b
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    + ?" L3 W2 G3 U) X9 p
  13. //1:字段不存在会添加一个字段;: d" L' _/ B. N7 W# f6 t
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    2 N; V# L0 L8 s) `" ~$ W* S$ k

  15. " E# _3 {: h! l

  16. 2 n$ K3 C$ o! [# y
  17. //如果条件不存在不新增加,可以通过设置upsert
    7 ^0 w9 n+ }; Y2 `) d0 f4 ?
  18. //db.collectionName.update(query, obj, upsert, multi);
      u/ y  s9 E" Z" W' L
  19. ( m+ i# g7 g- [7 K7 A
  20. $bulk->update(6 \7 j  r+ a( I7 ^0 _, m9 J8 r
  21.         ['user_id' => 5],, ~& N7 b2 _3 \
  22.         [( Y: I' N0 p! ~3 C) \
  23.                 '$set'=>['fff'=>'中国国']
      p8 v8 y4 |( B* W9 c9 U- E
  24.         ],! q- s+ S" O+ m1 r0 w8 p8 r
  25.         ['multi' => true, 'upsert' => false] ( x& W" }' P7 ~' ~# I
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    & g" N/ s* H0 x8 d
  27.         //upsert为 treu:表示不存在就新增
    % k( {2 M# n9 V/ d  w  Y
  28. );
    1 V4 ]  o/ _9 B' b4 d7 F1 I
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

4 F3 Q9 X- i6 T3 T7 b6 E6 y' p; @, `, ]& S
ordered 设置
( s" }, v; [% h  e* f2 v- r& [( P. g) J( m" u
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ q/ V; d' ]0 z7 E1 d# d2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
& p' M8 e* x- D8 R7 H" R( W0 t( d- k6 p; ^, l7 r; D, d! r  ?6 y
5:删除
, `0 j1 D7 U) g2 J  o) u) A
' `) f) L: d, [8 _! I9 w& F, F
  1. <?php2 \' h, l2 ]% M0 i9 q* g! S0 k

  2. # O7 }& ^( c" \6 i* l" s; R, W
  3. //链接mongodb
    . F9 _4 t# `: R, A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' e6 z; R) }0 ^) L* o, J5 s

  5. 9 w0 Z% }% q. h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 ~. w0 |% r% Z/ W% x2 r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    $ M6 Y# D  [5 B1 a$ r' @! I& O
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
      g0 t6 D/ \7 i/ P
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    7 o! ?$ j: {, d
  10. delete还可以通过limit设置不同删除方式
    / Z2 \7 Q9 q7 l% y: d& S4 ]+ v* e
  11. + ~' }: R: G$ g5 ?" _2 h  j
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据, S  v$ y! H8 M* e2 Y
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

7 r. t% Q* g" x3 y0 ]9 W
" X/ `2 _) g5 p# |% E! }" b% g' {6:捕获异常& B2 c) F' ?7 d$ r, F' O" h

  ~  V7 A. ?* U, U* _* j) C
  1. MongoDB\Driver\Exception\AuthenticationException
    - T; k  H6 f8 \: l
  2. MongoDB\Driver\Exception\BulkWriteException& f- D- E! a  m( L. E1 O
  3. MongoDB\Driver\Exception\ConnectionException
    ; C; j- y5 {* F. F# m; z" R
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ! d. \; E6 ^! D+ S0 j2 S) e
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    6 p) x* o& Q( @% j
  6. MongoDB\Driver\Exception\ExecutionTimeoutException( ]4 ]5 _/ _' J: O& S8 o8 E5 x
  7. MongoDB\Driver\Exception\InvalidArgumentException7 v! F6 T3 [  a. M; C+ S" K
  8. MongoDB\Driver\Exception\LogicException1 k7 t' a' T' I  R: B- ?( c
  9. MongoDB\Driver\Exception\RuntimeException, m9 J. z+ D0 p' @
  10. MongoDB\Driver\Exception\SSLConnectionException$ d" A0 j/ k+ v5 |0 K$ N& [5 H
  11. MongoDB\Driver\Exception\UnexpectedValueException9 O5 _0 ]" z3 n/ [) h
  12. MongoDB\Driver\Exception\WriteException
复制代码
$ L+ w) n+ ^/ i: D& z

2 B4 Y5 Z: w% L' q
游客,如果您要查看本帖隐藏内容请回复
7 {; \' a: w+ Q2 D
点击查看全部
( c: a% n. q; g2 o6 ?: t2 a, X* K7 z5 J
( k% q7 [4 H0 |2 E5 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:24 , Processed in 0.059397 second(s), 22 queries .

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