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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14456|回复: 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 ]/ E( _' _! U+ a& G

- U$ v% \; ~. O) |  a% D2 J下面用PHP7新的API总结一下:/ P4 A: u$ g; M, n' N4 U. H$ R: M
* Q/ Y7 T' C+ \5 l* u$ v
一:CURD; K; ~. m2 L3 {7 }  U! m

) ~, l. I# E7 Z6 K  Z3 }5 p" r1:链接4 S4 M- T& X- A; u- g9 t4 Y
& ]6 E. m3 T% z4 n6 t
  1. <?php: Z7 A$ G3 U: B
  2. //链接mongodb$ ]0 I9 U0 l! s  e! l2 S! ^" o: [; k8 J5 r
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    - r7 `  E, u1 Y# A3 g6 _) t7 W
  4. root 用户;123:密码;如果没有密码则不写
复制代码

3 {0 q$ A/ s+ g, h; k# _0 {! s" F( r% k
2:查询
  j& ~, ~( h& w* M5 ~2 w& u* o& v$ [5 K$ m8 P% u
  1. <?php% G2 E  S7 M6 B/ ~- c" w% R

  2. % J1 p% q  a' Y, i
  3. //链接mongodb
    5 u' e  K9 J- E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 G4 F2 g% p0 Z, t$ [
  5. & q! p; z5 ~, O; L( n( T
  6. //查询# R2 F, r5 O) P0 r, E* L
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    - Q( K  Y, g# q, E" O1 X
  8. $options = [
    - C" j: V( \/ P# Y
  9.    'projection' => ['_id' => 0], //不输出_id字段0 G" m3 {. M7 d8 g
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序6 e: G& W/ ~% q5 `, ^8 V
  11. ];
    , t! W2 g; o) X. o0 o# N" Y
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    / W3 z5 f5 t* A% e
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    7 `1 Y( c+ d- T6 f4 j4 q; \

  14. : \. F; s' {9 r" n/ D, O3 m

  15. 5 h, D  ^- D2 L
  16. foreach ($list as $document) {
    , h) d$ X# r- {9 N9 P5 b& m4 p
  17.     print_r($document);
      q# a: R) T- ~( ?, S& t
  18. }
复制代码
4 o* l4 z5 u5 w( d
查询更多条件使用方法,参考第二节mongodb基本命令,查询2 C9 Q& O9 m* v/ o" e' Z4 [
3 @% Y7 ~* f) Z) e
3:添加
; H" L# S, j2 \8 D% ~% b3 W/ ^/ g/ J; f& n
  1. <?php. P9 y4 ^5 v& T9 r/ X7 g

  2. * G  r, T8 a8 k$ ^/ A4 t
  3. //链接mongodb
    8 H0 q0 ~* z& M* m1 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      h+ D. i  y/ E

  5. & u8 r7 K5 m" H0 P  U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; D  x% |& `; N( ]# J9 w  J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 p, O3 x6 t6 z; z4 J4 {5 b
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 o* c  Z1 n' J) G; K8 p
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);" J2 U9 m! ]: f! Z9 ?4 ~0 a
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

' L  a# p3 n. g. z4:修改5 {2 V3 L$ b2 ?+ n: Z6 Y8 M% Y6 {

( }" w! X( r8 f+ C9 B" R4 s
  1. <?php7 Q" D. K; j, G# {, I! E/ L

  2. ! F6 w( [& V* [- O
  3. //链接mongodb
    ) ]# v: ~- P0 T% S, Y4 u8 u9 c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    2 q3 X2 _3 `3 M) B
  5. 5 A( f4 S8 c( a. C. W/ E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    - t. X1 R7 v/ _, F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    $ |! w. j5 Y. F% U7 E9 {: k2 Q' `' g
  8. $bulk->update(
    + F/ W% Y& C7 ^3 o; z
  9.         ['user_id' => 2],
    1 t9 h: r+ `5 h7 j$ R) K8 z
  10.         ['$set'=>['real_name'=>'中国国'], |) s, E+ C5 _0 I
  11. ]); 9 g. S& u& \' C
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,# {4 @% m) [/ F0 z6 Y
  13. //1:字段不存在会添加一个字段;
    4 w2 u! N5 t9 v
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ; L8 W! ]1 Y  @: l4 o

  15. 5 P6 l+ s( L* [4 T

  16.   d& g7 j/ t7 g0 ~3 ^' J" J* x, C
  17. //如果条件不存在不新增加,可以通过设置upsert: e( {: @0 F  d2 x% m" @7 q! r
  18. //db.collectionName.update(query, obj, upsert, multi);
    6 S" k- M1 J% s- ^. X

  19. 7 N+ y# \# A3 h8 O* Y& f5 K! P
  20. $bulk->update(
    1 o" E$ M, C- \/ V
  21.         ['user_id' => 5],: g6 u& Q% N" N# G' K
  22.         [
    5 k4 @& z& L) ~  O+ @+ x. i
  23.                 '$set'=>['fff'=>'中国国']
    % O) d9 G( h/ g; j$ X1 u/ d
  24.         ],$ ?9 |( w; @1 v7 v. y. t
  25.         ['multi' => true, 'upsert' => false] 5 t9 D% r6 D. A9 N
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 Y8 t0 F, |% A
  27.         //upsert为 treu:表示不存在就新增
      F% w4 V( w0 d$ M9 O5 R/ |8 a
  28. );
    . X" l6 j# e) y& W3 Q4 z/ k
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 z1 u1 V2 j/ ]4 m

' }6 e8 Q; z# }6 G$ `6 hordered 设置8 K* U- l( v) q6 j

# Y4 k; A0 D3 Z& C1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ X- a9 }- T' @0 M5 U2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 k1 v  N3 Z6 }( W: ]2 d

& o4 K  A( ]6 `; c; G1 j  \5:删除! @0 J! t/ j, w9 U, `

! s- w7 T$ c0 f: t/ z- y
  1. <?php
    7 `  B& j  Y2 W0 x

  2. * W: m- Y9 C3 o" t; H+ |* B) F' `
  3. //链接mongodb- {/ R- p; L3 t) ]( p! m2 q, D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* I. v/ R' y0 V3 G9 s
  5. + S7 k+ V* E: C& t& s4 V+ F( `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    & p, x. d% V& q) N, M# j
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    , ?! q2 n- N: u. }- y: U5 K
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ' C, L6 o4 K3 g
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合7 [% n* z' `" f6 G
  10. delete还可以通过limit设置不同删除方式
    : w, `+ h2 w% d. o& K3 J4 Z

  11. , M2 |' |7 W% J
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据3 n: f$ a9 X9 S( _1 Z
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
- m( i% |5 k  S% ?0 n$ S

6 y2 y1 f; ]" G0 ?& k. {6:捕获异常* f! t/ {; r' m2 d5 S6 x
/ K% ?. s4 k6 K( o' @/ ~* ~$ h
  1. MongoDB\Driver\Exception\AuthenticationException9 F: G# g* @$ G# X) v0 a. n
  2. MongoDB\Driver\Exception\BulkWriteException
    * P( p) N% J! N- R& S5 b, h
  3. MongoDB\Driver\Exception\ConnectionException
    4 J, W4 V/ ^; Q# p0 Y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException! t/ v6 w  \2 w* B* B. G  u; a- J
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( t: l% `. R2 ~2 K) d8 R* ~
  6. MongoDB\Driver\Exception\ExecutionTimeoutException  |) W1 t$ D6 i: W# n2 U" @% `
  7. MongoDB\Driver\Exception\InvalidArgumentException
    * r6 m4 J" o4 X9 J" F! `2 \* H/ M
  8. MongoDB\Driver\Exception\LogicException
    : V  i3 @+ E3 i, ~
  9. MongoDB\Driver\Exception\RuntimeException# p' ]" D* o, @. ?/ J
  10. MongoDB\Driver\Exception\SSLConnectionException
    2 V5 E/ o  W8 [1 ]" d2 E
  11. MongoDB\Driver\Exception\UnexpectedValueException. k  S& j( H) ?7 ~  |
  12. MongoDB\Driver\Exception\WriteException
复制代码

( `* w7 y( e5 V$ y+ ^+ |% n2 `* }' S' @& E0 ]& Y6 Z( {3 H
游客,如果您要查看本帖隐藏内容请回复
: V" r0 Z( X9 p9 t' L# n! f
点击查看全部( z! d4 w0 b- e8 B8 n' h) B4 s
( [6 c& _; G' p; A9 `; p

- l- {- E$ ^' f: c9 u# ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:25 , Processed in 0.055521 second(s), 19 queries .

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