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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9613|回复: 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不支持以前的写法。3 g, y% l" }$ H$ ?' R: F, n

# h. |4 h6 H( v. O- r, `( t下面用PHP7新的API总结一下:
# x$ N; ~8 A- f( S- ^- [
" J5 o9 k- T5 e6 s一:CURD
, I# V2 |3 d* Y+ b8 n: q+ h0 V+ v& m' Q8 V
1:链接
5 @. b* d1 v6 a) B6 s' G% a: o' u3 t9 u0 A9 W) I+ x+ e
  1. <?php. K! B4 A' i3 F' m
  2. //链接mongodb
      T, B( [% K" ?8 c, V2 y" u
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 o$ K& V2 }, ?0 n+ `
  4. root 用户;123:密码;如果没有密码则不写
复制代码

6 I9 q! k9 X% }+ t% }5 q) \
$ \( w2 G: C0 O% o2 }7 m2:查询
$ ]- ?. n3 M1 ~& f/ N9 _% O" \, r6 a& {7 L; {9 N
  1. <?php
    " U1 @7 V) J7 l
  2. & G) T, b) D2 i" D; Y( o+ M1 `2 O" |
  3. //链接mongodb
    ! _5 s9 `7 \% W& M2 K$ i0 H- j) ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / _8 |5 K/ w- y; \; k. j

  5. % x, ~' f. ]$ m9 N3 d' r
  6. //查询
    , |. Q" f+ X6 p9 ?) a
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0- e0 F) }5 Q6 ~- J; J
  8. $options = [
    9 C# R, W) n$ s! |
  9.    'projection' => ['_id' => 0], //不输出_id字段  Y  u- T  p. g3 h. E; e
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    $ H% V( i! w1 U& |
  11. ];
    8 H$ J+ ^9 s, J5 Z7 _
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    & t" d: l1 m6 p" g0 |
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    5 s6 K; J$ R& `3 \2 L& s
  14. ) h9 g- l3 i" B1 b& r, E6 \, C5 a" B

  15. 8 t( u9 M0 v" F6 v0 m7 P
  16. foreach ($list as $document) {* p+ w2 r8 X( E2 D
  17.     print_r($document);
    7 O: ^/ C/ ~" B/ i# C, M
  18. }
复制代码

' z  A$ ^6 X' d2 Q; A, l查询更多条件使用方法,参考第二节mongodb基本命令,查询! z) Y. c5 R( {* Q) w# B0 U
/ q/ s% ~. s1 E9 d
3:添加
/ L8 [; Y- s8 u9 A
/ z7 L3 Q3 }4 s2 c
  1. <?php
    2 @" v0 g' o! S+ i8 O- O

  2.   i2 `2 e' a, J
  3. //链接mongodb
    ) x" n4 B* \) ^7 D& `
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( r7 c4 I  ^0 ]; q

  5. 4 w6 J5 e3 i( x' f' D' n1 c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    . k- H  @1 A1 F& p5 a
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 {* g2 O& z9 b# o+ j2 m/ z( p9 G
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);  t. l1 l+ ?+ G1 x
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 }& V* b0 }8 Q+ P6 ?: f9 S( w, l
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ q- H+ J- F+ i  a! J; _
4:修改
" D/ {9 R; l" z% }; S' u+ B, |9 H
3 ?( T* F0 K9 c; Y
  1. <?php
    $ [% D2 L( D- q  o( E: B8 J

  2. 0 L: ~) t( B4 @3 w
  3. //链接mongodb
    # r3 ~4 K6 b) d
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 n9 x' u! A. W% o" k

  5. 2 `' F! V6 \' d8 R4 T; D; a; B: B* y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & ?  y" {1 ]8 O. R3 t/ f& v* @
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! L7 ^: P; S1 W% b8 P
  8. $bulk->update(! u/ T) l* I& R$ X1 r! j% i+ D" m
  9.         ['user_id' => 2],8 L. r1 a* A8 d  ?8 K+ c
  10.         ['$set'=>['real_name'=>'中国国']
    & q0 \$ H. ^) t1 Z# A# _4 t( R
  11. ]);
    6 n+ c; V5 K2 k* F* D: b
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方," D) @; w( S- B. X. X
  13. //1:字段不存在会添加一个字段;8 d# y2 ]+ W& [: ?
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert. W. e+ D! D! i6 }: G! b3 u, u

  15. / B# R' T" n1 [6 d

  16. . ]+ J+ `5 S3 G4 {( q
  17. //如果条件不存在不新增加,可以通过设置upsert
    + P1 s$ Z& v: k4 J
  18. //db.collectionName.update(query, obj, upsert, multi);2 i2 D6 [# ~3 j! |
  19. ! E, G4 j; ]+ Y, E! C
  20. $bulk->update(
    + Q, u0 a- ~! @" d( l5 l
  21.         ['user_id' => 5],; a4 x- z( M- V2 |3 T, r! I! b  U
  22.         [
    6 x: ]0 U5 m8 g' P4 F' s( g$ B
  23.                 '$set'=>['fff'=>'中国国']
    : c6 t" a$ j' o6 k# H
  24.         ],3 W' s+ \) Y0 V8 r1 d# h
  25.         ['multi' => true, 'upsert' => false]
    & {* H9 W6 C- O7 S+ Q% }; F* Z7 g
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    5 ]& V5 h" [+ ?2 {8 c; _* O. y  K
  27.         //upsert为 treu:表示不存在就新增
    & I' k: m7 W$ o% a( j9 B& t
  28. );# V: [8 B7 G3 J! v0 W8 f9 G
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 _& |5 p' Y4 o, S, u

7 f' I+ H$ T( ~0 ?, n; O( ~ordered 设置
$ `  ?" I0 g- z! u; u- G) D' Z* E7 p* a& X' b. l% W" t& {
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
0 t* b6 B  h5 h; h7 [* k* k2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行+ O3 p, F+ J1 N/ X$ c; o. e$ C4 l
) @' I+ A8 Z- d  N/ z% a
5:删除: V) R8 C. P+ O9 t/ K) y9 Y- W8 d% P

& V  Z3 R. A& P6 T6 p- X; K
  1. <?php
    ! ^- V7 H2 n- L/ B# R% t$ p$ m
  2. ( t$ h# @# ^+ D
  3. //链接mongodb
    & Q, Y# D* q. T- D7 ~- T& z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 L+ y3 L  N9 j

  5. * i1 [6 m6 V6 P3 P5 I
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & G7 e# G7 v: ^3 L- E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : E+ X! r5 w: R5 l
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段. k& {5 w# ^& v  R
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' N% s9 `9 E2 c+ z" k
  10. delete还可以通过limit设置不同删除方式
    - z3 E4 L9 N6 ~  s. D3 Z, I
  11. 0 Y# v7 l7 I  C
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据+ i9 q8 k3 g" f' L2 n
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

" @+ S$ h7 v7 L5 I$ p# G
( J8 [' Y& m' g9 r4 \1 I+ r6:捕获异常
; |/ r( ?7 w8 y" V3 |5 x- |2 _
& }# e% Q2 j! Z, N* }) K( n7 c6 U
  1. MongoDB\Driver\Exception\AuthenticationException
    7 @  ^8 }( F9 w5 e2 t
  2. MongoDB\Driver\Exception\BulkWriteException
    6 G: F' P: t  Y  |3 T) w3 F
  3. MongoDB\Driver\Exception\ConnectionException
    3 R: H8 b7 M8 S
  4. MongoDB\Driver\Exception\ConnectionTimeoutException# u, K. ?. Q" t- S, U! }
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口  r& H8 ]1 Z( J" g3 v; {$ v% v
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    " _; D9 t7 n! i1 j
  7. MongoDB\Driver\Exception\InvalidArgumentException
    # _" ]# F$ c1 K$ x6 F/ M
  8. MongoDB\Driver\Exception\LogicException
    9 x/ X; \2 W( y; L# |, W. ^3 D8 x
  9. MongoDB\Driver\Exception\RuntimeException5 i6 E0 W6 X; P$ i$ U3 W
  10. MongoDB\Driver\Exception\SSLConnectionException) h, g9 B* s- H7 o
  11. MongoDB\Driver\Exception\UnexpectedValueException6 n2 M7 g3 P6 L) ^+ t# W
  12. MongoDB\Driver\Exception\WriteException
复制代码
9 T% N; h% s) ~8 o' B* e* E2 N- M

9 @0 {; Z6 ^7 M8 M0 b3 i, c" R
游客,如果您要查看本帖隐藏内容请回复
( ?; x1 c& ]! r
点击查看全部
- f3 Y. ^) Z4 D$ p% h6 v9 l" N1 J' M2 W. b) I

/ M- w& ~$ J2 d7 q, c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-3 01:41 , Processed in 0.114050 second(s), 19 queries .

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