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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14340|回复: 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# e2 o( Z0 Y5 u* A% e' T3 i

( O7 y% `( l: F( u+ L/ O下面用PHP7新的API总结一下:
" S+ w) T# r& }; W5 I* J
, }! H9 x* l9 C4 X+ D一:CURD5 E$ N9 r. D# E' r+ A, @3 S

! ]& E. _, @) v# q1 t3 R1:链接
3 @6 {/ j2 {9 o, S: M( p. Q' ?7 S: q: _. S- F4 `
  1. <?php: T& x" S  R( S" B$ I6 q
  2. //链接mongodb# @2 v  H6 I1 D% f. I
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ' Z3 I# d* Q3 s; M& I3 M% D
  4. root 用户;123:密码;如果没有密码则不写
复制代码
4 Y) o' ?! g2 p4 H

4 t; e7 \  u: o0 k! t# d2:查询
5 s8 ]" s2 j+ H4 N2 s. \; m! ?0 y/ Z# p1 C% w
  1. <?php! ^2 z4 ?: c! T6 J" Z: y. r; l  Y
  2. 8 U/ D" e$ o* E3 ^$ h. ^
  3. //链接mongodb3 t8 \$ c+ H5 [3 v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' O5 D' z# n- _$ X! y% T  A# A
  5. " d' t5 J# P3 h. l4 t8 Z2 \0 V
  6. //查询8 z8 t6 I5 s2 H; y" m* ~" ~7 ]
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于09 k# ?5 f' X  ~/ s  S# Y$ g
  8. $options = [1 N8 D$ Q: ?+ \/ H; z
  9.    'projection' => ['_id' => 0], //不输出_id字段; I- l/ \7 Z) A
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    / \2 C8 a4 N1 [: Z+ Y$ t
  11. ];" m! T" z1 f" k& Z* p
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    2 I# h& \9 G- O2 p8 ^0 z
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ( j9 E2 i$ J! A4 P  t) ^
  14.   `8 N' i  }( a/ {: R: w/ ^1 E) P
  15. : ^' D+ s# C& L5 Q
  16. foreach ($list as $document) {
    . m5 _! }2 n" x  s! x6 r
  17.     print_r($document); & J6 L  r3 E3 ~, h: }- H- e+ |
  18. }
复制代码

& u. g1 ]  @/ o- J( I+ @查询更多条件使用方法,参考第二节mongodb基本命令,查询( [  s9 \8 F- J$ \7 f
2 e6 O1 Z7 O( r. x; v2 g6 G
3:添加
- h% a8 e: B6 w
; z; ~+ f8 M# A* k$ L# w! v
  1. <?php% {# X4 ~9 X  H1 _
  2. / ?. d9 @9 F! R' J/ |
  3. //链接mongodb( U8 c8 r6 I8 |9 A2 o% ^6 `; ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( ^3 Y6 J3 d/ o7 @5 c. p9 D* p

  5. 7 t/ H! @  [4 b5 y3 b* _' n
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 q( Y1 A  B8 \" m9 U. j6 v, w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 B7 Y* V" d3 F8 ~8 z/ p
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ; @  f1 f& e* q1 C3 Q2 j# K7 A
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* r/ n% [0 y4 V4 G
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

) C$ m% W9 L- X* o5 T4:修改
$ Q. n7 N. G. {" _3 B, z# J5 ^  F. V- ~" d' g& }
  1. <?php
    6 D- @* G. D6 `: A

  2. + ]# o0 I5 D7 {; Q% P/ ~$ w) Z* c
  3. //链接mongodb! e: p$ J# p; f' o& h$ B  Z0 ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    - e( m- K/ e1 G! L
  5. 4 L5 m$ ~; O( H# \% u% l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- L8 g4 d6 {( _: x: s9 Q" m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. x; {! O9 `' {$ p# C! |, Q- n
  8. $bulk->update(
    , M) t3 ^$ B  H; `- p: f
  9.         ['user_id' => 2]," v/ S0 ~' j' L% G# y+ V# j
  10.         ['$set'=>['real_name'=>'中国国']
    / t9 ~7 {+ P% g: d; o. h
  11. ]);
      a1 S5 f0 ]( M1 P7 G; G, Y. [. }
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,- a, z" t4 ]- q. j* p
  13. //1:字段不存在会添加一个字段;. [5 z4 L* s2 W! `9 W) {# M5 h
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    / d: d0 N3 g* l! A
  15. 0 z# f4 X4 \# K; B0 p9 Y1 X
  16. 9 m9 @+ b5 s- U0 s2 b2 Z) h6 b
  17. //如果条件不存在不新增加,可以通过设置upsert6 ]8 G3 \) [5 \0 ~  H$ ~
  18. //db.collectionName.update(query, obj, upsert, multi);% [( Z# }- e: q# T

  19. + z& C9 v  ~! a/ E- M. ~3 Q- c6 ?% c9 h
  20. $bulk->update(0 |2 [6 ~9 `$ N; @2 W: Y( T
  21.         ['user_id' => 5],& X. O& j7 j; L5 A) l/ c9 H) R
  22.         [
    2 D: A7 I: v! X! Q; m$ Z6 y% q
  23.                 '$set'=>['fff'=>'中国国']
    ; \+ ~* x! G1 E7 [1 q( z
  24.         ],
    1 n; w% T8 S( x% x3 V
  25.         ['multi' => true, 'upsert' => false]
    " Y  c& y) h0 t- h
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条9 m- \) v/ Q" `2 d: W8 e& C9 \
  27.         //upsert为 treu:表示不存在就新增% e+ Q1 t1 `  s3 Q; J. ]: c
  28. );
    8 |& P  N" J: F2 S8 ]! A8 z. x0 z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

& _9 E2 F. [. h1 A3 h0 A7 J4 L& e4 I* g9 @7 C2 T: @" K
ordered 设置
" r4 `- d; q5 X3 x) x$ A3 U* F0 u3 \5 t$ O0 |
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' F4 H4 _% u# ^2 y3 G5 b
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 D! l+ q' r8 P/ }
. L! I2 E9 I; R5:删除
! V. b8 |4 T9 R! U: i+ L+ K
" |9 t% W) ]8 Q9 D2 w- r! k: y
  1. <?php
    6 e/ v7 c8 |, x% c. r. T9 o/ X

  2. ' I* B; Y  z  a3 a! d0 {
  3. //链接mongodb
    5 ~; \6 T  o  h) m; w) Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 ?3 Y/ X' A( o8 q/ Q* ]

  5. % t- l. `- z" p. {' Y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: ?" s4 R4 T: e/ U3 U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " s0 D8 }$ P  u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段. p; P1 n5 O; }& ~# _# G! F* H2 y
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合. A+ M, j% A$ m' _
  10. delete还可以通过limit设置不同删除方式
    . ]8 V- K9 g2 k: Z4 e" [) @; y
  11. + e& x. ~0 B: q( q# G4 Q! x
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据. |: Z! G' e1 ~/ ?0 }: c5 R$ S
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

' b  k4 l$ j) }& u6 I8 a# |1 y3 m; ]" y- v5 a# T) Z* V' F
6:捕获异常
* R/ f  i- B% \: O" h5 e( k) a$ s9 [" D/ p4 ~: W! m& U
  1. MongoDB\Driver\Exception\AuthenticationException
    % ]- P. d, W0 ]. T
  2. MongoDB\Driver\Exception\BulkWriteException
    : @0 L" ]' ^4 y
  3. MongoDB\Driver\Exception\ConnectionException+ U3 k5 [2 k' B  Q% _
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    * M1 y/ c# Z0 _6 |
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ( r' ^9 }* ]% w$ P+ T. H4 l
  6. MongoDB\Driver\Exception\ExecutionTimeoutException$ u2 E5 g; E; f) k1 |" L
  7. MongoDB\Driver\Exception\InvalidArgumentException$ K2 R( s6 J. z0 U( m
  8. MongoDB\Driver\Exception\LogicException; A: ?7 m/ l8 X1 k/ f+ `
  9. MongoDB\Driver\Exception\RuntimeException7 a8 u! ~4 |5 P$ k4 S
  10. MongoDB\Driver\Exception\SSLConnectionException
    % w/ Z- ^0 q& j& K! h+ y
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ; x% z5 E3 z7 g1 ^
  12. MongoDB\Driver\Exception\WriteException
复制代码
! W( a! @5 ]5 ~* O4 X
3 G9 ~7 f3 W; k5 A: o  e* }. Y+ h& i
游客,如果您要查看本帖隐藏内容请回复
! M, N. e7 c" ~) |- P8 T' {6 B* z- }
点击查看全部
% x( l: {7 a8 Z# `+ w. a1 p% e% N& h8 t' ?

- e' J4 |" s4 `" ?& q) F. f- \7 C0 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:35 , Processed in 0.074603 second(s), 19 queries .

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