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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14949|回复: 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不支持以前的写法。) m1 o6 |3 Q/ B0 Y1 u1 L6 E

2 H5 h" P/ {! x下面用PHP7新的API总结一下:
1 e0 c, y: x0 s' g2 H; C  X2 g0 C, N, E6 D, O/ C1 r  M
一:CURD8 u' h: Y0 S7 ~: B% }

% Z" h5 _4 j; j1 C5 i1:链接
- [5 N/ I3 ^  m1 k
5 r; }) E, \& u0 f' w9 @( e
  1. <?php6 t; j% J' C% A+ k! X1 }! Y
  2. //链接mongodb
    7 w! T! L( [! D7 x
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    + s! A6 H, D, F5 Q# q9 N
  4. root 用户;123:密码;如果没有密码则不写
复制代码

8 E# i% H& t: e4 A! f) {
7 w7 u6 S) V2 y- h  y2:查询' d9 F& |1 Q9 v/ T! L" Z

8 [' g7 A) o+ O& [5 x/ ~* N) `
  1. <?php
    * D; K2 w. U' S% T4 D" [

  2. 0 z  F2 j9 C7 m7 l* R# {3 t  k
  3. //链接mongodb+ t5 D3 \" E, `- W) |; i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& O/ f5 S% a& X( G
  5. & L0 s2 H5 @9 |. h
  6. //查询# y- ?- v7 X8 p  D' ~9 X  p
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    8 ?% K) ~4 y! N" {/ ]: z& i
  8. $options = [6 x' u* T- p2 |! g5 P# Q7 N! q
  9.    'projection' => ['_id' => 0], //不输出_id字段
    - f8 Y' G6 q3 g+ a+ [- g. N( h
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序0 J. `4 w9 ^: p( a' o' o6 v) l$ S0 {& m
  11. ];
    0 [; f8 k7 Z' n+ j+ C( ~
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    & }: O. u* h8 a: [
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    + n, q# @$ q  c1 A( }

  14. : w7 S% m  c5 S
  15. : L8 r$ a# }. L; b
  16. foreach ($list as $document) {: W7 K! `0 n9 i$ Z
  17.     print_r($document); ; e2 I$ n) A1 j) ^' @; d
  18. }
复制代码
- T* C. \: `4 J! S: }2 h
查询更多条件使用方法,参考第二节mongodb基本命令,查询
& E$ V+ c, _. W1 j, c. c" T* D2 b+ O2 a
3:添加1 N+ w4 t3 o$ \

9 I) |8 |+ b# {  e7 Y8 X2 W
  1. <?php
    ( d- Z* S: ^! _/ M' D$ @3 U8 ?5 D% }
  2. ' Y, B3 X2 b6 ^. i
  3. //链接mongodb
    + A  f8 P! r' k+ s% u. N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      K. m9 D7 _( r; o4 \4 H5 {( d" L7 X
  5. / F% }8 Z2 u8 m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " c- }# [/ f' |+ O
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + u0 @! l' e& T; n  x
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);7 [. o6 z' n, Q6 }8 B$ n. O
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    2 ]0 {- f. ]3 A1 s! T( q
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ w* h, Q0 k6 K) H5 B' ~9 v4:修改2 X$ g$ U* p# m+ M+ \
4 l2 A0 R) s  A
  1. <?php% ?4 y0 T( @$ k# `6 J
  2. 7 A& S- b# A* D: Z- |# ~% \
  3. //链接mongodb
    $ d4 ~1 Q* x8 i1 n
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  S7 I$ J2 D$ H+ b. Z! w# G
  5. 4 j9 G. J7 s2 W& k; V0 V5 Y# M
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行& I0 ?) K; ?& j! }! h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ x0 c  _) D' h* p8 x/ E. d
  8. $bulk->update(
    8 Y. M& h$ K/ y4 {
  9.         ['user_id' => 2],) R0 z  l# e# L
  10.         ['$set'=>['real_name'=>'中国国']4 u% K9 H. R$ u3 K8 g2 }% W2 b( M" E
  11. ]);
    3 \2 b* A, R  r' f) y
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方," L, A5 y, e& ^
  13. //1:字段不存在会添加一个字段;
    * _* Q* r! c" f$ _) q9 s. S
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert+ d& }+ |1 }* A. D2 V

  15. 1 M# e1 D1 |/ A+ h+ v! @6 x/ [
  16. ! Y' U( o8 ~  j. x7 l3 \
  17. //如果条件不存在不新增加,可以通过设置upsert
    " F# ]0 B  Q* e+ w& A5 j
  18. //db.collectionName.update(query, obj, upsert, multi);" ?) E9 g# ^% z( x5 h0 N) d" X

  19. ) h7 e4 c4 Z& ?1 {: G! d" B/ p
  20. $bulk->update(. J" V* d1 e9 g& q
  21.         ['user_id' => 5],
    - v; d6 Y7 \% N
  22.         [. Y% a" O$ p2 B4 _
  23.                 '$set'=>['fff'=>'中国国']: B& L4 }0 K# Q; Y; ~
  24.         ],6 |# v+ q8 e& g  u2 }$ }/ \
  25.         ['multi' => true, 'upsert' => false]
    " E6 n! ~6 F0 k2 ^: @5 p2 R# A
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条6 X  a( g% d3 f8 K( i! y3 }
  27.         //upsert为 treu:表示不存在就新增
    ; r( `5 H6 [" d2 w0 y/ y1 ]
  28. );% @  C- D9 f5 r* b4 a2 c- H
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ I' T4 _! h& Q

& }# ], F' K, ^# D* @ordered 设置/ h5 u8 E' i4 L0 F1 ]! c* Q, N

3 e$ X6 A3 H' M" p& O( J. X1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。" v3 Y; u+ w& A9 Y7 I- L# A
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
  {" `" z2 N% H% H2 F) S6 e4 S& u1 R8 P6 Y0 {9 F" L6 f
5:删除
  m" D$ K! V9 v) j+ C/ _% T5 t3 n
  1. <?php: D- t: D" E1 @2 W
  2. $ m* y+ j3 z# H+ j
  3. //链接mongodb: p6 w' Q# f+ p6 B) i8 s) j% r/ [) U
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 A0 Y, c* [2 s6 u3 W  O

  5. # L! y5 b1 Z8 p7 T, t
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ C& L: ]% t/ c+ I0 `: v( P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, ]' K  i7 c3 i) w7 F/ `
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段1 X* L3 M* U5 n
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* r/ U1 U$ H. O2 A  O
  10. delete还可以通过limit设置不同删除方式
    9 @, c8 B: @( c- o+ H. ?$ P

  11. 3 s4 w8 l0 b8 c2 C' u
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    0 {9 y' Q4 L1 E8 X; S/ s
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* c+ t* c/ [+ i  L* ]/ }
, b/ ~+ o' E5 g9 `% Y/ O* y6:捕获异常
+ B6 w/ k$ b5 K  J3 C3 X- y9 y$ Q! T/ b! P$ i4 V
  1. MongoDB\Driver\Exception\AuthenticationException& a0 E  O' o3 ~4 l9 W/ x) c3 o
  2. MongoDB\Driver\Exception\BulkWriteException
      g3 B. F5 j3 K% r( ~) O3 [9 @8 F
  3. MongoDB\Driver\Exception\ConnectionException
    - K- S: Q  h& k  y. q
  4. MongoDB\Driver\Exception\ConnectionTimeoutException& w7 r' J) i# v7 `. V+ l- p
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( R" D8 e1 c1 k& A  i9 X) C* G  [
  6. MongoDB\Driver\Exception\ExecutionTimeoutException6 ~% n  p" h) ^, F- E- i2 k: Z
  7. MongoDB\Driver\Exception\InvalidArgumentException
    * D* d5 D) u8 l  j
  8. MongoDB\Driver\Exception\LogicException0 |0 D  K) A$ _: F3 l
  9. MongoDB\Driver\Exception\RuntimeException, k  a# l+ l" t+ ], A0 u. \0 q
  10. MongoDB\Driver\Exception\SSLConnectionException7 J7 W1 i% Q2 V' e, X3 W$ v
  11. MongoDB\Driver\Exception\UnexpectedValueException
    " E# `9 m+ k, c
  12. MongoDB\Driver\Exception\WriteException
复制代码

4 e( m" d" {! i$ u& D! s- i+ T: m6 O; ~$ `) V* j
游客,如果您要查看本帖隐藏内容请回复
! N5 o% X  G  x4 j. Q! J
点击查看全部. ]/ M7 }# c5 H

, p- i# e' s9 v0 S' v) y2 b- i; z. S+ m: @6 m8 k3 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:43 , Processed in 0.048340 second(s), 20 queries .

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