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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11551|回复: 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不支持以前的写法。
2 \  k0 T5 L5 T' }
7 J# p- u) O: D3 r- |! {下面用PHP7新的API总结一下:
4 T/ H7 m) x  ?5 t0 c8 `: U; s0 Z: m9 _# Q+ Q$ w  ^
一:CURD! a7 r% @" n& k5 y. K7 b+ `8 p$ E
6 @+ x) i# ?4 A( `! t
1:链接
& D5 x* _+ D9 E, d; b: n1 G5 ^  K7 U6 K
  1. <?php# u/ ]0 b0 Z9 j& O" o5 b$ o3 G
  2. //链接mongodb; `( M# K* O1 s  X* Q/ a, A$ m- i
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    3 g. ~, s- T, E$ N1 O& Y" s
  4. root 用户;123:密码;如果没有密码则不写
复制代码
8 R  F* b+ ]. D  [$ y7 S9 x

' o# i8 R- f# k/ Z% b+ D8 ?2:查询
, l, S' Y  o0 Q: Z+ S$ ~$ o8 D+ J" s5 o
  1. <?php
    ; o% C5 j( v/ G+ y6 s
  2. 8 N* E6 X% u/ o) `+ d2 `* S
  3. //链接mongodb4 n. _9 Z5 d/ w6 t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 O5 g  |5 B. }2 Z3 p% ~* R

  5. , [4 S( |; S" Y& d: [% H* _. n
  6. //查询$ `7 Z2 Z5 q6 h6 W
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
      v8 E& a/ L3 d/ c4 c7 A; u6 l
  8. $options = [4 f' t7 p* \: g! H0 l$ T
  9.    'projection' => ['_id' => 0], //不输出_id字段* w. T3 T/ ]& J4 E5 D5 t  l
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序# L! E2 |. W/ n4 E$ m2 d
  11. ];
    5 C& c* b! O1 \  X4 `
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求( w$ A7 u- g* O  \7 O% ^6 l
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合, H1 S- n4 M- `& ], X: G
  14. . i( Q( _2 i- n! `1 W

  15. % r# r1 v+ ?3 |2 p. k
  16. foreach ($list as $document) {
    " L; E) _$ j) D9 k5 V
  17.     print_r($document);
    3 V! p& v) j* V' b
  18. }
复制代码
2 A# `5 J* ~4 J7 Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询# a) P$ S0 t! l" k

) t9 d4 q/ R+ i3 j  H0 V! P% T3:添加
, }; i4 U6 D# J: E% R5 ~
" ]6 b1 U& ]" ~
  1. <?php
    . }8 x1 w: h4 j( c$ [: p
  2. ; f1 ?3 U9 X  T; C) [: J
  3. //链接mongodb
    5 s- t' y( ]3 F0 a0 v5 n8 J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# b' }7 }( x8 C7 ^

  5. 0 _( A. t2 ?) a+ `, D( Y1 h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: o; }( U% E1 S3 q. {
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 d- a/ b1 u1 b! Y. q* V7 `2 Y
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);+ `3 V! b  u# Z5 x, s' Z8 D
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* T9 o& N' I* N
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* E" T( ?& k+ P5 \; i  f3 F) k4:修改+ C7 U' p, h1 u6 N. J. U4 E
* m4 |% C1 Y3 \4 ~. |7 r; ]
  1. <?php
    ( C; {  N2 C+ C/ o- a

  2. $ M% A5 r: k6 h) m- c3 X
  3. //链接mongodb1 L4 b( b) S/ z% ~( V' y( u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) f% L" B" n7 v( ]( D

  5. " _  ^* K; Q+ G% X. k+ h. W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, N8 m+ ~7 ^( t
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - Z" K9 u; D2 K* [
  8. $bulk->update(( ~1 ], M0 @' }! U
  9.         ['user_id' => 2],- h! R, o* _% }( @7 q
  10.         ['$set'=>['real_name'=>'中国国']
    ( ^& O: a4 D% j
  11. ]);
    1 ^# t. f, n+ r  H" i
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ' A# E* ?6 m* j. t  f
  13. //1:字段不存在会添加一个字段;# R  w1 f; C+ B* L  X1 o
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ( n3 Q/ t5 E" G3 t
  15. 6 y  I. z7 Z/ c# }2 _9 p- r- T
  16. 4 ?  b  J" M8 D- D
  17. //如果条件不存在不新增加,可以通过设置upsert
    & ?# O+ }9 s& n! J8 T. m
  18. //db.collectionName.update(query, obj, upsert, multi);
    5 n( I3 O$ _! \  E/ Z1 I

  19. / D) }3 [& U) v+ F: n, w  L
  20. $bulk->update(; g8 }3 E# {+ ^7 H
  21.         ['user_id' => 5],$ W' u$ i) q" u: ?8 T; ^
  22.         [
    * s( X: t1 M/ a, a: t
  23.                 '$set'=>['fff'=>'中国国']
    ( ~) f* v) b6 X3 f& z* B3 q: x! c% h
  24.         ],
    - |6 t1 w& X- B* A
  25.         ['multi' => true, 'upsert' => false]
    9 M5 }3 N" t& v" Z
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 \* Q% S3 k3 ~: x5 B6 W3 H
  27.         //upsert为 treu:表示不存在就新增( N8 R6 D+ Z6 F. ?3 I# X2 t
  28. );
    & b  c3 y( M8 z9 R; F; [/ j. s
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

- _! c( G  G7 c( x! Y, [
$ T6 P. l- Y9 i* Wordered 设置9 M5 B) z* }, n) E8 F

* [/ S* r$ q( i  x  r, ^1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 }% T4 |& @4 w( ~8 u. a% |' A. v) v
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
- h5 G! ~4 F2 s6 ~+ r% Q+ d( a6 i. r: d% O
5:删除; Z0 j1 K* |( b$ w& i
# P  h; O3 d- |9 h
  1. <?php& N! g+ G( f/ G; D) [4 k0 u; l" G/ v

  2. % d3 P% F4 x, r' K/ ~, y/ a+ _7 R
  3. //链接mongodb7 e/ [5 e, i$ ~" H" S% r6 W% P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      Y8 ]5 v8 E; h
  5. $ T) M" T9 o# {) @7 F
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( h9 L9 @7 I3 K1 L" u# _
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 j! Q( L% U$ O
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ! g- ^" y( F6 J4 t  ~9 R& h) P+ k! M1 C
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合. t* ~1 P- B$ s9 E0 I  v1 B9 |9 d9 \
  10. delete还可以通过limit设置不同删除方式4 `9 u, m) D! d+ B6 _" B
  11. 7 @' X) K4 K; l/ ~( c( |
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) G$ \5 U: u: S( w3 X% E  Y
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

. Q/ f/ w9 k7 {; l' N% Y8 h  ^2 L6 s9 s
( m* ?! t  @1 i. L6:捕获异常
" d! n2 N, W6 s4 d' L, G4 A0 k& O) A7 I9 R4 K2 a
  1. MongoDB\Driver\Exception\AuthenticationException
    $ B" K/ K% l, S9 m3 ^2 }1 z
  2. MongoDB\Driver\Exception\BulkWriteException
    ; i& w- m8 [2 p" w
  3. MongoDB\Driver\Exception\ConnectionException
    8 S# Y" X1 |+ @' V9 o5 i5 }$ q
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    $ ]  H) O5 R! d" z/ _! b5 y
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
      l) d; q& c- G3 R2 b, N# A/ V' w
  6. MongoDB\Driver\Exception\ExecutionTimeoutException: }1 F+ }: ?& ~2 ^+ M
  7. MongoDB\Driver\Exception\InvalidArgumentException' \+ y( p& V7 s- d5 t( w
  8. MongoDB\Driver\Exception\LogicException
    . V+ ]# K8 D9 ~' I9 `6 s; T
  9. MongoDB\Driver\Exception\RuntimeException: G) U2 }2 t  a8 ~( d4 @$ I
  10. MongoDB\Driver\Exception\SSLConnectionException4 g+ ^( J7 _' _/ C" u# E' x
  11. MongoDB\Driver\Exception\UnexpectedValueException
      d6 p1 v5 j0 M2 ?: `& u3 \, q" H
  12. MongoDB\Driver\Exception\WriteException
复制代码

3 m  Q5 y/ d6 h  ?# S. h. j: P
1 a, e( U2 M0 v0 }6 D; x
游客,如果您要查看本帖隐藏内容请回复

# l/ j1 y, z7 e9 w点击查看全部0 C1 M6 c* l2 Q
$ X4 C( O( D8 Y  r

/ C' z/ w! Y. r4 _2 E' z8 w% @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:14 , Processed in 0.112923 second(s), 20 queries .

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