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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9899|回复: 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不支持以前的写法。/ O' n0 S- c1 W# o: e! T! W
' r3 ]1 ]6 I7 r$ m
下面用PHP7新的API总结一下:3 D5 j0 Q* j, K. h& p0 D
, x7 i$ n/ w2 ~0 L2 D. C/ }
一:CURD- p+ m  i) o0 W& B

' G2 R* c, Z* x: a: S7 Y% a/ W1:链接
# M) j' A6 z$ H/ y: J  y2 [2 J, r: A# L; }. @0 O% e$ f
  1. <?php
    4 P' s" K! f% a* Y' q
  2. //链接mongodb
    5 m; n( j5 L! I+ h
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');6 v  R0 R' \, ~3 J! ]2 t0 l- G7 N
  4. root 用户;123:密码;如果没有密码则不写
复制代码
  h3 E- t* X- h# ?7 y, X4 v3 n
5 I* V. i3 n& a
2:查询# @$ h. ^. |9 ^" {8 E/ [0 A
2 v& H  X/ n5 a/ L+ A' x' D! f  v- M
  1. <?php
    0 c  M, d( X: L3 d$ a5 G& g" m3 v

  2. 2 U  L# e' E" L# `9 h0 ~
  3. //链接mongodb
    3 o6 y+ W) n0 l! b$ @
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ; W' E2 }' c9 Y% Y

  5. + t  N: d" ~# t7 o
  6. //查询8 U4 n4 M; D, _, q( p$ ~3 J
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" g# p& S0 @+ P& l8 x
  8. $options = [' n% ~5 d! r; u# Y
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . r+ D  c+ @# ~) u! ~3 j5 z. O
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    / G; B; ~. u( @
  11. ];# I  U* `; ^4 F) B
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    . }2 Q# D1 F" T9 M! f( `2 I
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    0 g/ R- B: s9 c' R( D

  14. ) V: h. p- Y! M3 f3 \( S

  15. % o; ~6 ^. Z# g0 h1 P
  16. foreach ($list as $document) {+ u9 ]% ~; y; T8 z0 S% }: {3 a) i
  17.     print_r($document); " `# k, I1 t+ F) {: g& k
  18. }
复制代码
; w0 M; h' o1 f) P7 x0 m
查询更多条件使用方法,参考第二节mongodb基本命令,查询$ N( Q- X' T6 ?; ^+ l/ C1 r
! \# ]0 [' h  M, f
3:添加
+ B4 a; z0 I3 N8 S& H, U* c
/ }/ o+ N- G9 v0 l* n7 |
  1. <?php
    / {* q$ \$ E- k, B

  2. * ]% {. O3 q" p/ n2 O( C
  3. //链接mongodb
      W* c/ E. U; [. u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # W/ Y1 t* T0 t, ~) E- P1 u

  5. ( r( o% C' `- ^. Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    $ T7 L# U% F& x& P5 B( Z2 Z6 Q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 s) J- e" N( P' i
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);3 c; a4 w1 V5 y1 D6 v+ A
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    0 q9 p- G8 ?" F; P; e' S
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# h" W0 K2 z* V/ o, D
4:修改3 E3 R/ w6 u* u  G: K8 Z
$ [3 U2 E" {6 x3 G+ B9 `  [
  1. <?php5 r* ]+ J! L  S: L  S" K
  2. 7 Q$ T/ {) ~( i
  3. //链接mongodb
    ; q: u5 H/ D; ~& M% r. R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, W! H" R  @$ D8 b# e$ j5 ]
  5. # P% Z: I, B3 X% K9 R6 \
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ) |$ ]8 P2 _; ~+ u3 F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% b* P- b( C( S2 j& x# r3 N) S
  8. $bulk->update(4 ^/ B3 B8 B; [( u) U
  9.         ['user_id' => 2],* X, n4 [5 C( g5 a+ E
  10.         ['$set'=>['real_name'=>'中国国']' V" g, E2 {# A
  11. ]);
    + w/ m9 B- {3 H( h( m3 q
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,. Q5 B- ?' n( \  S
  13. //1:字段不存在会添加一个字段;# k1 x: q( T8 ^5 A1 `& k
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert# r. O1 ^' x  ^6 ]" R( r
  15. . m0 O0 t6 t4 `- h5 ^$ i

  16. % O% s- y0 L/ a; n% |8 q( u
  17. //如果条件不存在不新增加,可以通过设置upsert
    5 g4 L, F, i6 [- L; ~/ w
  18. //db.collectionName.update(query, obj, upsert, multi);& `& o; y7 P+ a' ^7 t2 R* d: P7 {

  19. : B+ @, \% A- x$ p" i4 _. f9 \) w
  20. $bulk->update(
    ( W$ G2 b7 M1 j; M) @
  21.         ['user_id' => 5],7 M0 L' b5 r' c* |8 N' r$ k
  22.         [
    6 ]. e; M3 t7 U% R, o
  23.                 '$set'=>['fff'=>'中国国']) z( M8 k8 m% w% A2 d& v
  24.         ],% ]! l$ w9 v4 J
  25.         ['multi' => true, 'upsert' => false]
    . g* e6 S$ n8 B
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    ; Y8 T) U9 |$ n2 \( ]5 B5 w) P
  27.         //upsert为 treu:表示不存在就新增) |$ u6 c( M! H6 w$ w
  28. );8 S0 Q5 a3 p% `& x
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

7 O- U; H5 [/ e' W% I" m7 z4 L% |2 \; s, T- V1 ], V7 }+ A* B
ordered 设置
- H; @2 Z; k; e" {  s* {6 R! W( b1 ]6 N
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。% C+ r  K- [5 S$ M4 @2 E
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行( _9 e; H8 t3 ?; |' l* ^

. A4 O3 h7 ]8 ~" {  {& v5:删除
+ M2 W) ^9 q* m# P4 U' M5 X0 ~) P' [* r
  1. <?php
    ' a  ?0 G$ y' [0 v6 [

  2. 2 P7 [1 E* \" @  ~* S8 I
  3. //链接mongodb( J: I8 U7 W8 e7 @4 q7 E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , l7 I2 g8 ]! L2 f

  5. 4 \3 I8 J; w3 U) s; C& _4 z' d' S. j
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      g4 s: P1 B" A: ~6 |
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 n- e" s+ _& e6 y4 k) o
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    : Q% e* O3 h. |4 v) d4 R
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    4 {6 h% T. ?. Z* X
  10. delete还可以通过limit设置不同删除方式2 R2 j1 V) k) T5 d3 N6 I# g! {& W
  11. * u* z6 @3 B+ v( l' `) u" u+ N. u
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据; T( h. I6 |8 Q  |' r  s  ?7 ?1 C
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

6 z* m$ k2 Y4 |8 ^* A7 l
8 a4 S# ~( A6 T/ F2 G/ B+ ^1 B. L6:捕获异常
7 B! @6 i3 [2 c' x; |
: `+ s- F+ h: {& ?
  1. MongoDB\Driver\Exception\AuthenticationException) i* j4 S! W/ b' n8 D
  2. MongoDB\Driver\Exception\BulkWriteException/ T8 i+ U3 J4 D1 a6 d, D
  3. MongoDB\Driver\Exception\ConnectionException
    % y& Q0 U' b( a* M% U
  4. MongoDB\Driver\Exception\ConnectionTimeoutException% X6 Z. v% n7 W# j
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口( ~. f" e3 s( W( V7 |5 p
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    1 Q# D8 J/ Q6 B1 \8 Y
  7. MongoDB\Driver\Exception\InvalidArgumentException
      W' ]6 c+ ]& u( [" P, O
  8. MongoDB\Driver\Exception\LogicException
    ; M1 o. y+ y. n8 C
  9. MongoDB\Driver\Exception\RuntimeException7 t  z" {+ E8 A  i( g$ ?7 `: V
  10. MongoDB\Driver\Exception\SSLConnectionException
    3 k* Q1 U  ?( V7 F
  11. MongoDB\Driver\Exception\UnexpectedValueException
    / J$ h/ c' ~, Y0 _2 ]/ a$ Q
  12. MongoDB\Driver\Exception\WriteException
复制代码

8 O9 i0 C5 ]4 Y) o! |# O6 Z0 l. w
游客,如果您要查看本帖隐藏内容请回复
9 W- J1 Y8 ^3 t
点击查看全部
( {1 F, E/ [& T+ ]3 L. P1 V7 A2 Z! ]) ?* F( Q* h1 [
3 a3 H  x' N9 ^2 ^7 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 16:38 , Processed in 0.153688 second(s), 19 queries .

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