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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15380|回复: 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不支持以前的写法。# r# _' ]+ s7 k  j8 E# E

8 P  C6 I+ K% e2 k7 w( _下面用PHP7新的API总结一下:) B+ S( u; z( C: T4 j
$ y' Z6 e3 s! x( v/ K
一:CURD
1 p1 x% M1 R1 M+ h& G+ s8 F% a9 l0 U, e* S  ?( o$ }% [5 ]
1:链接
3 E/ r, U+ }( I5 u, g& z- k) j$ L' f
  1. <?php
    ! z  T# ^: o% Q6 X+ z% o: |, T1 E
  2. //链接mongodb& k6 u. w5 y2 ^# {
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');% z2 Q1 J2 m- g1 {- G) G+ Z, s6 ~- e
  4. root 用户;123:密码;如果没有密码则不写
复制代码

: W- w6 Q  M$ T& o( n/ ~' G& f+ Y, }; Z+ q  Z, V2 ~3 k7 l
2:查询( d& o9 N2 a1 l: Y3 f8 O

( I6 s/ Y3 P9 b9 L9 l6 b7 d
  1. <?php
    6 X6 Q& d) u: v; D; k* ~

  2. 2 q  ?. b# p/ h  U8 ^
  3. //链接mongodb
    : C/ S4 R( |* [! d1 F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 N: z4 t; x' e
  5. . |6 p0 G* |1 Z; Y/ \- c7 ^
  6. //查询
    1 L) Z6 T9 a" T  X5 H
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    # J2 x/ _- `5 F) L
  8. $options = [( Z9 P1 i9 i! T9 A& I. m8 r/ x2 M6 A; q7 Z
  9.    'projection' => ['_id' => 0], //不输出_id字段
    - o1 h2 |# T0 O4 I" o( P
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    . [) d- _9 U% h' a' i4 X9 w
  11. ];
    % y7 [! m4 A/ D) j, a' z& w6 ~+ F
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    6 q3 a$ A, c# U& P4 _) V9 R
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合1 ^# C# |" @- N0 F

  14. , O; R7 }5 h( X) e5 w
  15. ( g0 ?( S3 y, e' A& Q( c& f
  16. foreach ($list as $document) {, d6 c2 G: H1 q. J
  17.     print_r($document); - f% }3 A% X* _( {& w% g
  18. }
复制代码
- G) v. W" Y9 o
查询更多条件使用方法,参考第二节mongodb基本命令,查询
1 I0 x; u; L% v; F; Z! K* o* d% y  [$ T
3:添加
; Z( D0 c% z- a1 T
- @1 p  C9 h+ Y1 u8 d
  1. <?php
    8 c$ p: M) n: m' \& o# A* `

  2. " Z; @4 D; Q' ^& a1 a5 G
  3. //链接mongodb# @$ G2 i: p0 s# O8 ~) ?+ b, ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 B4 X; N+ [. U* F- d

  5. 9 d% J! f. V7 C+ V+ D
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    1 o+ k, J7 ]& T" G/ i) M  I
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - ?/ W/ t2 O) k1 `& y3 P8 V
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    , q' m5 C. z8 `7 E! j/ B
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);0 ]  ~# L' T2 I* e+ _
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

2 j; p/ R/ V: A3 c1 \4:修改
, _4 z8 g( l% \: F- \1 v) z' G" {" ]2 n, D* B! w+ a
  1. <?php7 y+ J; u& [( t* W

  2.   H) o' L2 V3 U7 B' x
  3. //链接mongodb
    ' s( Q& z+ x0 P  a7 N9 p
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( O1 ]) F  ~2 _0 x2 D
  5. ' ~, l2 N! j: k5 H! b8 E4 b4 }; T
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & ^- U- v1 R& [" M# `% E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 o( o+ b7 F* y
  8. $bulk->update(; p  W/ ~! f: c8 k6 E6 I' m
  9.         ['user_id' => 2],
    7 B! V+ `* c% U$ e, S  p
  10.         ['$set'=>['real_name'=>'中国国']8 ^6 z8 L( U# v( P2 [
  11. ]);
    , [* D( p) N/ s( E  W5 }8 u5 o: x
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 ~  X( E0 K6 T; Y: R- K* D' _7 _
  13. //1:字段不存在会添加一个字段;
    1 V% n' @6 j; [+ ~3 B9 c4 u) o
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    3 H4 J7 n0 P% s$ q- M

  15. ! }  x5 Y5 ~5 _4 J" s

  16. ! R& C2 q0 a  B/ F9 v4 d' Z) _
  17. //如果条件不存在不新增加,可以通过设置upsert6 G& F9 d/ a+ }  W- T4 Q
  18. //db.collectionName.update(query, obj, upsert, multi);& E5 i7 y" R# t& K8 U8 ^3 S
  19. " R7 N# L2 ^! O7 \% V9 g: K& G
  20. $bulk->update(
    . ~2 ^) ?" n4 d1 ~9 a% G
  21.         ['user_id' => 5],
    , X1 G+ `4 N2 [, D
  22.         [
    0 R% o/ j5 a; L
  23.                 '$set'=>['fff'=>'中国国']! C7 V9 n/ p2 @" K
  24.         ],
    # n, h( E/ ^$ x" d$ o
  25.         ['multi' => true, 'upsert' => false] 8 C/ `, J7 p6 k
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 r5 A/ H2 h7 y9 f
  27.         //upsert为 treu:表示不存在就新增
    / C# {7 |. c: q
  28. );
    2 p$ I: \, r# t& A" R( q. |0 E& q
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ e6 @$ t0 R% O& @! g1 S
. @9 v7 B: ^) zordered 设置
" Q9 o* W6 k$ V9 Q# C( o5 ]& _8 O8 |& d6 s
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 B( ]) Q  a3 f) x$ k% M2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行; f. G5 R4 |! u0 K3 w0 l
0 |4 g$ O& I' I* C) n
5:删除
* N' s: E& l+ |  t! r9 i
. K  H6 L6 _8 o. k
  1. <?php
    4 J$ f, S; `0 r& I3 W- ~" C: G" ^6 O3 J

  2. % b) h0 i" W" {' c% W
  3. //链接mongodb3 m5 P  A  j* H" c, d$ T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; U8 H$ W/ l7 h, U) Z' F& r
  5. ( ~% y0 m) M4 S! k' g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, Q( N+ Z9 a# }( J+ W* Z& G! {5 j7 m( y
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * z* O# J( r; c  O  g4 p5 V
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    - M# z- d% y0 T* x  l: i6 }2 q
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合# ~  B$ T( [  |; M
  10. delete还可以通过limit设置不同删除方式
    8 Y8 u: C# J  X/ L* v8 z# z( }

  11. 4 V$ p& Q% ]' O( s
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    6 P' B3 o6 x7 x! \
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
1 w) d! ]+ _& }% B: @

1 F9 H# D7 ~$ M7 g/ C7 _* Z! A6:捕获异常* ^9 Z2 V( h5 n6 `
7 T4 I1 m; ~! d& A& J' h5 z
  1. MongoDB\Driver\Exception\AuthenticationException
    3 a' L  ~# w; i2 n: ^: N
  2. MongoDB\Driver\Exception\BulkWriteException
    & D- s0 ]3 j' T8 @$ \0 Y
  3. MongoDB\Driver\Exception\ConnectionException
    + Y4 m4 g! ^8 A4 v) R
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ) g% a5 x6 _1 N& S3 Q) g8 c
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
      t7 @; t  Y6 A: S3 @, f
  6. MongoDB\Driver\Exception\ExecutionTimeoutException& X- S( [) K' R$ m" p
  7. MongoDB\Driver\Exception\InvalidArgumentException
    - x% H! X# C8 S5 x: ~
  8. MongoDB\Driver\Exception\LogicException
    " u  ^' U, f3 O
  9. MongoDB\Driver\Exception\RuntimeException2 R0 T4 D. Y/ A* \
  10. MongoDB\Driver\Exception\SSLConnectionException1 ~" ?- P5 i7 `# H  D3 ]6 [5 B8 N( B
  11. MongoDB\Driver\Exception\UnexpectedValueException
    9 }  v+ T' \4 [# f4 D' F* I) L- }
  12. MongoDB\Driver\Exception\WriteException
复制代码
3 i% t  W+ j6 q6 ^; g

' a7 ~1 Q' n5 I+ q$ T  ]
游客,如果您要查看本帖隐藏内容请回复
' m5 _+ g" x5 X, \( v2 D
点击查看全部
- H& {3 C1 T" O; Y, y0 M+ Q: z9 c6 q4 m) a: v' Y

& A8 `) a. T. P+ [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 02:16 , Processed in 0.067789 second(s), 22 queries .

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