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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11540|回复: 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不支持以前的写法。( N5 L% l8 ?- w2 h0 i) X9 e

$ a+ @. @$ `; R下面用PHP7新的API总结一下:
0 A! E  h% S: T: s3 [
) Z( q, a/ K- y. X; _' D5 ]一:CURD
6 _9 a% N8 O' @. S# M) @
: z5 ]: V/ H0 d$ A( Z3 H1:链接, Y3 t3 F% Q+ G5 Z+ n5 c
- O" N" E- o8 X; z
  1. <?php
    : T3 a1 E1 S0 {8 K
  2. //链接mongodb1 S; W  \9 w3 u* ?) F% f( M1 s
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');' B5 H) L9 v; w: x4 u
  4. root 用户;123:密码;如果没有密码则不写
复制代码
5 P2 ^) T- ]! W/ U* j

: B- D$ e6 V) u( O  ?: c# D4 l2:查询$ c" d* Q+ y' ~2 Y! V8 a: x
) ]% B! W  P% k- |" q1 k
  1. <?php: m7 p& |* L' V- B( |

  2. 5 X6 |/ B+ q  U& X" W; l% a  a
  3. //链接mongodb: s$ S6 P/ W3 ~" b$ y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# T- R3 W2 `! V! _* w1 t- i

  5. 8 u- B# x  {: ^5 K5 _6 t
  6. //查询- `7 m; u; P; M; _0 _
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0. Y* j7 F) z$ U, G+ {
  8. $options = [+ b* F9 \" P% t' E  G
  9.    'projection' => ['_id' => 0], //不输出_id字段8 l$ K) c; F; }  Z- m5 `: _
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' @$ q7 I/ M4 q2 N& `6 c
  11. ];
    " B3 d$ J! I& A' m: ~. }
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求, r/ N& k2 z7 @" R  c% B
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    0 o2 G: a) Y' K2 O% `. @% C: k* g

  14. " m# O3 D% }3 [6 o2 x! Y

  15. ( G( n+ K+ Z8 a/ M
  16. foreach ($list as $document) {$ y8 v9 X* I9 n
  17.     print_r($document); + d" R! a5 v  k! {7 p4 n+ w4 }/ X
  18. }
复制代码

9 ^- X2 v# i- S! J/ S1 y查询更多条件使用方法,参考第二节mongodb基本命令,查询- {- q, L( K( o* o) [
5 u0 D3 B1 t0 R; p
3:添加
* y/ w) x, K  ]/ G8 j  Q+ X  P- F4 h9 |  e
  1. <?php
      M6 M- R3 _& d0 S1 |* b$ Y- J- d/ S
  2. , V, s! I+ }  L  U, \% Z
  3. //链接mongodb
    2 k  _1 K$ ^1 b' K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    8 X2 _7 V0 c4 P/ J) Q* o

  5. / x/ d2 Z' d* Y% i, G, H7 h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  n. `" h2 A9 _% u! g; h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    & j$ z( r3 n9 h) _
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 p, [" B0 |* y! N( |% A+ x
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    * G3 O; u' ^3 b9 T
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

5 p4 X7 b0 L' e" o- O4:修改2 W' p! |% R9 A! ?" V! r/ ^4 m' e
: x9 h( W4 k7 ^, N
  1. <?php, A) G- a- I: n+ A  ?
  2. " {& w9 E1 L' Z3 P
  3. //链接mongodb. ~9 v2 p9 N3 J3 ~; a& |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ v9 O. F- K8 o! K
  5. - ]7 a4 z$ o% T2 D$ \  z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" c, A7 }* W  @4 V( Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 R( `: }! M% Y
  8. $bulk->update(
    . N! G0 x) ?( s2 T6 P6 p
  9.         ['user_id' => 2],1 y8 v- z+ c8 X3 [* o/ |. W
  10.         ['$set'=>['real_name'=>'中国国']  |" G3 ^" Y+ |/ v
  11. ]); 8 l0 _( B: G6 e! U3 M; M0 W; n
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    * A# N7 V4 W1 ?( ~
  13. //1:字段不存在会添加一个字段;" ^" ]" I3 D6 O5 V. f6 l) G. }
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    + V% p0 v4 w" j& {% t$ g/ N8 Q
  15. . \; }* M* E" A4 F6 P3 ?

  16. ( M4 ]9 \7 E  g( T/ v+ K" J
  17. //如果条件不存在不新增加,可以通过设置upsert5 S* w' f9 i1 ~$ S# c  Q
  18. //db.collectionName.update(query, obj, upsert, multi);
    ( e( ~! ?. t1 \

  19. , Y) F2 M" e7 Z
  20. $bulk->update(; [( B! T2 ]0 ^/ P; o) x
  21.         ['user_id' => 5],
    * A! s, H& a' p2 j& V
  22.         [
    7 R8 O4 I0 y5 S" k) W% c
  23.                 '$set'=>['fff'=>'中国国']
    . V) _0 S+ O; C
  24.         ],5 h. t" S+ b6 X; H; H* h) I' V
  25.         ['multi' => true, 'upsert' => false] 7 i. ^  ]/ o7 x- E! B2 d, _
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    8 \6 ~0 @' D! Q% `: Z
  27.         //upsert为 treu:表示不存在就新增
    ; s4 n8 ^: Y! e
  28. );" C+ {$ W% j) X! ?
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

  j& ?& X6 O4 N5 t( J/ z# I" e. S6 M6 C) x$ @
ordered 设置
2 V& c8 Q4 S1 d
8 ?, C" |# L% Q$ d! s& E0 ^0 b; L- E1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) f% s) y5 o  x8 P5 Y, W2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行$ |; g' V% t7 H8 J! S7 P  E+ q6 |7 [
- [) e5 V9 W. h6 ?* O4 M
5:删除
/ w# ]6 j  u) R- B7 `0 Z. N
  h( M! r) A: N& z# v8 c
  1. <?php; S! f4 C7 P- g1 c/ g8 Q; J; Z; ?

  2. 1 \5 C0 s( D. a4 J/ S2 c# F' T. q
  3. //链接mongodb' p5 |& O2 b! v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # P" k( o6 t* Z+ r; Z5 Z/ ^$ x

  5. 4 [& J! u6 S* h. K) ]5 R5 p
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; u3 E" K4 L" ^: C6 B. `; k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ |: F$ g2 S( R& G* \/ \! j" X5 \
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段5 ?* _# q2 S& L6 ?7 X$ O
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合6 O! ], ~$ S7 w4 B! R( M& Y
  10. delete还可以通过limit设置不同删除方式2 \- T  ]* w, v8 i' C) g

  11. : t0 Q% [: o9 @, H! R- I1 s
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据2 s" H1 e$ i/ E
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
5 Y! Y. s! `0 }( c: O1 F

( p% N: Z, ~" P, h6:捕获异常
' F8 r1 n. g* U5 v. W4 p
6 N0 B+ c, y0 z2 ^% S2 \
  1. MongoDB\Driver\Exception\AuthenticationException- m$ S- c- z6 E- @6 P% Y
  2. MongoDB\Driver\Exception\BulkWriteException
      g0 ]! S( e* O  t# w$ n- I
  3. MongoDB\Driver\Exception\ConnectionException  C  {; N  y/ L. c9 M& _8 e
  4. MongoDB\Driver\Exception\ConnectionTimeoutException* J' n5 E+ v! Q; s0 v8 n
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    8 C4 E# H: _" s1 X4 u
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    6 T" i6 w. E" Z7 ~) E
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ; Q  F# |$ b( b: z
  8. MongoDB\Driver\Exception\LogicException, V' ^; e. N7 p- I7 C' ?
  9. MongoDB\Driver\Exception\RuntimeException. @3 v5 O! X) w' n3 h* H# e
  10. MongoDB\Driver\Exception\SSLConnectionException: K1 G8 K# s0 M. `+ B) ?
  11. MongoDB\Driver\Exception\UnexpectedValueException2 W- M  J4 {3 p9 y5 P
  12. MongoDB\Driver\Exception\WriteException
复制代码
9 U$ X  q/ q* C' i2 Q( j4 m
, t/ [3 Z7 A5 w7 G, w3 K* o8 b
游客,如果您要查看本帖隐藏内容请回复

& N! a7 F% J) x4 g- O8 ]点击查看全部
! A" G4 j  N' \8 W7 N
6 Y0 o8 ^) A5 F) i: L, R9 ^
- {# N+ E0 S0 `  x* g) F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:01 , Processed in 0.105983 second(s), 21 queries .

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