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不支持以前的写法。' m7 `) h6 e7 a6 l- t" R  d
: y2 f: H, d9 o! M: o% [3 e
下面用PHP7新的API总结一下:
' k3 F) X5 T+ D  v/ G' ?1 ^$ \9 J: K0 H+ d. y% T
一:CURD0 F9 C( v# b& n, b" `* A8 \# |; \" R1 y6 x
$ W1 Q  E- I) `7 L3 L) {1 n
1:链接
4 L5 w  Q2 O2 s6 j$ a$ O: L% }' f  b+ Q' U- t
  1. <?php8 {! Y7 u, O. d$ J) s% Q9 _
  2. //链接mongodb  X' J2 k7 E) A, z
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    $ x! b% f7 s. I3 y3 [6 W" A6 \; g
  4. root 用户;123:密码;如果没有密码则不写
复制代码
+ ^/ G& m& D$ w5 v% F- n

2 C; ~3 y3 Y4 K9 C8 o2:查询6 c# B) Z; [4 B) s9 k3 B0 X2 `

" P8 _" {9 |1 R2 z- n
  1. <?php, G' }0 i0 u& D

  2. 3 n3 }+ {( {+ F- Q* E$ Z  y0 ^
  3. //链接mongodb
    & O5 t9 j2 M  F: ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ t0 F3 y5 g6 K
  5. $ @  I& {' W- h& X
  6. //查询" x# o! M- b+ b! i. |
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0; G! E* q1 J: p. a4 W# b( V
  8. $options = [1 f1 h% M& Z, U
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ( ]. A; z+ K8 G# O3 m# t
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ a) T0 j& _- m
  11. ];
    # a! a& p7 r0 p
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ! A: @+ P! b" A
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    8 K. I9 m$ p  Q% a
  14. # O- k, q1 y$ j2 \/ [

  15. / z- y4 N: T" l* g- R
  16. foreach ($list as $document) {
    0 N' B- E; d' H0 [
  17.     print_r($document);
    7 A/ Z+ E: G. x% t0 b8 `8 t' u
  18. }
复制代码

! v4 `: |$ x2 d) L: L$ _1 s查询更多条件使用方法,参考第二节mongodb基本命令,查询
- ?, m2 {+ C1 x* O, y4 y" W. |
0 d5 w9 j2 o: Y( {$ L& x6 A3:添加
: w$ _6 T; ~, N0 K# @1 Y6 h0 l/ V
( Q/ a# ]- ?! T0 O: V2 ^( f1 E
  1. <?php# ^/ G9 F- m+ }' S; Q

  2. 4 Z; L: s& h$ U# l' |9 T9 u
  3. //链接mongodb
    2 A# |) s  {, V( d: ]* @1 s4 W/ |5 x
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 [( C" ^+ j' M9 t7 l
  5. 6 q% v2 W% s! L- E, _# l. V' [( [
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / A& E4 t& A- W6 `: N& y: ?
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行0 M7 u, V' C1 q7 y$ |& p
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    ) Q. W' o/ I- W7 S# G
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      i5 l; N7 Z. T. k
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

6 M$ u+ S2 u+ ]( n/ \0 Y, s4:修改7 U+ ?. @; C* j$ H3 Z( y4 y: y% @0 U
6 I3 v1 M& m( m
  1. <?php3 P3 e. @: ~3 v4 K4 @

  2. ! e- E4 [9 G. e+ a8 n( H) ^5 g, x9 f& ?
  3. //链接mongodb
    % H: n! D/ Y  @& _' {
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ; T/ M4 K6 j) b3 E9 q1 f. T& w
  5. ! E) \3 e; Z; _6 a, K* X5 x4 W* m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    1 q: ~" N& g: [5 Y3 Z. E, C# ]
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 A  b$ s4 X3 p! c6 z" ?1 Z* k! U. B; Q
  8. $bulk->update(
    ; j1 ~' ?- q3 G$ u
  9.         ['user_id' => 2],
    : u1 a6 m5 g) N' w8 g2 @) t
  10.         ['$set'=>['real_name'=>'中国国']% i( V$ K4 k% M2 I9 d
  11. ]);
    # Q/ X  ^% V& V0 K
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    5 e+ f# {0 b* r, s
  13. //1:字段不存在会添加一个字段;
    7 g' Q" q6 _! n: v) F- \4 |) ~
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    0 i' [3 W& l9 w$ N. ?2 m
  15. % j) R6 b2 @/ H; C& P, Y; C

  16. ) }' X+ C: L% C/ ^$ I
  17. //如果条件不存在不新增加,可以通过设置upsert
    : w# X) l$ N& M  ~# Y8 N
  18. //db.collectionName.update(query, obj, upsert, multi);( P; t# t* u' ~# x
  19. 2 X; r5 A6 S: _5 o+ _8 h
  20. $bulk->update(+ F( ^' q5 P1 _5 m( p& h
  21.         ['user_id' => 5],
    $ w* \& p- Q/ ~
  22.         [# Q: ?5 S2 G- S4 |0 ], {4 @$ e
  23.                 '$set'=>['fff'=>'中国国']
      w$ I( s0 u. Q; B! H/ c8 ?
  24.         ],
    + X0 D8 h5 u8 m, m6 L
  25.         ['multi' => true, 'upsert' => false]
    / K5 Q% o  a+ S* E/ s1 g( Y+ E9 T
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 o. b4 u) \0 K% T, P7 l
  27.         //upsert为 treu:表示不存在就新增
    ( C0 S4 M- u, \! A! L# e+ @
  28. );
    8 B; t- E: x$ n2 K/ }) W) a
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ A* v4 s# Z, U

5 s6 J6 \. H! p4 }: I3 jordered 设置5 z1 _& x7 j6 @" W# ^  g0 J4 ?
$ B  C5 x) J: ^7 f+ Z# p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
% j  I1 w' R3 |. X2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' H! {9 s, r8 Q! P( {2 H/ A
# s5 Z( B' f  v0 d  y5 O8 c
5:删除
% F/ t; w& {0 O0 k* a
% j$ P8 `- M/ y2 z$ L! P
  1. <?php
    # F7 a( ?5 ^4 X8 I0 f, G  D+ Y/ ]
  2. 3 p% G4 h3 y4 r8 q
  3. //链接mongodb! a) J" P2 Z4 n
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 A# i* d8 V! }

  5. 3 x; U3 f* v5 B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( o7 \9 D% t( d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: h8 \( A( g, B7 _
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段0 J! p$ [% B: t( ]+ H' F- S$ n* A
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    - K) q% g& X% d. t8 B$ w$ c
  10. delete还可以通过limit设置不同删除方式* @+ h  ~8 T  E& p5 Q, s

  11. - j- {6 G- o% X- t+ f
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    % R, v% K, T: W. E
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
2 F6 g; B" ^6 a3 p: q/ R

( u  f2 Y, R5 J/ ]3 K' B6:捕获异常- p, @+ x# K/ J: s* |! K6 i
: p2 ~; J1 ]" o
  1. MongoDB\Driver\Exception\AuthenticationException* b9 o4 M9 c& D" R! D: o# b
  2. MongoDB\Driver\Exception\BulkWriteException
    7 ?1 R7 i/ V6 z$ J
  3. MongoDB\Driver\Exception\ConnectionException# |" ~; V- l) t, X* u6 y1 B
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    / p) W- q4 q$ a$ R( r7 {3 K1 I
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    0 E3 l$ V! m3 L+ e& l6 f6 c
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    " q$ g: k& {$ z7 A2 m+ p1 V
  7. MongoDB\Driver\Exception\InvalidArgumentException2 G$ |0 W& q, S! |/ a
  8. MongoDB\Driver\Exception\LogicException) x$ Q% B& W& j( T& d5 [5 f
  9. MongoDB\Driver\Exception\RuntimeException6 n0 X: ^! e% f8 p# w
  10. MongoDB\Driver\Exception\SSLConnectionException1 u  m( t0 x, o9 k6 y; m; L) v
  11. MongoDB\Driver\Exception\UnexpectedValueException, G3 k+ J& a2 G3 s
  12. MongoDB\Driver\Exception\WriteException
复制代码

' P% {: e$ W/ \: y+ ~/ t
' h* p# L2 n% ]' H7 J9 V, i
" b+ z3 R" x- P1 {" F8 D点击查看全部" D1 t  g8 _" g" Q; r8 L
! w- u7 l) g3 |9 E* z, H' V( o
, V% m- u% {2 Z+ c$ k9 z- N2 m' C





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