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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14734|回复: 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不支持以前的写法。
' v/ G2 W- ]- k1 w" g( p0 g! H6 V% ]. ^& ^* a: ?7 }
下面用PHP7新的API总结一下:
. \  |& T5 ~' X( [+ ~  p" k) s$ e- M6 O* D
一:CURD# b7 \) c; r& A" s: A3 n

# Y1 d# x" Z& ^/ ~! A1:链接7 u* {% U5 B3 v; E# F( \. x+ e5 @5 ^
  k) j% t  W6 W0 W9 U$ M* V! d6 @
  1. <?php
    3 H$ Y( }' b& o( e6 f
  2. //链接mongodb( q, j: ^! ^8 ^
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ) ]2 G7 w8 L1 b7 u; i! B; ]8 e
  4. root 用户;123:密码;如果没有密码则不写
复制代码
; n9 Y7 ?# O) ]+ C
5 a- M$ X# Q. U! E- ?
2:查询
7 d7 y  |4 d: h. H& `+ u0 Z' d" m- Q5 m. t  b, h
  1. <?php4 L* f3 ^# z8 k8 D6 ?
  2. $ e. e( d# n$ |
  3. //链接mongodb
    ( ~; ^' C& s5 l9 F' }+ o  V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% `8 z* V# C2 v0 i) h3 Y; Q- H

  5. ) R8 k9 M& F# P2 t, X9 W
  6. //查询) h" C. K( e& f( z5 k* k6 A. @+ h" ^
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    5 M: z& P2 V% ~/ v* Z2 E
  8. $options = [% P+ Y& {4 L$ N0 r4 K6 L5 O4 b
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ' f# u' A, @: R' d$ m% N  M3 R
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    5 T" E' y* Q% d4 H' h* v. S0 u/ D; s
  11. ];" H9 S$ Q1 B! b3 d0 t+ d
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求9 k' h2 }/ Z; x$ T4 \
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    , e# \$ P5 Q: n, @

  14. " |+ d  a& d7 R7 g7 i

  15. + Y/ ]* S0 ~, O* P. D
  16. foreach ($list as $document) {7 e  d0 M' J0 d" l& Z
  17.     print_r($document); 2 A4 O1 o/ B$ @; s( g( R+ n; I
  18. }
复制代码
$ {# ?( y+ e* d9 U/ h
查询更多条件使用方法,参考第二节mongodb基本命令,查询
& ?1 [, n- F( N, m
2 ~" Y5 h5 n1 ]$ e8 U, S5 V1 d3:添加
/ K" ]# T% d% c, n6 C3 l2 h7 v
  1. <?php
    " x- o4 X6 p9 q
  2. * K9 Q1 z5 Z. U+ P3 j
  3. //链接mongodb
    # V$ c# l/ A& E4 B( D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 a7 M% ?6 p' [! n. H- i

  5. 4 s4 D+ [4 R5 n! F# g3 i5 K6 F
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 S0 J, B* O. O2 Y
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 n5 Z; x' `% n( x9 V
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 _2 m' \( @$ T  m& a+ G! ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 ~8 L0 r; S  ~+ z% m# r# F
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
6 [4 I1 E5 {! Z, n/ k5 ^+ c
4:修改' q+ C' k4 l; E0 q) S7 J2 i
0 P. r8 ~' x! ~- ~8 u
  1. <?php2 A& U4 ~# V+ h/ T
  2. * ^+ m7 z: |' K8 Q; M0 o
  3. //链接mongodb+ R: z/ `( R5 a, H8 P- k
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 ~$ x% s5 o+ _( P" j

  5. 8 ^) c$ l: h: |& a- D- p
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 I. I9 }  ?% h- r. |1 h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # B1 Y# l7 ?8 O/ P
  8. $bulk->update(0 X. D8 [. k% ^1 _6 ~  s
  9.         ['user_id' => 2],: S) F+ X/ x3 J) e
  10.         ['$set'=>['real_name'=>'中国国']
    - G4 h0 R8 Z. H7 H
  11. ]);
    ; C# P  e. t4 i$ T
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ! T% w' U7 w; N; T/ T, Z; e" Y
  13. //1:字段不存在会添加一个字段;
      z+ {9 i; G3 a& i5 G
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    " u! F, H8 z% T8 H- B
  15. ' K' L! W" ~+ R0 _( h2 T2 k

  16. - L8 q  |& w  Y8 P( `' k7 {
  17. //如果条件不存在不新增加,可以通过设置upsert
    / ^) j1 V& d1 S  Y
  18. //db.collectionName.update(query, obj, upsert, multi);
    $ A4 Y7 u! ^( [  \' I

  19. " j9 r6 J$ C5 ]- ?
  20. $bulk->update(
    " g. S" b5 p; g6 l. N& T
  21.         ['user_id' => 5],
    ) d+ G! r) a) q
  22.         [
    " z) e: `, o" K. A
  23.                 '$set'=>['fff'=>'中国国']" K+ c# W4 w" m+ j! E3 ^
  24.         ],. H6 e5 u7 }8 Y. J2 \" M( ^. o7 @
  25.         ['multi' => true, 'upsert' => false]   a- N7 t2 _$ S/ |+ y/ V
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
      `4 x7 K7 W2 V$ ]
  27.         //upsert为 treu:表示不存在就新增. j0 m  L) q: O4 ~2 X1 S
  28. );
    1 ^' O, @! S* @6 b# [. n
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* x& ]0 a9 y! r% Y. W/ G

- Z; e" J* S3 A% z2 fordered 设置0 l7 I! f+ C, W; Z* ?, K+ N! e
& v3 b& d& L3 Z7 ?) `" b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。8 Z2 Z9 h- I, ^) ?' J* B' E
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行% Q; _) g6 L# h; `1 v% w
& I' X" ?1 w, ?& N
5:删除4 @- _  O& D+ t$ e1 J
- M! `! w% F) r& k) ^+ B0 z* J
  1. <?php
    , h! @: @2 Q7 t5 \% R3 ?
  2. : J7 Z1 w! K% U: Y" P! A; P& y" Q
  3. //链接mongodb
    % K; u  [4 |* Q& e; ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . q7 ]% z6 R! r5 D! m* r
  5. 1 _/ g  w- f8 M* V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 s9 H* L% _- _  A$ u2 @3 ]2 E# R
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行; C; l7 [, d0 C
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段+ i) j9 J, R) d* T; b) d' i
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ; I! B3 R, S7 V: P" A' P( G
  10. delete还可以通过limit设置不同删除方式
    8 H+ G$ _: {. N! m" b
  11. * W* k1 |+ v1 K- D& K' c
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据' o7 M% g* G8 |
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
4 l6 \% ^$ m6 G' ]

' q, h) K, f5 ^% P/ j4 P) v, i6:捕获异常
1 C- Y+ j4 P; o7 U" k; T) R7 `! G( `" c
  1. MongoDB\Driver\Exception\AuthenticationException; p; U& H% Q" B. G4 F* V. b/ p- V
  2. MongoDB\Driver\Exception\BulkWriteException+ ?( m9 `" I2 I9 U
  3. MongoDB\Driver\Exception\ConnectionException
    2 I" M$ k: I+ N( n
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    7 Y% Y: l% p) Z. v# Q
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口' a+ Z; t0 [2 j7 x. \7 I" _! n) b" l
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    9 `0 E: |- i. s
  7. MongoDB\Driver\Exception\InvalidArgumentException
    . ]9 B0 c8 ?8 S1 r3 W: U# F, M
  8. MongoDB\Driver\Exception\LogicException$ b5 F5 d& P6 d9 a- M& l
  9. MongoDB\Driver\Exception\RuntimeException( T1 G& D2 F" [& ^3 z# u8 C3 I/ D
  10. MongoDB\Driver\Exception\SSLConnectionException
    + s  a" B4 ^  B4 I5 C6 [* [
  11. MongoDB\Driver\Exception\UnexpectedValueException
    * `2 n) A- D; }. Q  O* i; h
  12. MongoDB\Driver\Exception\WriteException
复制代码
9 Y3 K0 {0 j. y  ?
$ ]1 B8 R; L) f+ T
游客,如果您要查看本帖隐藏内容请回复

2 n/ U/ p( Q/ v) @7 j点击查看全部1 y$ g! o- z& k+ u. h0 b

1 |& e& D% ^/ O& Z, @7 y4 A( I0 a7 p  Y$ D- H1 z% A* I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:52 , Processed in 0.057056 second(s), 20 queries .

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