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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15375|回复: 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不支持以前的写法。( c3 |  D2 k5 Y9 a
1 }$ C/ I% G8 F6 J$ N
下面用PHP7新的API总结一下:
3 h* e6 N9 j% f
3 R8 k; w8 [: W/ O7 m& y一:CURD
; Z. ]* f1 _2 u: E8 B3 k" g. z  A/ G; d/ |" ?
1:链接
) ]& v0 N* {. V! Y4 A& b/ ?. _+ ~! e4 }9 F! O
  1. <?php7 T1 H' x- r+ E4 q- y1 J) a
  2. //链接mongodb
    + b2 J- _0 U: S+ k9 m! ?* I" {/ D
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 f5 B* _2 q. r5 [6 M3 H
  4. root 用户;123:密码;如果没有密码则不写
复制代码
/ \+ A  c9 d3 n( W9 T+ _3 k

. z! S5 n' \/ d! S, |/ |2:查询: o! l9 L& c( n9 |* F3 a& Y

4 G! ]8 b5 J. o
  1. <?php
    / v5 f+ T9 z1 \* d4 T

  2. 0 e# z- |3 Z4 F) N
  3. //链接mongodb) X( \' L  }0 o% ]* y+ B1 }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' p7 Y9 s* v+ K# b5 p6 a7 ^* v
  5. 4 p. j# O( x  K5 |% [* L' ^' \
  6. //查询
    - H5 w: o  V1 [
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    5 v2 E* s4 M3 z2 @) l
  8. $options = [
    " t; S& S8 \, `# `9 L. {: R+ i
  9.    'projection' => ['_id' => 0], //不输出_id字段4 m' v! C/ s. I& N: X& v0 T
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    $ y4 e3 Y. U' M
  11. ];
    * K1 s3 S; o) g
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 Q6 g7 V- B. s" p) \& s+ q
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    % R& }; Q1 l" d0 K' |1 s
  14. 1 K2 ]! G; b. a/ q# I4 H

  15. ' {  M- m6 l! p0 A! u3 v: I" r( v
  16. foreach ($list as $document) {$ [5 M- n' i: ^$ [8 p' B
  17.     print_r($document);
    - z9 |9 y; Q; Z
  18. }
复制代码

$ t7 \& [( v4 x  M; y查询更多条件使用方法,参考第二节mongodb基本命令,查询
) b* ^2 J# K) v% q# X. h
' p/ }( X5 W. b+ n" r8 Q/ ^  [3:添加7 m9 y& X2 Q! Q
! |5 ]' c& p5 G, \* @/ Q1 W
  1. <?php
    * ?! T: E0 g) ?; O; g2 e1 J, X

  2. 6 K9 F$ N' m+ \
  3. //链接mongodb! q% M4 {) j; e+ ^4 l8 f4 E. V: B
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& Z5 K& F5 U% j- K% o

  5. 8 P  e, V$ J$ A) T  v, V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- Q$ s  {8 x9 N8 K7 u* S" u
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: c6 o" i5 G7 e4 O! |& U
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    " ~4 {& A0 N; o2 q( P3 w
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    # T+ E* i- o( N9 u8 X( d0 L
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
& i8 ]* f" F* N- ^" P% y
4:修改" d2 E! ~( b9 R  y

* V; U5 \: g! [2 z0 m6 @5 Q
  1. <?php! H% [& P. E8 }  f

  2. , e3 z% N6 _3 B. M  K
  3. //链接mongodb. G- H5 G4 F9 C# |. N, }3 K8 C
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, x/ `+ Z. r1 e$ P/ h  G# T
  5. 6 G/ ~  J. Q9 A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" C( y0 a0 y8 E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + Z( a% t& y4 z3 |6 z7 C0 X
  8. $bulk->update(
    5 O% W; l' c/ Y, C; ^" P) y! R, N: j
  9.         ['user_id' => 2],
    / Q6 I/ ~' h8 t* ^( }1 S6 h
  10.         ['$set'=>['real_name'=>'中国国']8 s; |/ o) E2 v- z# I, d5 E* |6 }4 _
  11. ]);
    # U2 v+ X( x" j
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    % n, ?3 Z% V! A/ C0 f
  13. //1:字段不存在会添加一个字段;0 W5 S8 d5 E) i: ^; Q$ W2 t
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    7 L4 H' {. X" \8 l8 d% }" \) E

  15. - B4 J& L, W0 S: j6 n* v0 k) i
  16. " k. ?" ]( l$ t3 k
  17. //如果条件不存在不新增加,可以通过设置upsert! D" p6 u8 \: ~( B* R" q/ m- W9 W
  18. //db.collectionName.update(query, obj, upsert, multi);* D" s3 w8 Q9 ], [
  19. ; q# p$ \5 E$ N! Z# x" U
  20. $bulk->update(6 Z3 H$ c+ X8 C" M/ o: _  _. v
  21.         ['user_id' => 5],
    ; i1 B5 k6 R/ m% t: G/ p
  22.         [
    7 N# e7 B9 h7 [6 W! w
  23.                 '$set'=>['fff'=>'中国国']6 T; P! Q, h- W8 ^4 A1 Z& X) i
  24.         ],
    2 C- N: X% T' }, N$ B" ^
  25.         ['multi' => true, 'upsert' => false]   C; i- z7 T7 O, t7 X
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条, ]# c% e- r. A8 F2 f
  27.         //upsert为 treu:表示不存在就新增
    9 a& k# U/ I. X* Y) e
  28. );0 ]0 E8 w9 M( P0 E2 c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: U3 y. ~8 O$ y! K% m  z" f3 b# ]/ Y$ I8 X$ P
ordered 设置  v; x* [3 L! ?" @" R- `

# X3 O! T8 c' D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。& U) @- t. U% s2 V  Y
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行7 z7 E4 e  l$ R
9 a+ a% x- ^' L& L4 F
5:删除
6 a: y; h4 ~  x' x4 {; e4 e# ^* A  b7 @. t, F4 ^" E7 H$ |
  1. <?php
    . x$ H8 ^% J% J9 T' h

  2. - ]) \* l  I* U* d' M
  3. //链接mongodb
    5 t# N3 \; r$ l, s5 n8 T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / s1 G9 m+ |9 K& m
  5. 1 q4 m+ R; b' p" }- R7 H: r
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 i. e. b6 o$ D- X7 {. }
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 e9 t& p! {/ d
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 Y0 E) y6 ?4 c- K0 x
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    0 E$ L: ?- X% H- d. Q0 \- ~
  10. delete还可以通过limit设置不同删除方式
    1 e/ c1 ?9 N1 y
  11. 9 }4 K2 e% r* @" B5 V# I; p, ~( S: [
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    / N$ s% ~* V" V. t
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

% G! A( N" ?0 i" X8 Y9 w: g" n; W( V0 q+ Y
6:捕获异常
5 y1 T; S8 X  q0 f1 M0 ^* I4 U( I3 U# Z5 u& N2 U0 X
  1. MongoDB\Driver\Exception\AuthenticationException
    4 S; ?. l! ~& I8 a9 A0 o
  2. MongoDB\Driver\Exception\BulkWriteException
    5 J5 z+ W, {9 ~6 C5 I
  3. MongoDB\Driver\Exception\ConnectionException' P( l  ]' G; @0 i, x% ~# r6 x1 }
  4. MongoDB\Driver\Exception\ConnectionTimeoutException6 F5 l5 A$ v, z# c$ r
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口9 b6 i* z+ B6 A6 Y- B
  6. MongoDB\Driver\Exception\ExecutionTimeoutException1 B4 k: I. `1 p
  7. MongoDB\Driver\Exception\InvalidArgumentException5 o+ y: g% x$ Q/ p- ^. ~6 b; c5 e7 X
  8. MongoDB\Driver\Exception\LogicException
    # q* n8 x2 m8 W/ T+ @/ P
  9. MongoDB\Driver\Exception\RuntimeException
    ' h; ?% ~$ o  w( o0 Q9 r
  10. MongoDB\Driver\Exception\SSLConnectionException# z6 E0 Z5 e! O  A$ t
  11. MongoDB\Driver\Exception\UnexpectedValueException
    . S, _" C5 Z; K$ q
  12. MongoDB\Driver\Exception\WriteException
复制代码

1 q- k, v  x3 \% s7 @# t2 H7 r# I! `- s1 p/ v4 ~
游客,如果您要查看本帖隐藏内容请回复

' S$ q3 n* G0 Z+ o2 W% z点击查看全部" U! {- C+ }$ }; v
6 X. Z# p/ Y) d  {2 a: j7 f9 c
; j8 O9 q) R" v8 |7 U1 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 23:59 , Processed in 0.056917 second(s), 19 queries .

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