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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15361|回复: 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不支持以前的写法。
" v9 v8 h9 Z  N7 g& V/ T6 ]* g! I3 N0 C% O. ?  I
下面用PHP7新的API总结一下:, G+ r- K4 n3 s3 T1 n
& J: B$ W& d! `9 N+ Q( w
一:CURD
4 V: U# }2 l* F4 |9 b/ ~2 [
- j; k) y' T" c& C- z1:链接, q: l& R+ K, `% x+ K! g
  c  ~& v( z" M0 y& G
  1. <?php
    5 x# V1 O+ Y& `) h$ t6 E
  2. //链接mongodb
    2 U& U1 O/ Y; J- }( _' ~
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    + ]0 \1 o- H! k7 e
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 ?6 {- s6 [/ C4 e8 q
* h% ?! q4 Q  |) [; m2:查询
: n/ q: h/ ~  ~6 {; Q+ i! L" G# w
" i4 S% J" `6 }$ Z0 J9 {: o
  1. <?php4 S$ C; e0 i& q0 w- [( |; R0 b
  2. 8 b+ Z; ?& `. q# O+ j1 m8 S, ~
  3. //链接mongodb- {' b. w* `% J, @) x$ i4 n$ O) Q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , E/ @5 |8 P$ u" a8 @

  5. " s( L5 m4 @: |' s5 Y' C: L
  6. //查询
    9 p. w" b3 Q4 ~# E9 ?& h, C
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    : J" e/ u+ J5 ]' e# O& X
  8. $options = [; c( T6 g# A1 q: z/ i/ Q
  9.    'projection' => ['_id' => 0], //不输出_id字段1 u+ ~! G5 h% t6 u6 t8 `& f& I7 t: `
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序% a" d8 `# e& X
  11. ];
    7 Z" M/ m7 a3 s' o
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    / ~9 Z) r8 d$ h3 N  w0 F3 \
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合: a$ B3 a; r) l! }6 S

  14. ) s9 q. F- d5 k  ]% \& P

  15. # B& z" e4 p/ u2 ~; ]# Z: p& g! T
  16. foreach ($list as $document) {6 R! L  }  f9 z
  17.     print_r($document);
    & U6 |% ~6 M; K' Z; {0 G
  18. }
复制代码
2 b$ X7 ]7 x& Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询
8 o2 o3 G1 e' s" H, \% E: K
; q8 U2 m4 Z% x/ b! u; D3:添加
( ]" Q/ V( x7 e5 G
; v5 q  g7 f: z: s
  1. <?php
    0 u9 a0 ~( U5 Q$ U9 h& z5 h3 c" C6 O

  2. * D( @! ]' z- i( v0 A
  3. //链接mongodb
    # m  n- |8 ^. w2 o. Q1 _1 t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & C7 r1 Y0 j1 J" p5 w( O, t0 H6 I) L
  5. % J: ]6 e+ T6 C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 ~  Z6 F* z/ O0 [8 |  q' i1 k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; {: y$ s! k7 h
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    / k" |. T) l; s+ U7 h# H
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);5 k$ o- s) O: d
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

- i! ]- I0 X& I& l4:修改
4 P, h7 _  `, a( |, D' j) W. k: ~$ H2 d$ V+ U' c' I
  1. <?php$ g! t) t, S! j. }* M( f

  2. ) e+ y: Y( N8 r, b& [) R; f
  3. //链接mongodb
    * G! P8 l  C: H9 t2 I* [  H5 s0 \, f/ ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ) G+ r( h, X: S3 H- `

  5. 9 A$ V5 B- ^$ Q: _# e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 q, S% G0 [6 v' l0 P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 H2 x; E8 m, {$ @( G# m3 G' \
  8. $bulk->update(9 t! V3 R# C2 B; o8 s! W% n4 \
  9.         ['user_id' => 2],3 ?) K% o1 _! S7 g' ]# k# m
  10.         ['$set'=>['real_name'=>'中国国']
    + q0 l, P' @5 ~" p# H$ o; c$ u
  11. ]); " T" d; S% W$ A# W+ k3 V' m
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ) @, K  v9 G& ?. J
  13. //1:字段不存在会添加一个字段;, e# v5 G* q4 ?3 I% K
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert1 c$ u# L3 Q1 R6 i; N4 e' y/ E

  15. / `: y4 e0 X7 C0 _( e

  16. - p  Q- l! W  p" q* B
  17. //如果条件不存在不新增加,可以通过设置upsert
    . U! m. M; j6 u: `
  18. //db.collectionName.update(query, obj, upsert, multi);. \6 _+ D; f. }" v7 Y

  19. $ [- o3 t& ?+ q  f
  20. $bulk->update(
    5 \7 T6 n  i5 J) O% o
  21.         ['user_id' => 5],5 A6 q2 r7 g9 _. t' N+ X5 P; X1 g
  22.         [$ D1 p7 ?7 s; a2 [
  23.                 '$set'=>['fff'=>'中国国']
    ( V, d- ~  l9 ]" k
  24.         ],; M1 T& C5 l' P' t
  25.         ['multi' => true, 'upsert' => false] ; t  U2 Q2 m2 a6 E4 J  W% B
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条) |' e  E3 h, }2 f& t) ~
  27.         //upsert为 treu:表示不存在就新增
    - W) L1 u4 s2 W; X
  28. );
    9 C4 Q4 E- [/ N: x2 X5 N2 b7 G
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

8 Q2 E) N$ l) `5 x3 @/ F
# ?! T  T* ~! k" v* W( Dordered 设置) U1 W3 `2 z0 a- A# K6 ^

5 S3 U. e7 r+ t" P# B3 T! h1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。" ?9 K* U3 g$ G  ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
8 N* N& x1 D4 S
( B' v/ k1 ^4 D, s1 S  @5:删除
: ]. u) f9 q( v! k4 y) U, F- v& e+ j  {$ O
  1. <?php
    " T7 o0 {' u' }

  2. ! n& k- @) A) I5 W0 \
  3. //链接mongodb+ V# y5 p) H/ K5 m# b6 K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# R( \0 r) `1 ?
  5.   F5 O; u, C9 z2 F9 x. C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 J: M) Q' a* E0 V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 M( j3 ?& O" r
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段- Z+ h6 g, f9 O# g; _* J$ t( N$ O
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    9 C; `4 v0 V; L- d+ J! i
  10. delete还可以通过limit设置不同删除方式1 X2 u! S- G3 o! a! ~9 z# v. H
  11. / [. j% A6 v0 U: S6 Y+ N
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    " M* G9 L0 V) B2 t2 ?# x" z5 o; k% s
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ i2 R% W% L. G, q
& B3 r! V1 o$ _. ^8 W5 S
6:捕获异常; b- V3 x8 E/ A9 U0 N

" T) `, ^( q3 O
  1. MongoDB\Driver\Exception\AuthenticationException% P" U+ b/ Q5 J) ?; U: a2 g1 B% q0 A
  2. MongoDB\Driver\Exception\BulkWriteException+ P7 C8 A% }5 w6 @4 G% c0 b9 T; h) g; D4 e
  3. MongoDB\Driver\Exception\ConnectionException" Z: Q& u" p$ `! o$ a5 f
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ( D  |1 M4 z& z( N0 [; r
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    9 H: T/ k' T$ n
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    2 c4 _4 |" p1 ~7 U
  7. MongoDB\Driver\Exception\InvalidArgumentException' X7 N8 B6 d3 K5 v7 ^+ s: l% d
  8. MongoDB\Driver\Exception\LogicException
    7 }: G( P/ Y" B) m6 n4 S
  9. MongoDB\Driver\Exception\RuntimeException5 k2 {% L- r6 g6 w: x
  10. MongoDB\Driver\Exception\SSLConnectionException2 s2 n5 a* |  N+ Y; x. C: q+ W/ ?
  11. MongoDB\Driver\Exception\UnexpectedValueException2 j0 H& e" ~" ?. H& g$ T
  12. MongoDB\Driver\Exception\WriteException
复制代码
1 F2 W& ~* F: A5 C" Y% z

9 O" o7 Y" V2 H; M, {
游客,如果您要查看本帖隐藏内容请回复
$ S3 ]% o: \/ [1 }: U0 b/ p: X
点击查看全部# F5 x0 h, V+ v( c% `4 f

4 H/ f5 k9 z) r6 ?* F% Z- D
+ {$ k" w/ Z8 e) s# q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:46 , Processed in 0.059152 second(s), 20 queries .

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