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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14469|回复: 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 J- K0 c8 e+ J; [! d3 U( f

8 l5 C  ~% D: N( P7 t6 p下面用PHP7新的API总结一下:
6 @1 y" U# A+ n5 }) Z3 v9 [
/ T$ b9 M& @5 W3 k8 S( f9 Y. `一:CURD1 C8 i3 x/ C9 i( r. B! K
" f; J. d9 K! A* q8 V  U$ g
1:链接
" o' Z/ I8 z. w" ?0 p9 R5 O/ [5 Y, J% @& N# U5 a* G% j! O: @% ]! H$ U
  1. <?php
    . [% {* M8 q( f. u
  2. //链接mongodb+ T  U* R6 A& N0 p+ F
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    % B, ?6 @/ Z9 A' X( W- G
  4. root 用户;123:密码;如果没有密码则不写
复制代码

- f% k; x2 H; N' z9 C
( M: g3 O" P- N( o' e, h2 ^2:查询
9 Q) P7 U+ p! ~# X  P8 Z* y2 ~. |1 G5 c0 n( {
  1. <?php- \, R; Z8 U% C; n* }

  2. 4 X) \- `  t8 Z0 q% l& \
  3. //链接mongodb8 M7 T: `9 h5 w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 F$ ~, y4 i  X# J' Y# d

  5. # }% u  H! o# G& i
  6. //查询
    . [3 y) V1 A/ V: X+ e
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于07 F4 Q+ @( ]% n" i
  8. $options = [
    * i( f/ e' v8 E, L) M8 n- e# l
  9.    'projection' => ['_id' => 0], //不输出_id字段
      `  ~- D5 J  N# |& E2 @' }8 x
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    & d# I  Q) ^$ t9 w. m. `3 |* {7 K
  11. ];1 F% E, Y/ t& A; |: r8 W) A9 L
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    # b9 Q9 j% V7 o( d% J
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    / r. Y4 x1 M/ H& S5 T
  14. 3 i6 ?, ^1 r: k  T; \
  15. $ Y# B3 x2 E$ r- u
  16. foreach ($list as $document) {
    5 f! C. l2 }. E1 |5 R/ A& ]
  17.     print_r($document);
    4 u" D/ c; q& z( Z/ I2 S9 L
  18. }
复制代码

2 O9 v9 H& O5 r* e" }" R- I查询更多条件使用方法,参考第二节mongodb基本命令,查询" U- Q7 u9 ^" R( H4 C

! W/ E7 L# \0 Y* M; O3:添加
3 G7 w+ p# A6 W4 r& E7 W% Q( ?$ `" x( m' B5 B3 o7 c, C
  1. <?php, h$ \$ T) n6 O1 q, n
  2. ) T" |% z7 n8 ]; Q& l: R
  3. //链接mongodb
    , `. X; q! {% s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' [8 ]* V: t4 z- A) F% P
  5. 0 y1 N! I4 L0 \: I. h+ M5 Z3 {; Q
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ! L6 @- H: k+ C
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行3 d9 ?/ n! K' e+ V
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 P8 m/ ^& Z( r* G
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. ?" H/ r0 [* f- c$ r6 X
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 i- e9 d% v4 K  d# \
4:修改
  j3 I; t3 v+ m, B  Q/ Q% k: e" F! ^% [/ ^
  1. <?php  X! u  L+ T0 m- X' @0 q& C: e

  2. ! f6 }, |; y5 c0 d7 g
  3. //链接mongodb( j( K( T8 }, Q4 `4 Y# S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' @0 E5 e, _) K* ~: b

  5. : E( p/ M, Q2 c, P7 p5 S/ Z. L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" b4 r: O9 d6 y$ }1 w- l& U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' w+ ^" |4 p, N2 y8 Y
  8. $bulk->update(
    4 H+ E4 z8 r. D
  9.         ['user_id' => 2],
    ; L% G7 L' d5 N0 D
  10.         ['$set'=>['real_name'=>'中国国']- e" ^* l; R; S/ g7 O2 c! K
  11. ]); ) U4 d8 o9 y7 V0 P. b
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 G* b# t7 f( F( }9 R) Y/ x, s
  13. //1:字段不存在会添加一个字段;' |) g$ ]9 f4 s% l+ z: E
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert* @! C; R4 B3 s8 o

  15. % V- N0 X; [* b( L: n" C& X) f

  16. ) `. Q1 |4 q) m, J: C# Y, e
  17. //如果条件不存在不新增加,可以通过设置upsert
    $ m- z  k) s; \' U
  18. //db.collectionName.update(query, obj, upsert, multi);& y) b9 l; i1 P8 [- m' k

  19. : i7 ?9 v" K0 v
  20. $bulk->update(
    " B1 m' A; W* j+ o  |! K
  21.         ['user_id' => 5],
    & V; w' I( n* _& _
  22.         [
    * n  r. N+ H" t
  23.                 '$set'=>['fff'=>'中国国']7 C/ W/ X1 o& S" M9 @$ d- p4 [! y
  24.         ],0 r1 r+ O& U- l2 ~: M0 Z: B
  25.         ['multi' => true, 'upsert' => false]
    / N7 O6 B7 g' j0 |8 p) _
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    & b9 c4 H4 _3 V0 Y; X% A
  27.         //upsert为 treu:表示不存在就新增  V4 X% l- c8 R" p4 L
  28. );
    / Z% C3 b$ G+ C' u
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 t* v- f: l- i8 w6 a7 y0 [

. R( O  b$ @7 Sordered 设置
4 _  F7 W# a. \4 b% a7 _' F  r. X) C# R4 l7 a
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! Q3 ]& k; g' o! H: b$ p$ F
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! i& R$ o. S, h! `9 n- H

" R5 W, n  @2 l8 U* }9 H' R5:删除
9 ?/ r6 q) A( E% i- I# b
7 J1 _- A1 w# E
  1. <?php# |- _" h, D; G6 @% ?/ [, \

  2. & ?" J) l' r+ R/ l& v. I% l
  3. //链接mongodb( ?% v& p" E7 D+ Y& O) b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    " B: j& f$ U( K8 c4 F  [5 x, ~. `

  5. ! [9 W7 b, p# w; ^* `& x: w$ B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 Y2 c" [4 ?. Q3 M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( B& `$ H% |) A) z) e0 K
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段! {- p7 R( u+ d. L5 c9 d
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ) C, E8 A; |7 S
  10. delete还可以通过limit设置不同删除方式
    + X9 f* q# n: W' f) y# F9 F

  11. 6 R( \& e% D. x5 u! z( E
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据5 b1 _# X  R0 v2 c
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

6 y7 A& d  C2 ?, U2 D; m1 b- C$ ~
; R% S- _) W' n5 e6:捕获异常
! h  Q8 b* z& q' e( H( |6 ?+ U# t( R/ n! O
  1. MongoDB\Driver\Exception\AuthenticationException
    8 _. N' U+ u9 N+ C) F1 L8 E5 }
  2. MongoDB\Driver\Exception\BulkWriteException" x+ K+ C7 ?/ _7 }  C! E
  3. MongoDB\Driver\Exception\ConnectionException
    * M, q$ z' f& J
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    , v/ o. p# U+ ^9 }5 B. t
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    4 K- g: O; J8 s* r" ?& K- J( K7 i
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ( t4 S9 S. x) w9 |( O* j
  7. MongoDB\Driver\Exception\InvalidArgumentException
    , V' D7 x: l4 X6 ^
  8. MongoDB\Driver\Exception\LogicException
    5 u, T' {1 o5 Q" W* L
  9. MongoDB\Driver\Exception\RuntimeException4 c$ Y1 @# |/ ?+ I) J! f
  10. MongoDB\Driver\Exception\SSLConnectionException
    " C( o! v7 \2 k1 ^) s3 r  x
  11. MongoDB\Driver\Exception\UnexpectedValueException. f# |8 r  R& n
  12. MongoDB\Driver\Exception\WriteException
复制代码
2 ]# F. }5 b3 T% Y, \# m9 _: o
0 ^( V, }$ ~* _4 w2 _3 M3 h! R
游客,如果您要查看本帖隐藏内容请回复
1 E, r6 ^, x& @: A$ r! i
点击查看全部' t7 |- S+ Q4 |, I& }3 b' o
# k9 b8 w  T3 U, c& @3 Z
9 r3 H4 |* ~' k2 f5 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:23 , Processed in 0.054084 second(s), 19 queries .

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