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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14951|回复: 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不支持以前的写法。" X8 J: ^. v( l! {1 u$ q8 ~; O
. T  S' k. Q8 V& E* A, o
下面用PHP7新的API总结一下:
7 b$ D' F( w1 r6 v* @# Z- ?4 _3 d" o4 @8 B) d, D5 `! t1 k7 W, I
一:CURD( v/ Q, @% b3 j9 z0 H+ K

3 Z) l! }- U3 E+ S* j: |1:链接* {% ~" G! B" x6 a* b1 n
$ V( q. L; v' _! W6 Z
  1. <?php
    ) g. j# W; |8 `' g2 ?$ I
  2. //链接mongodb
    ! y* C' t0 ]; D! L7 S
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');% S( V/ ^* M( q9 _7 O% b) a
  4. root 用户;123:密码;如果没有密码则不写
复制代码
9 B  |9 W& n# ]  v* s% i+ _  c

+ w$ ]9 @2 V2 U) ~2 d* `2:查询
  d( ?1 D" n& q. v* \
/ Y6 v; _: U4 `- N1 b+ p4 `( {
  1. <?php
    # s" _  B+ x: N2 N/ k' g# r4 k9 D: k
  2. 5 y/ r2 W' R. p: P9 P3 Q
  3. //链接mongodb
    1 i& ~& R2 S5 s- h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " _- r+ Z% s2 {: D7 S% R* s# l
  5. 2 x% J" l) l0 [+ W' N' K& y; {
  6. //查询% L2 B; Z, s, k" Y$ _% N( S
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0. X2 p% A: W3 k4 W
  8. $options = [
    ; [! G# m9 k! D$ i; z
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ( y% M6 a+ Q) c9 d+ \1 o
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序, H) C* x$ @* ]+ z( `, L- f) B2 D
  11. ];/ a- N6 J* q% m/ a2 q. R+ Q1 J
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    + {7 I6 D7 ?. J/ I
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ( i* Y8 C/ N6 R- k3 l. ?  j; Z

  14. 6 b7 S' ~; g/ u5 F4 H
  15. ; ^+ ]. s3 |6 q3 U2 n* q
  16. foreach ($list as $document) {
    % ^+ |5 b/ w" A% ^! Z- X% ^
  17.     print_r($document); 6 d: b2 C9 [# [) p" _
  18. }
复制代码

$ X$ K5 A+ ^# p) @查询更多条件使用方法,参考第二节mongodb基本命令,查询
9 h. L/ \3 K) Y/ b! L
2 e; I: A1 @' I, \# V. v3:添加
  A# F& P0 P& d
: W4 U: o& c9 i  J: a6 \% [
  1. <?php
    3 X3 d3 G9 g/ Q: [

  2. 8 {1 R8 X, V% f" C' V* m1 H! V: N- g
  3. //链接mongodb
    6 a. q9 B. _9 Q1 |" `+ K0 V& |4 P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! ^& K( B5 [7 w+ P* U7 G9 [$ w
  5. - ~, z1 T0 l  Y0 f# X4 }
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; g" ?& ?& @! A) ^; ~% W
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    $ `) y% A2 B. `& ?' h6 L5 S
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
      U- l/ I# e  x/ I
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);: d, O( o* [. C1 v. ]" S* F6 w
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

4 U) {$ N2 @1 ?' T$ m# s6 P& M4:修改
- ?7 J  J) `/ W! i) c( P* d* z1 B# [; w0 T2 k4 D
  1. <?php
    ( k* V: M: x* ]
  2. 4 l2 c* f: T" p
  3. //链接mongodb
    5 k. r8 h  x4 C# x, Y/ y$ m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    5 W: }" j8 N- z) Z; s* M( `

  5. " `9 |9 Y0 U+ c3 T) O; w1 A* m  |
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- D: B, `( `2 s! W
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行# q9 o0 Y7 r" V8 U0 C
  8. $bulk->update(
    4 S$ M+ Y% \" \( u8 o) E
  9.         ['user_id' => 2],6 F0 x' u1 X5 d0 r8 |
  10.         ['$set'=>['real_name'=>'中国国']) U% Y, y: |* k7 y( q- t$ ^3 H
  11. ]); $ o+ o  D  w& D: \; T
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    : ^' e/ W) f. z" I8 e+ d0 ]
  13. //1:字段不存在会添加一个字段;7 M3 Q( X" L+ S1 {6 l# t
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert" K# ]* v. M5 E* X& s, Z3 d( S5 u
  15. 8 _; H9 s- K" o0 ]; g) s3 p
  16. / r; s  R+ z# F# G
  17. //如果条件不存在不新增加,可以通过设置upsert7 U' ]* c& A: U: }. {
  18. //db.collectionName.update(query, obj, upsert, multi);: Y( u0 ?0 n5 Z8 a* ]. W( ?

  19. ( C1 l1 b/ \  m+ b/ o
  20. $bulk->update(
    2 I  \& t( A) ~# v/ O. N" h, E
  21.         ['user_id' => 5],9 Y; h7 y- @9 h6 Y
  22.         [
    0 d+ T' f( i/ h# c4 Q* z- s
  23.                 '$set'=>['fff'=>'中国国']
    % v+ w) l+ _; a6 D' u
  24.         ],
      Y2 x3 h( d, E
  25.         ['multi' => true, 'upsert' => false] 4 M" a* M( y2 h/ f! N5 q* N
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条5 ?+ W8 R: |; ]  Q8 a
  27.         //upsert为 treu:表示不存在就新增' m3 h+ Y4 I3 w- ?& k0 ~6 m
  28. );6 v6 N# y: e, f9 E4 w( ~1 ]8 Q
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
9 ?/ l! j1 d/ b6 u, P
5 H9 |5 p7 s" F+ L
ordered 设置7 O0 B, x( A; Z. o

# e$ u1 R2 O1 A4 }; N9 {1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- I( }! `* T8 W
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 _: K4 `8 b, g  x
5 n& J) {7 M$ n9 Q  Z8 ^* U
5:删除% A3 \2 {  [2 W# J7 ^
( I$ l+ d' ?6 |) l
  1. <?php
    * C  o; @: x, v( s2 q( K, J# L' z
  2. * d% `: a4 C) Y! W0 r0 C% J. X
  3. //链接mongodb
    6 `$ B" k( G) o+ r0 t% }& R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' h. t" i" H+ Q

  5. / u1 ?/ Q' ~! g8 U$ m2 J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ V: j5 M% A3 o+ ]1 A( q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! v% }9 B  m8 L/ K7 Y
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段, ]0 ~/ T' d* P
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    & N% u' I9 N% z0 @6 |3 a; J
  10. delete还可以通过limit设置不同删除方式
    1 n" L2 q0 k+ ^* L
  11. 3 F) |0 `6 O  i: i) j- z. g
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    4 ]. u( I% G5 Y8 I7 {+ U7 K
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

; s4 Q. d. f7 @4 a5 Z3 j1 l! o) c# S
6:捕获异常& c5 E5 h1 h  X( F* c
6 Y9 o1 N- p5 a3 t, w5 }  d
  1. MongoDB\Driver\Exception\AuthenticationException
    4 g  ~7 {2 ?9 Z
  2. MongoDB\Driver\Exception\BulkWriteException
    - B3 l0 L6 O7 }8 y% l- L
  3. MongoDB\Driver\Exception\ConnectionException5 o% G) H( h) q7 S$ ^' k
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    0 W( s* H0 L3 h2 F: A8 [
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口& K+ C# x2 p# l8 m- u& R
  6. MongoDB\Driver\Exception\ExecutionTimeoutException$ ~5 K8 S2 r9 f0 D  g2 f* d- f. p
  7. MongoDB\Driver\Exception\InvalidArgumentException
    / w9 y% G$ u) W" m; E
  8. MongoDB\Driver\Exception\LogicException
    % p* S! n. m% h0 k  q% Y
  9. MongoDB\Driver\Exception\RuntimeException
    ! S" u9 U+ o, T; O/ l
  10. MongoDB\Driver\Exception\SSLConnectionException6 F% }( a2 T3 y6 v( w+ s
  11. MongoDB\Driver\Exception\UnexpectedValueException* A+ W- x& X2 z
  12. MongoDB\Driver\Exception\WriteException
复制代码

3 D) a6 g5 N# @3 y- f) q) X9 I
1 L# D6 t7 r4 W
游客,如果您要查看本帖隐藏内容请回复

) r' g# e" T# g点击查看全部, a& K! u( f- w2 `+ N
; a( D7 {3 s$ J

! f9 W3 L4 B4 m( v, C7 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 02:54 , Processed in 0.064622 second(s), 20 queries .

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