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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9786|回复: 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不支持以前的写法。8 l  V  d; |3 ^8 W5 V' Z

9 G9 U5 ^! s. d9 S; {: b1 V* p  ^1 w下面用PHP7新的API总结一下:- M0 }6 a" h. Q" w7 K5 I
0 l. a$ q  X7 l' s: X  ~* l
一:CURD
, b* J; J& R) u" _' L# i" D2 w2 L! R* O4 h. H1 Z/ T+ A8 q
1:链接
  s' }/ \7 z# e  d; v" _" @8 J- g: @( x8 f9 [
  1. <?php
    - j$ L( S4 u) D4 }. M: ]
  2. //链接mongodb
    3 E9 _+ k" G' |0 x: e$ G
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    4 T* q5 a( v' M8 b' @: i
  4. root 用户;123:密码;如果没有密码则不写
复制代码

) U9 a# h( s0 [/ M( R+ E$ T
* e' }) M' A% t. p9 k2:查询
! z' L3 s4 W$ L; [! [: P+ @' ]& y/ K& b" T5 N
  1. <?php
    : ~5 g, K- E! ?1 A. y

  2. 7 Q; ^0 D& J9 c4 O0 K
  3. //链接mongodb: y# ~4 q/ u& ]( o6 K; G6 u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& [- A, c- a3 k: q

  5. & O+ Q; ]8 b& b9 D8 f& f; I
  6. //查询
    # s2 d; l! `- c
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0* M6 j% I! y  P6 u: F8 M, _0 z0 g
  8. $options = [2 s4 \% u/ Z7 I1 R3 i8 R" l9 I
  9.    'projection' => ['_id' => 0], //不输出_id字段) V0 c$ L* g2 C- J
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 j: V# R7 j, _
  11. ];
    ) O! o. W  J: ]4 M/ L! x. w: C8 _
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    : b' @3 |6 U$ L; x; b1 j; p
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& J# l# D# K9 Q: U( p4 d/ d# O

  14. & l7 n7 b0 X) }  b5 b

  15. : C0 `" [( s1 V: R4 Q0 y
  16. foreach ($list as $document) {4 c" J& s3 H7 q) j
  17.     print_r($document);
    # S3 W% X) c7 o5 E! N
  18. }
复制代码

# @) n" o- A9 g* V: u查询更多条件使用方法,参考第二节mongodb基本命令,查询
( ]7 _& X+ r0 {8 ^# `: F+ n! V
) `, c! i4 z4 P2 K1 l- X3:添加' u$ n8 T2 r4 b  q/ q! M! i" w

5 W9 v+ i# N+ E8 T8 k
  1. <?php
    " }4 L$ c) U- v% `+ W3 _6 t

  2.   o8 B, [# x5 |+ L0 k( W1 _  N+ T" B
  3. //链接mongodb
    4 }. r, |; r1 \+ V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# V: q( ]) F$ S9 ]' [
  5. . n9 R( S& [( H) m3 ^+ d8 e% O
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      K; Y1 ^* b/ Y* L8 X  c  k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    3 Q, e* L* D/ y0 T# v! t
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    , n) z8 B" @' A. Z. \
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);8 A: g, {; w4 z3 \
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

3 Z% t) U1 y( o) q+ w4:修改
" l$ O! M! T8 n8 Q4 @! o
& Z; H) B4 ]. I7 A
  1. <?php3 z) n, }9 }3 v* O. g+ V3 f1 {3 S
  2. , |  y# Z" Z  N4 h8 ?# r
  3. //链接mongodb: C* R6 C: ~5 j, w( Z! q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' |, E) L+ k- V  \- ^

  5. + @; [0 G: M/ }0 i" g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 |- E: C, X, m# h- w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 l6 R! V2 [8 s) O
  8. $bulk->update(0 H# ^  S+ g/ t9 r
  9.         ['user_id' => 2],
    5 z8 o6 l/ T0 @# |/ ?; q9 O& t
  10.         ['$set'=>['real_name'=>'中国国']
    7 t. B1 ?5 ^9 l* q( Y1 Y8 `
  11. ]); & T$ T2 i% n. F: k! Y% K
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
      M. D8 l, n9 M$ c& E% k
  13. //1:字段不存在会添加一个字段;; ]' \5 l/ o. r8 u& V7 `2 `+ Q
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 t1 Y# u4 l/ ^0 Y7 [- G& _

  15. . C, u3 Z- |+ [: s7 K, \
  16. 3 \4 [2 k- O# q5 C1 c
  17. //如果条件不存在不新增加,可以通过设置upsert9 u; O. ~% O% _0 S& c; \! b6 F$ J
  18. //db.collectionName.update(query, obj, upsert, multi);6 w+ ^- |) e+ ?( e

  19. - X% X( Y2 h2 L, [. Q% w
  20. $bulk->update(
    4 E( p. A4 w/ l0 I, L& k
  21.         ['user_id' => 5],
    / V- _" W' P, p$ k9 ~4 c
  22.         [$ J, |7 J/ B; t, K# G& A
  23.                 '$set'=>['fff'=>'中国国']8 p1 B8 X, \# [9 J4 |* W7 R- l( @
  24.         ],
    ) a" g! W0 _! P' N
  25.         ['multi' => true, 'upsert' => false]
    % z' j2 ^1 \" G$ [9 s4 e
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
      d5 q. c% S+ P4 R! V6 x8 Y# d
  27.         //upsert为 treu:表示不存在就新增
    $ ~) L' k$ j$ i6 o5 C8 A! f! f' |
  28. );
    . s& d( N, r6 K  Z+ l) M8 O+ m- u
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

3 h9 A& }! t6 l1 z2 A3 o* R( x: \0 e* \2 S0 l; c' u2 x
ordered 设置8 K5 V8 R+ n  B7 f# E/ _  b/ p
7 N3 m- u% y* `& s! ]6 v! k
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( r( _2 Q% ]# j0 C5 O' ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' q7 J5 f2 Q/ c, ~$ S
) T+ b3 B$ S( [; O8 ^8 K
5:删除0 I  h% R' e7 N# t, ~

/ Y. G$ ~1 d7 }4 P2 c6 G$ S! p
  1. <?php9 t' e  s& p2 D5 U6 v+ r5 q

  2. , c0 O6 u/ R7 T
  3. //链接mongodb
    0 m9 K5 G% k" g) x9 m7 m- p  |4 x
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 s2 E" ?& }! u
  5. ; i  r2 `6 m; B4 j! w
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% H+ _/ r; O/ v+ e8 }  V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- \) c8 M0 R* R4 O4 _( |
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    8 s: r# y5 m! _9 Z  N+ i' ~" v4 N
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    : }4 a0 I, O. H/ R7 O
  10. delete还可以通过limit设置不同删除方式( i1 C" A  P  V8 P9 H8 C& \6 I

  11. & h8 W& |/ v) {" @5 \" z
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据9 D6 I7 H% U# D" H) u
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 M4 e0 L& k6 W
7 n% V' W( R2 Q# E
6:捕获异常
- t: k9 h. D2 ]& u6 T+ V, E* U2 h% h# A, M6 F
  1. MongoDB\Driver\Exception\AuthenticationException; Q0 o* T# G& D
  2. MongoDB\Driver\Exception\BulkWriteException
    ! B! ?3 K7 B* }  Q1 E
  3. MongoDB\Driver\Exception\ConnectionException3 T$ ?( R1 ?' e; D. D: L
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ' o- e" \* D! A$ }
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    6 E1 I. Z7 i/ `
  6. MongoDB\Driver\Exception\ExecutionTimeoutException6 J, t9 K4 O# S  x
  7. MongoDB\Driver\Exception\InvalidArgumentException
    1 v; ^+ K% W8 E2 K/ N0 ^5 O( j
  8. MongoDB\Driver\Exception\LogicException
    % ^; R5 z& |0 \4 x8 C0 x# M
  9. MongoDB\Driver\Exception\RuntimeException
    0 V4 P1 y* T. Q; |
  10. MongoDB\Driver\Exception\SSLConnectionException* H: F5 E# v* A; V
  11. MongoDB\Driver\Exception\UnexpectedValueException- ~# o/ Y% E# r) T8 f
  12. MongoDB\Driver\Exception\WriteException
复制代码

3 H) O3 I8 K5 x5 J2 t  {4 o% p6 N5 R/ S6 J
游客,如果您要查看本帖隐藏内容请回复
# S$ q( a2 u9 c- M" i
点击查看全部8 L& r; S3 [6 h

( ^4 A* q& r* l4 L0 ]$ L5 V
, K8 t. ]7 D- I/ G9 ], D+ h8 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 12:49 , Processed in 0.109781 second(s), 19 queries .

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