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不支持以前的写法。0 A; m; Z& p7 y' J

4 `9 e3 X; c2 h8 M下面用PHP7新的API总结一下:
* ~" I1 {1 s8 ^8 ]7 n
( A  J, Q6 h& c一:CURD
: B& D( z6 [. Z6 d
& S9 P9 u; X/ z8 W3 H1:链接/ v0 U3 M) B" v
; J) E0 h, t* w# Q# E
  1. <?php7 Z' Q1 C) V" P: u9 ~; Z
  2. //链接mongodb* v! G6 f. {) b% @% _: Q/ d1 m
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 W. T1 j  R5 O/ G8 \
  4. root 用户;123:密码;如果没有密码则不写
复制代码
' s# U. ?- e$ l7 y3 k# U. v

0 M& N3 t" Q8 I% o) _: M2:查询
, w. m; p4 F9 y% p: t) j9 ?  l7 M, _* X3 p
  1. <?php
    ) X. k3 `2 {' r+ O0 z  i9 w

  2. 5 f8 a, f, q( G7 ~2 w& G4 [% X' g2 H
  3. //链接mongodb" X3 P- A& n7 J" J* ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 [9 a. {1 m& P# X# W; c9 G4 ]0 u' a( G

  5. ) O! x7 `% @: p% v0 _$ W. Q: U* a9 ~
  6. //查询
    5 p4 j6 ~* j- w' W7 K  X4 N+ }
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    : P" A* f4 w8 y8 E
  8. $options = [* C7 I7 U$ ^4 S  U1 `+ T
  9.    'projection' => ['_id' => 0], //不输出_id字段
    2 }! Y& C- E5 b! ~
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- s6 a. S& Y1 P
  11. ];$ {$ g! }7 i; r. n7 R' S
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ' [7 |8 Y( b) X: q2 j
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    2 y! F) R$ }, A: T4 U1 b

  14. * s- q6 R# g  q# a8 X0 U
  15. 7 a$ r/ E1 ], Q0 O: R7 j# ~8 }8 v
  16. foreach ($list as $document) {
    " c+ B( {/ ~# X+ Q0 b) s) Y# b) W/ y
  17.     print_r($document); 3 H) q" ]; v+ q. s- }: n# z1 ^
  18. }
复制代码
2 Z6 I% j1 G3 h, D+ w' k+ v; t
查询更多条件使用方法,参考第二节mongodb基本命令,查询
3 v! [% S3 K1 l  Y2 c0 t
) g. R2 _! S! `! `. M% }3:添加
4 O2 j, e. X2 Q) {! }8 j
2 |: q( r4 c- `2 _( x! M
  1. <?php$ c2 s" @- z; [+ J4 Z

  2. 9 a( w9 K4 I9 c$ u% d0 L
  3. //链接mongodb
    : a; n* K) Y# C3 u. f
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 f1 v- P0 n, S, u; c3 B

  5. 7 J+ ?# R: V( T) }* |. S
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ |# n! z' _9 T! g( G
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ c/ O4 s! Z5 ^
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);: x) @2 i  D2 a+ w% ^: s/ y% A
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    6 _1 E; ~; I# S8 A8 D
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

9 q! o. o! j+ D+ o+ z& e4:修改3 U/ U2 ~4 \  c2 e

9 x0 k: `; V/ g% j$ }+ T
  1. <?php2 Q+ W1 e" W- [) P
  2. ) b$ h+ D- V: n4 w; x1 i+ I
  3. //链接mongodb
    ! s# }. v/ r/ L' }7 y5 m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ v0 W2 d" C3 l- s6 A" a
  5. , n) K& Y  {/ R, D9 c2 U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + Z7 [7 E8 W7 K# H, W. n0 |
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    6 e, f/ D* K( s) k
  8. $bulk->update(& \! ?  \: w* i: Z. Z
  9.         ['user_id' => 2],
    / y0 x& Y! L1 H$ T0 Q
  10.         ['$set'=>['real_name'=>'中国国']5 r" j; i( ?* W+ p, N
  11. ]);   V! K( Q" L9 m9 Y+ h: l% l. r
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,% Y- z0 Z! _& w) z
  13. //1:字段不存在会添加一个字段;
    5 d& S1 f3 \$ E% J$ }
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    + Q5 h8 e0 ^/ y4 S( ^1 x

  15.   f$ r- ]! Y$ ]. X' B
  16. ; u! v4 j. S( z0 Q& B
  17. //如果条件不存在不新增加,可以通过设置upsert
    ; |4 L/ M+ d. o* n4 ]3 `% a
  18. //db.collectionName.update(query, obj, upsert, multi);
    5 o! G% T" p1 L7 H3 h  _) W; B, u

  19. % h! B  _3 q" O2 g3 X8 O* L0 J* ^
  20. $bulk->update(- O0 a. S$ Z* Y. U* g4 y3 A
  21.         ['user_id' => 5],
    . `$ _% i- k, n* t/ Z: w
  22.         [
    4 I8 b% i  Z3 h. }2 ?
  23.                 '$set'=>['fff'=>'中国国']. c- }! ~- F$ `
  24.         ],  L! N' c, H" l
  25.         ['multi' => true, 'upsert' => false] ! }0 R* A" A! ?0 ^
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条/ C1 N, N! O% z( O4 {
  27.         //upsert为 treu:表示不存在就新增
    . I# O3 u& p2 T- F
  28. );# q# W  r% x8 V0 M
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 [- g% b6 r  S# q
, G5 C7 t0 w- E9 y9 S1 ~4 p
ordered 设置
/ F3 E7 G) h" \9 f. S/ v
. c1 Z& D. |7 j- Q9 g* _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- A, N1 d2 M. p& {# M) [0 j- {
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行/ W' u9 v6 j7 ]% E* R2 t
, ~# j4 }; c5 F, Y6 \
5:删除& P! s4 P% J4 G! P
6 |7 N+ o0 P' [0 R7 X% [3 M
  1. <?php0 R1 G4 F( b  W6 h2 M0 l
  2. 9 X2 m5 r$ r( }7 B$ m* k
  3. //链接mongodb
    8 c7 ~: b  `2 U: q1 i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' i9 m4 o" N2 T
  5. 4 t' q0 _* O8 `) u0 }
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , ]6 a' ?+ }/ n! v. \- j
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    & t4 \+ D% d' _( s4 k$ a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段2 [) `$ K- B# Z4 ]
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合0 F, F/ e. |" {' ?/ Q3 W4 Z. d
  10. delete还可以通过limit设置不同删除方式
    ! f' ]! G' e  N( i( D- j, i
  11. + V# T) _6 w, g; ~: c
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据5 s) r5 q6 ?6 K1 C9 |& u( y  J
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

" ]: B1 ?2 t, ^$ {' c$ k' E9 A% l
, T! V! [2 S6 o0 _, E6:捕获异常6 N7 b, ?: G/ g- l, Q$ z, `
) B' y! L/ X& c; `; Q
  1. MongoDB\Driver\Exception\AuthenticationException  l6 I$ p7 e1 {1 W/ p; _7 y1 d4 P( |
  2. MongoDB\Driver\Exception\BulkWriteException* D" ]2 L0 Z, L% }/ ]* x. X
  3. MongoDB\Driver\Exception\ConnectionException
    : j1 \+ v2 S/ H3 `
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    2 t! `# v; ]4 {& j
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    - S- r# G. a7 b! d
  6. MongoDB\Driver\Exception\ExecutionTimeoutException- I) _0 O, G3 u  t# F1 ]2 `/ u
  7. MongoDB\Driver\Exception\InvalidArgumentException0 R" ^' ?) g; S, [! ^
  8. MongoDB\Driver\Exception\LogicException
    2 n8 w2 X$ B0 _
  9. MongoDB\Driver\Exception\RuntimeException
    6 Y3 w5 \9 r. e2 K5 C0 A
  10. MongoDB\Driver\Exception\SSLConnectionException
    " Y1 @, i4 \* @$ I) R" |* n. D2 w
  11. MongoDB\Driver\Exception\UnexpectedValueException
    - y. z7 I' W( F  m# o
  12. MongoDB\Driver\Exception\WriteException
复制代码
0 c, a8 _& q5 i  h4 b0 s: I
; g  g4 J( I5 D; g: G

8 d( ~  z% k3 m! B6 T点击查看全部$ a) h* g& l( }/ e  l" [

' ^5 h6 L& U* l' V: G8 c6 `: n2 K, F" c3 D$ f





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