cncml手绘网

标题: php7的mongodb基本用法 [打印本页]

作者: admin    时间: 2019-6-24 20:58
标题: php7的mongodb基本用法
提示: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不支持以前的写法。+ L% Q) `, d$ s, H

2 u3 w+ A3 v' Y; F- ^# F下面用PHP7新的API总结一下:
6 f; f' q8 {) t+ V. O: y" p; a- r9 J0 w; R$ [2 j; V5 Y- Z/ Q5 }! I
一:CURD
! W1 l7 S% b, `
/ `+ b) a9 N* X& N- Q. V1:链接
6 b) E: s& F# y2 ]* ?8 S% D. \! v" ~
  1. <?php
    9 w3 _' b' H& [, N* o) ~6 R" R
  2. //链接mongodb
    - \. f; J  M( w1 T7 B0 f' H
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    # ]5 D  j+ y0 y7 R
  4. root 用户;123:密码;如果没有密码则不写
复制代码

4 q0 M, L0 \7 H) ]' }% o  I/ z$ j  Y9 U1 z, a
2:查询6 |+ N3 [9 v, H9 O7 x3 R) t
" T4 H# i- k8 W2 K) ~. `
  1. <?php
    0 g( O7 n9 i  H+ t9 j
  2. . h- T% C6 Z/ i8 K& J% k  y
  3. //链接mongodb
    ! x9 c. i9 v& o- l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    8 Y, s) _& |" w' R0 E8 p, c

  5. 6 I% \5 N, I; g, q1 f3 b
  6. //查询
    2 D4 C- B( D  ~
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    5 `, ?% h3 V$ n" d; o: A, ?
  8. $options = [
    8 A. n5 Z6 E- n! I8 M4 N2 H
  9.    'projection' => ['_id' => 0], //不输出_id字段: {' q$ g* ]3 I
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序/ }9 q6 \" c4 a  W& _) s" s3 f2 ^
  11. ];$ }# G+ D7 g5 t4 {' j
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求: K8 o' s. m$ d9 |8 r
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    " c4 I/ G- H4 K" k) O5 |; ^- R

  14. : s6 T* ]7 @8 p- w
  15. 7 j: M% i% w8 H% w: a
  16. foreach ($list as $document) {0 I+ {/ o. i: ?! J
  17.     print_r($document);
    5 r  R  i' Y! f" ?
  18. }
复制代码
. E6 t7 p$ p; k$ L7 r
查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 X0 p0 C' h/ U5 N8 \3 e7 ]* @4 f1 `( x& H+ x4 [
3:添加
6 n/ e2 ^+ M/ T+ M  r( l4 a0 k: B  ?5 r1 W- c- G; r0 _! x/ |5 P
  1. <?php1 F: o- X8 S) U( H  }

  2. ! K0 ^7 x) n9 m1 B% v$ K* m- J8 H
  3. //链接mongodb. O( E) e# j6 q8 z: s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    # L8 p9 F' u; d7 R

  5. - R# X! r! ]" x# Z" k/ n! j' ~' w3 R
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 o0 ~4 ?" P4 ~/ `- ^2 b3 Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 P+ M& L' |1 C
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    " c8 O' k: w0 z2 f: N
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);6 W/ y4 y1 x# Q1 n
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ h! N) H# X! H; }* m; b4:修改, m# B: O0 h  t& ]2 j  n$ V
& Z, P9 J$ R( C' K; X, ]6 |
  1. <?php
    3 g/ @+ f* x$ C7 N

  2. 5 m# p$ P4 t/ K+ x9 `
  3. //链接mongodb/ b  W  J5 Z# T9 W1 C: l, `
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / L6 x/ p. {; O

  5. , N0 D9 k4 F- \  F; i$ o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    7 b0 `$ H1 m9 ]' i# a% Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " K7 F5 W# h' {2 ~4 S
  8. $bulk->update(
    9 ?5 j: j: t2 @6 u; g0 M
  9.         ['user_id' => 2],
    , E9 B" c; l- k% ?' ?2 w
  10.         ['$set'=>['real_name'=>'中国国']
    # {  y  R* [: Y: N: ]
  11. ]); ( V, N& O- R& h8 ~
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,# m3 }: U" v5 @+ N+ ?# r& n
  13. //1:字段不存在会添加一个字段;9 ]5 j9 M8 o+ S! o
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ) G! J9 \7 Q' k6 _; H

  15. ; q/ y5 {  s8 ?" @
  16. # D* k. @- c, d+ n, z! Q
  17. //如果条件不存在不新增加,可以通过设置upsert6 V) U6 i) Y, I1 z, \2 v9 r
  18. //db.collectionName.update(query, obj, upsert, multi);
    3 T7 }. R+ c3 R* e1 p

  19. + l% ]/ J+ L. G
  20. $bulk->update(
    ! h( |( x/ p, T! ]8 n& k: j
  21.         ['user_id' => 5],, T: s. V2 Z% I9 ?
  22.         [* N$ W( ?2 U. W! X( F
  23.                 '$set'=>['fff'=>'中国国']
    8 Y6 X' N" V0 e
  24.         ],! d0 c# W2 e- \. {) j7 x* f4 b+ M& }' F
  25.         ['multi' => true, 'upsert' => false]
    6 H# ^# W  ]5 _- C' f" J2 ~6 C0 M2 A
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条( U; h, [. f3 n- @! D9 h8 q
  27.         //upsert为 treu:表示不存在就新增
    ; F( _; k; f! i% I# n
  28. );
    0 V* }7 ]+ @  v) \4 Z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

' H2 V1 d3 K- d5 }7 T4 F: s- n" s
ordered 设置
( C" k2 |* i( c: q3 C& [
  d' G' b4 S- n1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 s; x7 t7 l+ i+ B2 ]4 I2 y4 @2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
+ L8 D0 r. Q+ z/ n7 d. `$ j( d" S& J) v& b
5:删除
9 y) h* ^  S* h3 k4 E9 P/ d) t$ h; e7 Q2 [# l4 S! T* G
  1. <?php+ U# N( g: i( c& P- R

  2. ! i/ Y! J& a; Z* x9 U) W0 C! {
  3. //链接mongodb5 Z# n, `2 h  h0 I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / B4 W9 F/ o4 h( ^( Y
  5. # V# H- I* p- A; @( K  r8 Z8 s$ Z2 z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 M* S6 }; O/ R( @) D+ r. {; \
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 E  R3 P/ x, T# V- m0 @) Q- R0 a0 ?
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    $ E5 N( ?) W- b2 R. k
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    & X- }0 |- x6 c
  10. delete还可以通过limit设置不同删除方式( L1 C) `' o0 w
  11. 8 C$ V- V# e" u
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据( H* M% ^- i/ Z8 C4 @: n
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

2 O# I. ?  t# {8 `0 O4 R# j& \* h% l0 g
6:捕获异常$ }3 V  }' U8 _" n  [

) H) k# Z/ z' E  d% @6 s
  1. MongoDB\Driver\Exception\AuthenticationException& V$ Y7 h& M1 b- E- a9 J4 \2 j* L
  2. MongoDB\Driver\Exception\BulkWriteException7 _* U: Z& H% e; N2 ^# r
  3. MongoDB\Driver\Exception\ConnectionException( [1 k# M4 s& ^2 |% F: c# o
  4. MongoDB\Driver\Exception\ConnectionTimeoutException# k& K$ B8 ?8 Q9 {% h$ b% V# P
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    8 ]2 |4 K6 K8 ]; W
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    / V$ P3 r' @, x: L
  7. MongoDB\Driver\Exception\InvalidArgumentException1 d, A, G  ~# m, p
  8. MongoDB\Driver\Exception\LogicException
    6 A6 w3 ^( F& ^1 {
  9. MongoDB\Driver\Exception\RuntimeException2 X: r2 q( v5 u! v/ B" L
  10. MongoDB\Driver\Exception\SSLConnectionException
    " q/ \; G, _) G' p' u. r
  11. MongoDB\Driver\Exception\UnexpectedValueException- a: r4 h  {; B" M, ]2 ^' G3 _) Z
  12. MongoDB\Driver\Exception\WriteException
复制代码
3 W" R: R/ g& R) m* K

! @. S  m! l* z6 z  Q/ \- f
- A" H4 q" u4 w/ h点击查看全部
: @+ a0 y& h1 Z' L+ U0 C7 g# D
3 q1 `) |1 _1 ~
. {" J  Q; ?3 w9 a- e5 ~




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2