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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9847|回复: 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不支持以前的写法。/ l  c. g6 G7 J  ~' N1 b9 W, D
' H" o5 x* K4 w# e1 Y& b
下面用PHP7新的API总结一下:
) K6 `9 s8 _" `' H- _5 ?* m* }! a
0 v3 v+ S8 M" ~  b; k一:CURD" _# K, a8 W& m8 E$ ~- f

. G$ g# f9 v& d; c1:链接
8 l/ X- f, c  Z: ^5 ~* I' h
$ j" _: {8 J3 q7 q" g
  1. <?php
    $ n- d1 Y' Z+ D/ V' k" u8 V- f
  2. //链接mongodb
    5 d4 q  E- \1 h
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ D1 K" I2 i/ p, |, m
  4. root 用户;123:密码;如果没有密码则不写
复制代码
# A$ T1 |1 e. v7 N* }

8 \% m7 z* \6 o# {% ~, X. {( [2:查询
8 B4 H6 @9 @3 m6 o$ |$ a1 R0 A# q5 E9 \
  1. <?php
    3 R. E0 x6 D6 [! E6 |9 G( x( a7 I
  2. " U* C" N. W( C
  3. //链接mongodb1 a$ w" j0 |" V1 p1 O3 r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 ?, T! _. [' n5 U. d0 h5 q; B& |

  5. 4 G8 C- j- k) ~' O
  6. //查询
    / F  @% f  V% L' f) [2 D! u, h) J
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    4 R) K: Q3 v, q% Q* Z. I
  8. $options = [( t  `3 a- G! A- L
  9.    'projection' => ['_id' => 0], //不输出_id字段) c3 V/ ~: |* M3 N
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" {& x) u; F: g% {% z
  11. ];
    ) h+ j5 y& q& ?, \- [+ c  H
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求2 p' V$ h( [7 \/ v* t3 A; r
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合8 f) r# F* B2 s

  14. # G8 l5 s- I; u' X: l

  15. ; i# G7 I* o- F7 Y9 x4 u1 z
  16. foreach ($list as $document) {3 Z  S4 W; y+ j* i
  17.     print_r($document);
    . c( c7 ?9 c. k6 U, Y! F1 {
  18. }
复制代码
# F4 N& G( b* C) g* Q
查询更多条件使用方法,参考第二节mongodb基本命令,查询
! M6 I9 j( O# _9 x
- B% x" `, t* v) K3:添加2 j+ t# Y. L5 `- R

5 l( B* y1 Z4 o' m* n
  1. <?php8 i' F: h: [2 B4 a

  2. 7 e8 i' R: ~; a
  3. //链接mongodb2 S# r- I# G. I7 [( Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 A2 m# W6 {5 D( u; w
  5. 8 E& O8 r5 d7 V4 T
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( |* ]! }- I$ W+ g+ @$ d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 l5 p- X, T5 k$ x
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);% ]3 P4 l. r" j9 c/ ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    / {+ \; G5 y( U0 R
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, J, i+ B4 ?& U# q) e4:修改
, r5 z; Z6 |1 j9 _$ _5 }% t1 f, \  L. j
  1. <?php, b( H) @  O+ I
  2. # A3 A, T- s5 G. t# B
  3. //链接mongodb
    1 j# i3 C$ L7 n+ ]1 z. T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & N$ A  w' E! Y/ b
  5. 5 U8 Y0 V9 h1 L# g) h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' i- v. s; [7 E3 K  I& S+ j. \
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' M6 f, h- K9 p/ ~
  8. $bulk->update(1 l7 U- I, ~$ V0 ]8 c
  9.         ['user_id' => 2],
    1 A) w9 ^* [" u6 ]
  10.         ['$set'=>['real_name'=>'中国国']4 l. y! C' t- ~0 u- C
  11. ]); 5 }- i# r. P* n9 \
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,, ?+ d8 y  b) M
  13. //1:字段不存在会添加一个字段;" W4 {' ^  j7 X: S, g
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert& J% G% ^9 O) s& G& O( x; F8 F1 {

  15. 7 t3 x& X( e8 C# ]- e( x  h
  16. 8 w! |/ V4 f# r, w
  17. //如果条件不存在不新增加,可以通过设置upsert6 l; R' V  T& b: Z
  18. //db.collectionName.update(query, obj, upsert, multi);
    , C4 h" y5 o* u1 v/ e6 I

  19. 2 _( M' F* V# V1 O
  20. $bulk->update(  [$ L8 u* u) P, M6 r4 N: w/ E
  21.         ['user_id' => 5],
    $ t8 Y  }" a7 k. _+ ?; `
  22.         [2 t4 O+ t9 \: k3 }
  23.                 '$set'=>['fff'=>'中国国']. Q4 l2 H& d, ?# e7 _3 r$ W
  24.         ],* Q. o' o4 |+ t) \7 P. ?' ^
  25.         ['multi' => true, 'upsert' => false] ( w6 ]* H/ [& y) p; C6 p$ ]3 G
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条2 d/ G; g5 C! l  t, {$ Z
  27.         //upsert为 treu:表示不存在就新增# o, L& H; L7 W" z7 ?% `  F  T
  28. );
    " ?/ w4 w( G! X& H
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

7 I: ?3 b+ f* M, i$ N: S$ F$ P3 D  F( y) q: a
ordered 设置5 Z- `% `( q! V& R' I

3 K1 S$ ^) f# \3 q+ C, x1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。# E$ ?9 r* }/ Z( w4 ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
' X7 c+ r2 _! g' R! P: a/ R% w) n5 b/ B; n" J
5:删除
9 W; l% B( {' F2 N/ v- Z5 ?; F/ I: Q
  1. <?php. V! s1 m5 f7 }. h9 q" e

  2. 5 z: E9 }# ?0 k! T# J
  3. //链接mongodb
    / V/ h7 H" ~/ _* o6 _! ]
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! G% q; P5 _9 {) N; ~0 }0 D

  5. 2 ?* E) o0 Z: Y9 ^
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # F+ X$ G$ P1 U& z; F3 \( l8 k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: @- O5 v9 S1 |7 a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    * ~% r4 {+ y/ q0 }
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ( ?2 V7 Z( P2 T+ W( q/ A7 f
  10. delete还可以通过limit设置不同删除方式
    % H" J( u& k+ n5 ^; H6 j4 P, ^

  11. ) Y# n  e$ [$ d6 e8 ]9 c. }9 B+ C
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据5 p, b" _4 k& O' c
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" O2 ?6 g/ k. J* _

0 v' k4 w& V' N/ T* a+ B8 `9 ~6:捕获异常
+ Y1 `, ]* c, V5 G2 x9 r6 V* {/ _6 f
2 T, B2 W" C  [0 x7 r  d
  1. MongoDB\Driver\Exception\AuthenticationException
    ) Q1 w  L& f4 H2 F/ g( I
  2. MongoDB\Driver\Exception\BulkWriteException& ^5 x. ~9 t/ N3 _1 }  c) m
  3. MongoDB\Driver\Exception\ConnectionException
    ! e2 W- D- b' [. p; I6 A& Q. U
  4. MongoDB\Driver\Exception\ConnectionTimeoutException8 O6 `& R; q8 l- [& q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口2 W1 c* C0 d6 ?& |* a" T7 G3 K$ n. \
  6. MongoDB\Driver\Exception\ExecutionTimeoutException+ _) l; i  v7 V, z3 ]
  7. MongoDB\Driver\Exception\InvalidArgumentException, g: C/ S$ m3 h/ O
  8. MongoDB\Driver\Exception\LogicException$ {0 n" O" [, t* U( L- }; W
  9. MongoDB\Driver\Exception\RuntimeException% W! E- Q8 c: {6 G8 u
  10. MongoDB\Driver\Exception\SSLConnectionException
    4 P% h: [  q. F% ^/ {
  11. MongoDB\Driver\Exception\UnexpectedValueException
    * }3 k- \/ L4 A# q2 [) ?& z
  12. MongoDB\Driver\Exception\WriteException
复制代码
# C: T  ~2 e% X
7 n4 Z$ ]2 h8 m5 q/ ?: t
游客,如果您要查看本帖隐藏内容请回复
) S+ u; Y6 c! O, }! e+ n2 ?/ P
点击查看全部3 A. [+ X# y; h1 M' J( r

5 _$ V3 V; b  `- c# x% S0 q
2 F" ?: _4 q1 `0 I% _* |( u4 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-17 19:22 , Processed in 0.109074 second(s), 20 queries .

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