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不支持以前的写法。
9 V7 Z0 C# w7 ~3 s- E6 q# K+ G7 P6 ?8 j3 {% }
下面用PHP7新的API总结一下:6 m* ^( d" |3 i3 e! t6 S3 {
$ K8 x* v2 b4 U
一:CURD  D& F, t0 P( e5 w9 ]/ H$ O+ b5 b  ~
7 Y# d( R8 w/ G# Z$ u
1:链接
8 `1 y" g4 m- n/ N" I( E0 R9 A2 l/ }; B- s* }
  1. <?php* a0 o' m9 F2 W
  2. //链接mongodb$ K$ h" f- |" K/ b
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    2 _7 b7 T5 ~0 U" p0 D
  4. root 用户;123:密码;如果没有密码则不写
复制代码
7 y* u) O1 ]  F- p2 x0 A
# w1 c2 C" t6 m* _, U
2:查询
' Z# G3 B/ z, |4 v+ G7 h
+ s* H9 b$ U' \0 |" f
  1. <?php
    6 i0 g7 g* J8 _

  2.   B8 x# a8 `( G' \: Y0 G
  3. //链接mongodb
    0 k7 L& a  m0 V0 ^& T) j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! O8 V: ~( {8 b7 w$ ]
  5. 0 v+ ?; T5 D0 Z$ ^1 x
  6. //查询
    ! {6 t) `/ c8 V' s7 s5 M9 h
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0. a4 f+ C6 P9 _  Q1 _8 F4 p
  8. $options = [5 Y+ p7 O$ Z0 P0 x: D$ i
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ; _3 J0 c4 c. d  _9 w6 f
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    0 L: w) }, K9 \+ I3 L
  11. ];
    7 h+ ~+ ?$ B: u
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求, A, F5 F) {' V6 c
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ( w, W, \! X9 \' c% D3 w) k9 u* W
  14. ' K5 i% c8 w- e0 F  E, [: N

  15. 0 H" n" o; H6 Q/ I6 i, R
  16. foreach ($list as $document) {
    - ?) B% h" J. j# ~5 ?6 O
  17.     print_r($document);
    1 E1 t7 I; ]' V4 L3 s( g
  18. }
复制代码
, R* m9 L) x9 m  L; ?+ x
查询更多条件使用方法,参考第二节mongodb基本命令,查询5 W/ K6 D8 _, w/ a+ w& o; U5 _

6 h6 P+ @0 p& @3:添加6 B( h* T) f  Y( k% ?7 S) a

8 G/ z8 T/ L" J% y3 G4 p! Q1 m- G  h
  1. <?php
    7 J2 W( o$ k8 ~- {+ l% J: i# b

  2. 6 T. W% ~1 _% c" T
  3. //链接mongodb' i0 |6 s' k$ P7 s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    + z) q4 ^9 A+ K+ y8 w
  5. ) L2 b6 I; `5 `0 n
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% H+ t3 w- W) ]" z) J+ C
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行3 |: w2 N+ j( z) g+ I
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);4 b8 N1 J* C! Y- a
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    4 |& i* N( x# B& S( a* S
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

$ r7 Y& P' N& O4:修改- `/ H0 S( O% `. Y

! N2 L1 I& l- q- y+ I4 o2 Z
  1. <?php- Q" `$ Z2 P" t# n, k

  2. $ f7 h2 \4 l: ?2 M* g
  3. //链接mongodb
    8 B2 d) o, ?+ P* v) I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 e% e/ ]. \. Q9 ?. Z# J! U

  5. 2 G! E0 X3 E. u  q# Y( ^9 `
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ( j2 [5 O+ t" b& m+ c: {1 h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    2 Z# `+ Q$ r) O  P' j
  8. $bulk->update(: }( w- D! \9 x2 v4 W, o/ X
  9.         ['user_id' => 2],
    ! B  b1 x. l: Q4 z( G% {1 f1 q
  10.         ['$set'=>['real_name'=>'中国国']
    ; G/ w# ?- l+ t, I# h
  11. ]); ; j) o- q: C+ l" y: ^+ q5 B2 [: O
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    - U: _! z. n4 r8 \
  13. //1:字段不存在会添加一个字段;4 O. O) t' {; }, n+ I" w& g
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert9 X& l$ P/ c9 v$ k0 K. g; H
  15. ( e- J9 F/ w5 @" l2 U4 J: B  n3 Q
  16. ( V& w0 [( e# ]! O6 R; `% {' |  L
  17. //如果条件不存在不新增加,可以通过设置upsert
    ) V; H. y7 n4 u! n6 O& R/ w
  18. //db.collectionName.update(query, obj, upsert, multi);
      K/ K3 p! l5 @; C9 ?
  19. ( @  S" y; W3 B/ g3 v
  20. $bulk->update(2 f4 z1 h& E7 n& o6 z/ P  J8 W# o( E
  21.         ['user_id' => 5],
    % {  {! c# ~5 C- a/ [
  22.         [9 V+ y6 O2 B, z# m* L0 D) M/ O
  23.                 '$set'=>['fff'=>'中国国']/ D: N& j$ S% Y9 b
  24.         ],
      q" Z/ d) |2 P' e
  25.         ['multi' => true, 'upsert' => false]
    ; b1 [% v" e  d, |& ~$ R
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& U  D; s" h7 P" e
  27.         //upsert为 treu:表示不存在就新增
    % |0 O$ P8 }- ]$ Y
  28. );
    . j0 @6 ?" Y' c6 R1 v# k
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 O) ^% V2 a5 y" D7 M# T

& I; H4 L  {3 @3 tordered 设置
# ]" C% H" {4 T* ^
4 y' D4 {- k/ v9 B. s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
; ~" W# s) y1 s6 y4 U0 d) \. o% B2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: L4 _# T# ]5 `7 z9 I
. d5 K2 i* a+ C/ C" V3 X, d7 ?
5:删除& c- e7 Y9 Q  B" H/ E

% x1 `0 J  v) [1 P6 S& j' }+ Q
  1. <?php9 q7 j7 V) j3 X
  2. ; h$ p  ~5 j& E  P3 Z. t3 `
  3. //链接mongodb
    - `$ V+ W& n( o* b9 ^# W
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : t4 w( ^) L8 D# C$ `  j

  5. " }5 r9 @8 R, ]
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  L$ q) a9 i# D
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& o' X% K0 S0 |& F: i
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ! ~; w( [0 C. O( h2 U
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    + C+ b- X) B7 j0 s
  10. delete还可以通过limit设置不同删除方式
      \4 G# C, `# e- C

  11. 1 l: J; w$ |% w1 @
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    9 X8 F( ?5 L; |5 b8 X0 r0 e* b: \5 Y+ Y
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

, A/ u  w, u" S7 n3 P9 r
6 j8 G2 F% Y# I' @6 U$ c; p7 ]; K- A6:捕获异常9 d/ w, x" e3 y9 l: @

+ J4 e5 ?: y" U+ r
  1. MongoDB\Driver\Exception\AuthenticationException
    ) i9 B) f9 t+ k; p
  2. MongoDB\Driver\Exception\BulkWriteException" @. \# B( h' ^+ u, ^
  3. MongoDB\Driver\Exception\ConnectionException9 G# x2 H$ j. T* u
  4. MongoDB\Driver\Exception\ConnectionTimeoutException' t: L* ~  I( _& H$ j! V# E, f
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    9 T3 I9 K8 ?4 _, p8 L! h* m
  6. MongoDB\Driver\Exception\ExecutionTimeoutException0 ~5 x8 I) c: U! A2 X$ a
  7. MongoDB\Driver\Exception\InvalidArgumentException: s5 a. P& p% [3 m% }; j
  8. MongoDB\Driver\Exception\LogicException6 Z; J) I2 D6 R0 U$ ~* j* `
  9. MongoDB\Driver\Exception\RuntimeException" _/ ^  d5 i& S. R4 v7 v
  10. MongoDB\Driver\Exception\SSLConnectionException/ b+ `) G- C4 U
  11. MongoDB\Driver\Exception\UnexpectedValueException
    6 L4 N; W, J3 |; i0 w  n' y9 G" v
  12. MongoDB\Driver\Exception\WriteException
复制代码

- \# O" c3 y# Y5 K- V7 ]9 O. v( R  E* F% B; X, U; R
* o: w5 y5 [" b/ k. r- U. r7 [- ~' _
点击查看全部3 S. w) K! M) O3 [4 b1 H# ~3 \
- z  d, L- l9 ~) l7 N

7 X  E" z3 k" r0 j




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