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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10744|回复: 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不支持以前的写法。# U  O, H- q" J# _

( X' T3 q! G# j! |下面用PHP7新的API总结一下:
+ b$ ~# I/ b! Q1 b/ n6 |% l
. j" I, y0 o8 _6 d4 M2 X一:CURD
9 k" F4 h; O2 Y  Z7 @' b2 b) r
% F; y0 N0 @2 _2 u# |( g' l+ `1:链接( ]. ^# L% w/ x' _; }

3 ^# C  h; A6 x4 g
  1. <?php
    # ?( Z3 K  S8 B& {/ W6 f
  2. //链接mongodb
    / L! f6 F$ y) K
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');4 J& d$ s$ `% S* k  ]$ s
  4. root 用户;123:密码;如果没有密码则不写
复制代码

: A; G! o7 w8 J* w1 w* q4 ?1 U
, U" H1 ^: x3 F* h8 u/ l/ E2:查询
6 A$ L# W0 t3 [2 \7 L4 C" ]- h8 ?' ]3 O- `. p( h
  1. <?php9 q8 |4 d* |1 ?5 D( |$ V

  2. " l3 R# X7 s* }! s2 w* b
  3. //链接mongodb
      C# x% F, N# o! z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    2 J8 P" ]- I1 k2 `. X  K4 i9 h+ C; s
  5.   T+ B: r; ^2 |9 w6 H1 j# E# I
  6. //查询
    ' N, m( Y! K; G7 ?4 A/ s% z8 r
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0$ r* S! V& D( ^  [* [3 n- `7 A
  8. $options = [
    9 Z: F$ a+ J6 v) @8 ?
  9.    'projection' => ['_id' => 0], //不输出_id字段
    0 M, Z) K+ x$ k! D
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) W% N$ U" Q3 b3 o
  11. ];
    : r) j: Z% ]) _, D" e0 R0 `5 m# i
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    - ~+ w+ f% Y' }' L& W$ A
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合5 m: O- \. J3 R/ Y

  14.   M' P$ \* b. P2 N6 P5 L

  15. & o7 S. L7 @. D5 W0 V6 F
  16. foreach ($list as $document) {0 a0 w& Z" m7 G3 G: V
  17.     print_r($document);
    $ A8 c3 x4 d, c" t" f- x
  18. }
复制代码

" D2 u- ^8 v6 z% Z6 H% h" W查询更多条件使用方法,参考第二节mongodb基本命令,查询/ q% i  X+ a9 A) S- y/ M0 `
: w6 [! _3 W. j5 m
3:添加
$ W2 @2 t( J" K0 z) R( s9 ^" ^5 A, k; F& g) p/ F
  1. <?php  j1 S) f! q5 i) D/ S% x
  2. , }0 Z: b. z6 m
  3. //链接mongodb9 u- B/ G, }5 x. s1 E; z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + \+ h0 T2 [, J6 t; R5 P: A
  5. % {5 ?  ~8 Z% |  `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' [: Y' D. m' @9 D% ]& _
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- ]2 }2 X+ q$ |* |% K3 e
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);7 R2 A9 w. ~! F7 ~. ?1 [
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    " z- L9 S- j0 w) X
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* I9 F6 z6 \' ^' [: k) A
4:修改
  b2 q. K% u3 q; O" D, p0 o8 n
! k- b( A3 ^5 x9 I/ ?5 D& |6 e
  1. <?php
    , V  ]+ L8 |/ g
  2. . m& v& ]8 Y7 a4 B# I
  3. //链接mongodb  C; F. R5 Q6 a
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 y/ c: K4 F2 o8 J2 l' h1 h

  5. ( A6 C, V  O! H$ X9 E+ E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- q7 H5 h0 S4 Y) q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      [+ t( d) p4 t  ]) ]3 ]& K: v4 [
  8. $bulk->update(
    & C, `5 S- D* O2 F8 R. R7 a1 F
  9.         ['user_id' => 2],
    . P; S2 |! S: k1 n7 Q/ k
  10.         ['$set'=>['real_name'=>'中国国']/ U; P; g0 ~( b8 s1 j% B6 h
  11. ]); 1 A% k+ f0 F# ^
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    % g1 V8 N$ Y% M  a1 S/ \
  13. //1:字段不存在会添加一个字段;! |5 d2 K+ p- g. k# @- w: h
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    + C( _, t3 O$ [- z; y( z9 B
  15. " s1 A1 _$ q7 ~9 }. V5 C

  16. , k8 a# {1 g( x# G* T5 z
  17. //如果条件不存在不新增加,可以通过设置upsert! t; |3 _" O. u# A9 m7 S# u
  18. //db.collectionName.update(query, obj, upsert, multi);# h" T: {' j/ ?& a: Q* P- `* W: V
  19. 9 ^3 E/ c$ d+ r0 t0 S& T
  20. $bulk->update(4 _" w" F# n8 M0 D* C
  21.         ['user_id' => 5],
    * m; D$ f6 }4 ?2 C/ @- Q6 R
  22.         [
    $ u# G  `" E6 U) |
  23.                 '$set'=>['fff'=>'中国国']
    " m' u2 ?3 f) c; M! t4 W
  24.         ],
    0 T, q: P4 A& p; \( n+ M5 m/ X
  25.         ['multi' => true, 'upsert' => false]
    7 ?9 A2 g" @* V, S- D
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    7 i& h  `# G# Z# }+ R4 V: @
  27.         //upsert为 treu:表示不存在就新增
    ) C5 V, c/ R+ w5 O8 I
  28. );0 @6 D- y- `1 D4 Y6 s4 y6 @
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

. w- y- C: V1 f! N6 p0 |; i
! B4 n' G/ C0 X/ x8 a# Y  gordered 设置0 a/ u0 |% w6 q. n( A

- Y; k6 a9 P* _' Q3 z2 j7 A8 |2 ~1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。$ J1 H' u! g3 w8 Z, }) ~; w
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行( a/ F' ~9 R/ \4 x/ y! d8 G1 o0 k0 [
& a/ M8 P% u6 o- u& a3 g
5:删除1 V3 h8 t- ?9 @/ u2 h
. i3 k+ w3 K8 W% P
  1. <?php
    3 p& ~; i# x7 m1 ]. t! U; d. r) j
  2. 9 m2 E4 a0 X) \4 O( E$ ^; {
  3. //链接mongodb# V! \! a. N* _5 ]/ }: e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ?2 X. E( A: b/ c, P

  5. 0 T( m+ C' r1 R0 f/ S
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    7 R! A% T& s% J+ K0 b2 v# A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行" _# x) k0 }$ X1 a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    0 N6 e0 B5 j: i4 U; K* P
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) C" x+ [* s" o2 J0 h/ E3 }+ G; O
  10. delete还可以通过limit设置不同删除方式
    2 d4 S, b! w( ~/ u; |8 q/ f" X) E
  11. ) _& G4 g1 \/ b2 a
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    ' h* N) A* M! O
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

( W2 w; G* B* X' L: C  [
7 ]7 O8 S( q! A, e4 A. i7 G6:捕获异常4 x$ V9 d: j- [" U* w
- D0 ~& _, C" C) I
  1. MongoDB\Driver\Exception\AuthenticationException
    & G( K( `5 h/ }( F7 b3 K/ W
  2. MongoDB\Driver\Exception\BulkWriteException4 d4 A& T1 {8 o
  3. MongoDB\Driver\Exception\ConnectionException/ G# x/ `9 w4 S
  4. MongoDB\Driver\Exception\ConnectionTimeoutException7 l' t: o+ [) V/ F5 I+ C& X9 r& B
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ h  Z4 n' _; e+ b7 S  W
  6. MongoDB\Driver\Exception\ExecutionTimeoutException8 }% s5 I- \+ N5 k) z& W; G- c3 D2 Z
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ; t  g0 @8 A" S+ z/ a" o; o: a: j
  8. MongoDB\Driver\Exception\LogicException
    + i( E( N  G+ n' N0 r4 n/ c3 P
  9. MongoDB\Driver\Exception\RuntimeException
    ( A  ~4 a5 y8 s
  10. MongoDB\Driver\Exception\SSLConnectionException
    / V8 q( r$ [$ G  \# K
  11. MongoDB\Driver\Exception\UnexpectedValueException
    0 y5 x  a" @  R- {
  12. MongoDB\Driver\Exception\WriteException
复制代码
. g  D7 V$ i6 T/ w
0 L. T6 [/ p4 Q
游客,如果您要查看本帖隐藏内容请回复

& J$ O7 s" v- w+ I点击查看全部- U5 E5 v3 g! v: }1 P9 h1 f
2 }  Q' Z2 ^2 P
# O# N# H2 T8 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-19 09:56 , Processed in 0.146620 second(s), 21 queries .

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