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不支持以前的写法。6 i) c  I, E+ o; u
0 V9 P: q$ @* s2 J" H
下面用PHP7新的API总结一下:
: O. v; n' [2 q/ r2 ^+ |6 |. h# h+ G3 x
一:CURD
4 P1 A9 x0 B- h! s2 r# b8 y
; [& B2 l) T! ?3 V- l+ v( C1:链接/ L3 B, \: I) z6 C, t$ I8 I: g* N
$ x2 W2 F+ H6 k0 y8 i
  1. <?php
    7 o7 t" i' Y0 ~% h9 Y
  2. //链接mongodb3 y" t$ m4 A) h- l/ T
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');3 C- h% r7 p, @4 p8 I7 R& n8 y7 V
  4. root 用户;123:密码;如果没有密码则不写
复制代码

+ K% }0 D6 o1 O/ d3 U  ?! j1 M- C  `# D2 [% |0 f
2:查询6 c7 A, @. I" {
% j0 Q$ h. g- F6 B
  1. <?php$ x7 g! X7 c$ q! A
  2. ' d! ?4 E3 T" b1 Y: v
  3. //链接mongodb
    ( x8 A/ ~0 G- x' \
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 y) Y& A7 g6 P7 y
  5. 1 _  y( [: b3 k7 \
  6. //查询
    ! u7 h4 s& G% {4 E" P1 X
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" `. k5 V& }8 Z" U
  8. $options = [& h8 U& M, m% z0 S6 I
  9.    'projection' => ['_id' => 0], //不输出_id字段# t% X  k* n) \' N2 C6 Z6 Q
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序3 }3 V1 O9 c+ z: Q' e; O
  11. ];
      @* {/ i9 t( ?
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    " u% ]* q2 D2 S  [* @# f. Q
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合9 p- x' @" Z  Z1 g
  14.   U* _& b6 T* V

  15. % F7 K' ?4 |6 F1 s9 j
  16. foreach ($list as $document) {
    ( h2 O7 v3 o( U% U
  17.     print_r($document);
    1 f8 c5 z- n6 p/ k
  18. }
复制代码
+ Z( y$ L; A( d$ r
查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 _8 V  s5 d4 o) K% V) Z% W+ C! c8 k( d9 M: {% t# ]# @# U
3:添加2 K: t! ^% F+ a( a; |; \

: }# z* Y1 ?3 _; Q! J% W( y
  1. <?php' O+ N2 p; T9 W% e3 d& {

  2. 7 A9 n) x9 }( M6 G0 G+ R) ?6 c
  3. //链接mongodb
    * o4 y5 [. M9 e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 h: U1 s1 I1 [  Y0 a# l. N% S

  5. - j/ j! h0 Y/ `3 y5 A: ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : u# v2 Z* p2 C. {. q: y/ T4 S. K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( T# ~( @7 S! s! b* H4 w( |
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ' Y7 S, w# D3 j( {8 `0 n; `
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    . Q. e2 N% j. e- K/ W) P) [
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; H% |5 f* A; B# v% @7 K* g& H
4:修改3 a) ~' k* N, O3 V1 h# P$ F7 |2 g8 @
) J1 w; P6 h" y7 F
  1. <?php+ d/ C" [6 @1 j' `

  2. 6 S, ?& H7 c9 S6 q9 o
  3. //链接mongodb8 W5 P7 Z/ @8 |/ A* |+ F3 H$ w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ _1 ^0 g) u/ [3 H* l- B3 ~7 W

  5. 6 C# w) y2 o( F& v" T+ `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( d/ `4 U4 x  `' {* o5 M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 Q; R0 l* Y8 C" b
  8. $bulk->update(
    ! b& U# x/ d2 f( |
  9.         ['user_id' => 2],5 R, C* \% @8 M% ?: T, X
  10.         ['$set'=>['real_name'=>'中国国']
    6 b5 T6 v( c/ W' a" V$ |7 y
  11. ]);
    : }5 D$ b/ R. r; b3 V( n; O# ^
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 J& m; i; M+ K$ N9 }/ I$ S
  13. //1:字段不存在会添加一个字段;
    $ h4 m/ o& l* A, Q$ U3 F
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert4 l  P( f3 x) z: k" Z- I4 L

  15. + u/ P: k1 T1 T( M" z) h
  16. 4 f  L% L5 C3 _% x7 t5 W
  17. //如果条件不存在不新增加,可以通过设置upsert1 \6 C% x1 f  m# T$ c3 D- N. A
  18. //db.collectionName.update(query, obj, upsert, multi);
    2 f- q  |$ X. b# s( m* }. c

  19. / R+ q: I: K4 @) z3 n
  20. $bulk->update(
    , c% J, w  d1 I( k. D
  21.         ['user_id' => 5],: k9 C  _3 ?2 t. l+ a6 y+ F& [8 a; h
  22.         [
    + n2 Z, [9 Z: C* A" c( ]" g
  23.                 '$set'=>['fff'=>'中国国']" |: L" P1 y- R2 Z! d
  24.         ]," q+ v/ @+ S8 O6 W
  25.         ['multi' => true, 'upsert' => false]
    ( f% ^) x5 k4 t1 n: [' {
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    5 e' R  v6 N- [' D0 C; N
  27.         //upsert为 treu:表示不存在就新增
    # B% a/ W/ Y0 c" G& d% J
  28. );
    5 a3 ~6 _2 h7 j& X+ s7 S
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# z0 A4 F* h: t) J: w' K; R

. u# F) M4 e- w6 X+ r) Xordered 设置; m  S5 a/ o) t4 Y3 H3 E
# m8 {1 @9 n2 G" C. B) x& j
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
  j0 G; L" k: ?) I: u6 x! k2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行0 X  V  M* J! B# Q

1 }/ n9 n% y( h) J2 n5:删除
& R/ |! \; t0 {0 h9 u' ^5 x8 ]& Q2 w2 S
  1. <?php/ q, b# a7 I& B& s' j6 j: [3 ]9 n7 r
  2. ( R; q5 J, u) u  d
  3. //链接mongodb  F5 N: T! A% G3 b# [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + @4 E6 ~+ ]) D/ w& J' V( ?

  5. / u8 F/ v7 n7 d. z/ h5 y, o  C0 A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    % E# W2 T3 {! z! B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    5 n: ~4 I( V1 O3 H" I, S4 T
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) v. L7 c5 k, B9 M6 e& Q2 }, d
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
      k2 M$ K& |3 i2 Y: q7 I
  10. delete还可以通过limit设置不同删除方式+ s0 [, P) b' A

  11. , S, {% _% a0 i+ l6 |' P
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据8 H* ], ~" l, J" B/ [$ \& e
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
$ u1 W. A8 n; \* I

7 s5 H$ I% n. l9 M% i& z6:捕获异常, M* V# W; f5 n7 C

3 Y& O& ^/ y/ F- T( ~
  1. MongoDB\Driver\Exception\AuthenticationException8 K( c: V8 |) C
  2. MongoDB\Driver\Exception\BulkWriteException' W) r: s! _6 s6 V
  3. MongoDB\Driver\Exception\ConnectionException' j! C4 g2 u. {/ S2 a2 {2 y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    3 I' E  x% ^7 @, ?9 Y% M& @+ Y
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
      f. t  C3 y8 N$ W; C4 n
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    . h; C) D: _% B6 E* _* N. [2 H
  7. MongoDB\Driver\Exception\InvalidArgumentException0 y% v( G  b) ?4 |) a/ {6 o+ I2 O
  8. MongoDB\Driver\Exception\LogicException
    2 W8 O( T- K9 y7 v" F/ }
  9. MongoDB\Driver\Exception\RuntimeException# Q1 K$ n; a+ v& `: L4 i
  10. MongoDB\Driver\Exception\SSLConnectionException
    - T; Y% w% M$ c* o- b
  11. MongoDB\Driver\Exception\UnexpectedValueException
    4 ]  r' d9 i" C6 h0 t, `2 a- F5 w+ t
  12. MongoDB\Driver\Exception\WriteException
复制代码

- D4 v" ?2 C. e
9 z: `7 z2 [4 h# P) [' o3 t! F6 [- f  _, m
点击查看全部- G* E& j; }* g5 f- h6 Y
! p1 X' w5 E$ D; a' L  f4 |

( G, X6 P6 g, U




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