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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11543|回复: 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不支持以前的写法。5 ?0 W, h' G0 G! W0 G

3 [2 D: Q' A+ i. H; T下面用PHP7新的API总结一下:. i* v$ l1 ^; g: X. ~* Y3 ?+ A
- [$ m# [& _6 f* d1 Z, b) F9 t
一:CURD5 `6 l/ L( h+ y
2 n! ~& b3 M' e* R2 g" A7 F- D
1:链接
: P& ~7 z( |2 B8 L- h1 q/ ^, |$ \& `/ G- _0 `
  1. <?php
    / w" F* e3 e$ N4 M2 O
  2. //链接mongodb
    ' L6 J$ c, d( s. o
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    . g  s- d  ~! q# Q7 K' ^0 ]
  4. root 用户;123:密码;如果没有密码则不写
复制代码
2 g+ K1 Y5 X: i$ |+ C1 i

. G  ]) w3 a& i! ^+ C6 c0 `2:查询
3 Y/ J5 B( y  r9 |- L8 p  G$ ]' m: d" O8 F8 A" M& j
  1. <?php
    : C4 W, e$ U1 `6 ]& `0 R
  2. " P( k( T5 h& |. c( E: v
  3. //链接mongodb
    & j. z+ e& x1 z6 `/ n8 @
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ d& G5 A: E2 v& x: u& ?

  5. * |2 Y, m0 }" b6 D* c
  6. //查询
    5 D' r/ h# z) @& a; t$ A' B" p
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 p+ U* [0 A: w, s8 ^
  8. $options = [% r) e  X& S0 ^- R( e
  9.    'projection' => ['_id' => 0], //不输出_id字段
    : J& R2 s  Q6 |9 l
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ t( Q0 j! h$ M$ [( r# U) W3 r; c+ ]
  11. ];
    7 o& B0 i& ~- B4 u5 l" E7 Z
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    0 r6 ^  y- Y; ~9 _$ M# E' o3 A
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合2 S  h3 K0 A; w5 K- X/ C

  14. 4 _4 H# D- G* N% W1 G
  15. 7 J0 Q: w& K, [+ e
  16. foreach ($list as $document) {* `8 J8 b# u; j1 S1 w
  17.     print_r($document); 7 L. v0 u0 C: j* K5 J
  18. }
复制代码
: F, D. u5 W, q: h
查询更多条件使用方法,参考第二节mongodb基本命令,查询, Q0 G1 U! H' e6 t# A9 M
6 v3 _: j: p3 V5 K
3:添加
1 {9 T  n7 O9 }0 \% r; s# T
; K$ L, Z+ N) P. I* L5 H
  1. <?php
    7 F6 v* k" @% K. S7 E# w- \  N- `/ [
  2. ; {  a  Z6 B* E( b) m$ ~6 o; H
  3. //链接mongodb, W) l% y- ^& @# j7 U1 m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. ~: _3 f5 i% _" \$ l
  5. / M3 ^5 V8 a9 H/ u3 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( ], ~# x* g& `1 W9 F1 m7 U5 h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      {5 B; n  I/ r* U( E# d
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    : O( H) x5 ?- i8 k
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ! ~  g6 F! D6 I- c7 M3 ]) w
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

- [. {: d9 m! Y# R4:修改: y/ h9 h8 Q8 ^
) P0 N4 b$ H- J+ x
  1. <?php
    4 e* E) m2 G' c
  2. * l% K% w  n( |; K
  3. //链接mongodb
    - E% s1 N* ~% ~1 _( L
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : ?' _9 S9 p3 w7 ^  m( Q

  5. ) C2 h5 X8 H- M2 O; z; m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    . @4 M2 r9 p: H6 t2 z  K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # R/ k3 H( o$ W0 x6 x
  8. $bulk->update(
    1 v- k% T* W: H! [
  9.         ['user_id' => 2],
    2 h+ B* D- `$ P" ^. S2 i
  10.         ['$set'=>['real_name'=>'中国国']( o0 @- G# |' o/ D$ W
  11. ]); 6 B, C) R) ], u  H* U9 N( t2 r
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    9 X5 `# @4 t: X  ^1 v
  13. //1:字段不存在会添加一个字段;9 u6 x% L& g1 s! r+ C
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ' h+ q4 A# S6 d: O1 S
  15. 6 |! e' C: g/ _. X4 ?8 [

  16. 4 g  T/ w2 B: S4 V
  17. //如果条件不存在不新增加,可以通过设置upsert! x8 v2 N* J5 H- w% e+ b  R4 }5 {
  18. //db.collectionName.update(query, obj, upsert, multi);( Q2 `: g8 W4 ^  R. z5 f/ n

  19. : R7 l1 r! L& t( b9 s+ O
  20. $bulk->update(2 W2 [0 N0 o3 F9 L
  21.         ['user_id' => 5],
    % [7 @1 Z# b$ I1 t: C- j  u
  22.         [
    $ T: ?) a2 p8 H1 u  [
  23.                 '$set'=>['fff'=>'中国国']
    1 t4 o6 g- D9 H  v- U9 i0 G
  24.         ],3 t. Z9 L1 w* a; s7 l; a
  25.         ['multi' => true, 'upsert' => false]
    , R+ e" }: U& p" N$ c% }
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 u: y  \% L7 k
  27.         //upsert为 treu:表示不存在就新增4 _# S" c, S6 e7 o! @
  28. );2 Q" W: X6 n0 K$ `7 Q( m
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

/ E9 @! h% l9 @% i* X* U6 ?3 n6 {: ^$ b. g
ordered 设置2 I% V7 a. I& C- L. B

- t7 h$ C& y8 q" m4 S  F) n0 B: e5 B1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。+ c9 K& a# t' I6 c0 L
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& d" _1 G+ r0 E% z5 N
  f+ d3 I8 y9 A6 `! @
5:删除
! A- r7 p, K* t" s8 ?. b- C
3 E; x5 V5 M* n7 E
  1. <?php
    9 Z  u! |5 P( m  L; [, F

  2. ( @. ^. w- a) r% ~6 d8 X/ G  O
  3. //链接mongodb: D- G& J$ |) b+ ]  v7 ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # I# s& L" e7 t0 c, B" \# P

  5. 9 W6 \; B7 E. e8 t9 P
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( n8 w7 x- c/ \8 D: {6 y- A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - h) ~( g+ r; S$ M+ P7 \; u  X
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 M' s, J' s  |" f) k
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合2 z4 M- t& @$ M8 i* @  h
  10. delete还可以通过limit设置不同删除方式
    % ]& ^  J+ z4 B6 \- X9 A" S

  11. % Q1 Z; J2 p6 f; Z7 v8 n" H: L
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    4 p4 y: |# l6 `" Q# ^9 b
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

4 r( m4 J7 Y, X' d1 c* L1 C. R4 n, m8 |& U
6:捕获异常
. v& [( o* T- C# A0 e* K, H, p8 l2 _- w9 Z3 L: v5 e
  1. MongoDB\Driver\Exception\AuthenticationException
    / w( A! G- x3 v
  2. MongoDB\Driver\Exception\BulkWriteException9 H$ Q0 z/ @0 ?5 K( G0 _
  3. MongoDB\Driver\Exception\ConnectionException
    7 c: Z- Z0 D  W8 e$ I
  4. MongoDB\Driver\Exception\ConnectionTimeoutException/ {& j8 d$ u  f# h
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    3 T- t, k7 a2 v
  6. MongoDB\Driver\Exception\ExecutionTimeoutException1 j/ F1 d4 `$ M/ ~) y' ]
  7. MongoDB\Driver\Exception\InvalidArgumentException5 R+ `7 s) I1 n& _, g
  8. MongoDB\Driver\Exception\LogicException
    * s7 J1 P' A6 k( N) q
  9. MongoDB\Driver\Exception\RuntimeException
    & P6 u( x* |' \$ d; k8 D
  10. MongoDB\Driver\Exception\SSLConnectionException
    0 h% W/ s  |8 g/ F6 E; B5 l: a
  11. MongoDB\Driver\Exception\UnexpectedValueException, J* ]7 r5 d" i5 d" {) G" g
  12. MongoDB\Driver\Exception\WriteException
复制代码
/ a5 `# w. n/ E) Z' B

% o' v* {9 A; F' W- K  b( q
游客,如果您要查看本帖隐藏内容请回复

; p2 g1 ?, b1 c/ c( _5 Y: F点击查看全部$ [1 O% s3 y* D4 a
( i- I. `8 i: O6 I+ K  u1 ]
6 u  c. u0 t$ ]6 `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:11 , Processed in 0.123108 second(s), 22 queries .

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