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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14955|回复: 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不支持以前的写法。8 e9 ?; w: |1 w8 B  D% b. P" v- R

# j. d3 d& t" w+ M下面用PHP7新的API总结一下:. ~9 T( b/ L/ P6 f3 b

) \* b9 W; I6 V. P一:CURD3 `  s- E% `0 }3 e8 N# q

" X9 b. u3 _- @" F" C$ |& p1:链接5 @+ e- K4 F7 D
; \7 f% M/ Q6 F
  1. <?php0 t& M5 x8 |- w4 e8 o5 j
  2. //链接mongodb, u9 D; M& w" {% F# g3 [% e8 {: P
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    , b! @! V+ W& X0 k1 I
  4. root 用户;123:密码;如果没有密码则不写
复制代码
' u. d! L5 k* E2 _0 ^7 x: l, i
# S! u8 r4 s& n  Y( V& `% `( W
2:查询) X1 T$ I* t, V9 m. l9 \
. D% C- \7 F! z9 {9 b/ [" ?
  1. <?php
    % `& [% v+ v, b1 W4 E

  2. ) U6 z8 U1 k% r. m' n/ T0 r
  3. //链接mongodb
    5 q) D. W9 h5 @* c6 h3 K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , M. ]" U& z- [- n: ~3 s# |

  5. # m6 Z- u4 p, ]; B3 C4 m6 e
  6. //查询
    4 i( l9 ]1 F1 D% g* ^  |( D* F
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0+ ]+ d) N2 K. f7 L: V
  8. $options = [
    : y( m/ ~- M6 M
  9.    'projection' => ['_id' => 0], //不输出_id字段( D  n- [7 k( c$ c
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序& ^5 v1 {& J! j* I" C, E% n
  11. ];
    * k& ~7 _8 i3 J) ]; x6 e8 p
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    6 K* _2 j: Z. V! h) Y. K: d
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合( L9 j! S# z: Y( T2 T" }

  14. 8 C: A! h' G6 Z8 N5 q  H2 u
  15. 2 }. I0 l. X5 G2 r% ?7 Q
  16. foreach ($list as $document) {
    1 @4 h: {6 \  _: ~/ M, f
  17.     print_r($document); 4 R* _2 B3 R  m% y2 m
  18. }
复制代码
) }6 @+ @- A3 h  a
查询更多条件使用方法,参考第二节mongodb基本命令,查询
( z  h2 ]! ~, W$ U! N5 x( q: |7 f0 Q( J5 N# a  K4 @
3:添加
2 n9 z7 n- x) N: M8 r, c& `$ q- U: u; W7 e
  1. <?php
    ! w) [" o* b' R. Z0 z. F
  2. 4 B) i( [8 a9 i' m
  3. //链接mongodb
      L% y2 t. C7 d& N" \# b6 c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 ~( @. |. b$ T- R7 y" g0 @1 d

  5. 0 _0 Y! n0 U4 f- W8 j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& v$ u5 M4 R7 [4 L6 S! |
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 Q$ y  {6 E9 M4 a2 f# `
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);7 K& y# R' `. l6 C
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      ?5 S2 p( s  I9 B! u3 `
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

( D- l' e) F7 `4:修改4 \" u+ e( J: \6 R, K' r
% z3 H' i3 q1 p* _
  1. <?php" s1 ]5 J# j$ X3 H

  2.   ]! Z, R' d8 R* Q0 I) C4 J2 L9 Q
  3. //链接mongodb
    1 w/ r* }: \/ b  n) K
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% l( {3 z4 @7 i& M. k
  5. - r& a5 y& J  P; L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " V& ?9 ^8 q- k& z  N" Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 b; T* q# j$ Z
  8. $bulk->update(4 ^# K/ F) `+ f: t
  9.         ['user_id' => 2],
    1 n2 u* D! S. V3 w0 f; {  g# `
  10.         ['$set'=>['real_name'=>'中国国']
    0 @, h% h0 L; [
  11. ]);
    8 w0 f( b  z# H. I5 C
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    3 J* G+ L* w0 C- h. D5 x: ~
  13. //1:字段不存在会添加一个字段;! z0 ^, y2 J# k/ H2 O4 c
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert, I6 ?& Z, a! W) M3 M. j
  15. ! d" C" }9 t1 M  J8 {% ~* T
  16. 6 |) j, G$ u% u4 C
  17. //如果条件不存在不新增加,可以通过设置upsert
    % V0 R! w! Z, q9 V8 a
  18. //db.collectionName.update(query, obj, upsert, multi);
    & L" g$ b: o9 D, k" L

  19. . {; T! E% h" I
  20. $bulk->update(. f8 v% v& e! x
  21.         ['user_id' => 5]," ~* c! ~4 T  f7 A. [* }- f
  22.         [
    5 y7 Z3 m4 I" l" J) @( f( w
  23.                 '$set'=>['fff'=>'中国国']
    0 ~1 |% c/ K5 |! ?9 M0 ]. @9 P, W
  24.         ],4 t8 C/ {6 Q4 s6 S0 Y) F
  25.         ['multi' => true, 'upsert' => false]
    8 u5 `0 P* H: s& [, I: [$ y* F% z. Y
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' K2 k4 H: t5 O/ O8 W+ _5 f. N+ u
  27.         //upsert为 treu:表示不存在就新增
    6 T- V" c) G. A$ i( \0 [; b3 n3 o$ [
  28. );/ o; s5 v+ J# N. c0 }$ {5 ~
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. N; |2 T( ], }8 D! l! S* F. G

* v$ R% q3 c; D3 dordered 设置
# w4 Z9 m; W/ E9 n7 T4 M3 y, k  \; g; c
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! M2 ~6 q/ J* }- w2 U2 j6 n! P
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 P2 U/ |+ g/ m  |8 u1 U3 J9 |1 Z  M' w
5:删除
- `$ W  q7 @! M
2 ?1 ]) N; t% E3 u: b
  1. <?php0 Y* W; N9 C* a3 z, ^! A
  2. $ Q2 l7 `6 N: B* r+ \% R) F
  3. //链接mongodb- a; }; S# V, ~/ n$ J2 i) r
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 e- }/ E, U$ N% o! V( b8 I

  5. , K) e  y: X, c  S3 _
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , h/ U: o8 W6 ~3 H- S0 r
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 _, L8 y& m# o, T' R0 h$ G0 c
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    & P# x3 L& |( g- p# U" n  ?
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合$ e" j# c: [+ B
  10. delete还可以通过limit设置不同删除方式
    7 {$ u) X3 m( y( c6 h

  11. * \, H4 X' g" T3 x% }; Y7 [3 o
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据! B4 i' e8 O# a! H. D3 E- [; i
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 m/ T+ S% s' w/ N

' u  D+ g! P4 w8 L; O1 y& F6:捕获异常/ H% ~6 f% M% h% L3 }

. c8 C5 E- T& t* P3 v
  1. MongoDB\Driver\Exception\AuthenticationException" @% I+ `! K  N  J( [
  2. MongoDB\Driver\Exception\BulkWriteException- z; @2 p$ h' o
  3. MongoDB\Driver\Exception\ConnectionException
    . m6 J5 r8 r. L* x+ S) a% n  K1 @9 n
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    , V, d& {3 U. _2 l
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口0 q0 Q# m( S. Y  L3 C( v8 W1 M/ }
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    5 D! q; p5 {7 l; \
  7. MongoDB\Driver\Exception\InvalidArgumentException
    + v% m$ v( b- R# B( b
  8. MongoDB\Driver\Exception\LogicException* z$ ?6 }0 \/ W# A6 [7 i: l; _
  9. MongoDB\Driver\Exception\RuntimeException$ q1 o! ?  y% g3 j# [
  10. MongoDB\Driver\Exception\SSLConnectionException$ z) R3 a0 s& |9 h+ G+ z  r3 d
  11. MongoDB\Driver\Exception\UnexpectedValueException
    " ?: P- l. ]: T% {7 r" O
  12. MongoDB\Driver\Exception\WriteException
复制代码
4 L. g8 {, z4 a" i+ i+ k! }# J8 T
# J! ~; Y- C9 p8 S- Z5 R
游客,如果您要查看本帖隐藏内容请回复

4 |1 e) v  k0 Z1 u点击查看全部
- Z- O1 p" v" }7 N* m0 R* b% s# |1 o( B) Y

: o9 Y5 J" k# [8 q" ?# @2 {$ K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:24 , Processed in 0.058407 second(s), 19 queries .

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