您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10743|回复: 0
打印 上一主题 下一主题

[php学习资料] php7的mongodb基本用法

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-24 20:58:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: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 d9 K: v8 S0 D9 F9 N

% T" n. p" q5 m9 Y下面用PHP7新的API总结一下:
3 I! w9 t" S* m; V6 z) X8 x* M' V
一:CURD
. ]  n  Z6 X6 ^2 v) j
4 }/ o. D7 n$ I1 H4 q' W" r1:链接
# o8 W3 Q1 z; A* K
8 G2 h  k. o0 z7 q
  1. <?php
    0 g' _) {# E3 k) A8 y
  2. //链接mongodb
    / v2 g) u+ |$ @  j7 b
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');; O6 Y) w& H( V, g; q
  4. root 用户;123:密码;如果没有密码则不写
复制代码

* N, Q( G4 B+ u, X2 q7 y
) t" h8 t8 A7 Z) g6 G! z/ O2:查询
( y& x: M! \7 w* F8 R4 c, ]
6 e$ @7 t$ ^  D2 {: y5 u! k
  1. <?php
    ! {+ _, n* F- w- C% ]; {
  2. 5 ^) j+ i* d3 \! M( Y5 z
  3. //链接mongodb
    ! J& q) L1 v; q; t8 x8 e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / c, m1 z; m8 A

  5. 6 C2 x3 \/ B+ N5 S/ r
  6. //查询4 y: }1 V+ S7 D( i- @6 W2 G
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    6 e% y1 v9 N" c  z9 @+ ?5 |
  8. $options = [
    " t% N' t7 {( h9 Q' w" }4 l; p* u
  9.    'projection' => ['_id' => 0], //不输出_id字段
    9 [) r" R, D1 ~6 E6 d& e+ V. r+ m
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
      I/ K, i4 D* @3 h
  11. ];
    ( U" V/ `' h: p6 _, h: z3 x2 w
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    3 O8 r7 m0 b* V! e& C
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合0 v( S6 T* Z! @; @
  14. # x! y( A/ G; V! z, ]2 Z% k* s3 d

  15. 9 Z! {: t; K! I# {
  16. foreach ($list as $document) {
    8 W* f. b9 b% Y* L& l
  17.     print_r($document); 5 ?' F' o! R. l. n; O& K
  18. }
复制代码

/ E. ~2 V) d. e& T8 E6 l查询更多条件使用方法,参考第二节mongodb基本命令,查询0 U9 g' s! P% [& i! `) c3 }+ b

& ]6 J/ W9 G" t% d5 J3:添加  ?' C8 G& g+ @4 O# N( h" ^
6 `& T4 v! y6 k4 f5 m
  1. <?php7 @; l, _. r: Q- T

  2. & Y/ u0 s0 R' o) Q
  3. //链接mongodb" c& s: P# y" p& O6 Z8 ]9 y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 t( N* r8 E4 `  D3 _) a0 t5 N
  5. , V2 _5 H  `. z, ]* Q9 o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' w3 a1 @1 {3 U* z7 ~0 c& d( s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ [4 J5 I: f, \. a& Z5 P
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);0 Q5 W0 j2 P9 g! n/ s# _# ~+ y% i9 g( J
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    + }& {# }( ?7 ~0 s
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

. s1 a/ p/ k7 `# s, Z1 f4 w" N3 N4:修改
- ]- {3 C/ K- N6 {; o+ w/ T# E
- i8 b+ p. C& ~
  1. <?php
    : \3 k  c' i; Z& ~6 b$ }. R

  2. ; i4 Z- B+ ^; t. Z  N5 G
  3. //链接mongodb! u0 W) ?$ g+ N6 \, r6 L. ~; O- l
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 A4 C" B1 K0 M0 `" h- |
  5. ( Z8 S! N  I1 j# g& u9 b* _
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    7 x; x6 A+ X5 M; ^4 x7 b5 i: X2 S
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * x! b- l- J3 U* R5 M( S
  8. $bulk->update(7 W: H8 u! R4 b8 {# r6 Z
  9.         ['user_id' => 2],: T. ]5 X; Q. g8 o: c5 k% G
  10.         ['$set'=>['real_name'=>'中国国']- `4 o5 \  x; R: y& W1 N) R# F
  11. ]); " X7 F- C) N9 _$ }% p2 [
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,2 |$ v) l2 i& P  E' u; q2 I1 ^+ ?! \
  13. //1:字段不存在会添加一个字段;
    7 T$ ?: o: h4 Y: u( Q& q& L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    9 k: B+ ^$ V1 d9 i2 n
  15. 9 P1 E. ^2 p( _" Z! w1 w
  16. . H* h0 T9 Q! t0 i
  17. //如果条件不存在不新增加,可以通过设置upsert& A% t& g) M! W& D4 A
  18. //db.collectionName.update(query, obj, upsert, multi);0 ]" b, c7 L. h3 c/ Q) h+ d
  19. # p- S4 C$ M- M
  20. $bulk->update(
    + M5 r5 q: N0 _: V9 E' d
  21.         ['user_id' => 5],, O. j1 \9 ~9 N6 B
  22.         [+ F; p8 ]: t1 }) }! C
  23.                 '$set'=>['fff'=>'中国国']7 G& |0 V: U3 U5 }# P' B+ |3 j8 r/ q# Q
  24.         ],
    0 a: P) h( b! g+ I+ q: P: F4 J
  25.         ['multi' => true, 'upsert' => false] " P# D8 ^1 Q1 q1 _$ R
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条, W+ z, n8 F/ r! d# g4 a/ @
  27.         //upsert为 treu:表示不存在就新增
    ! @$ Y2 h, S. [+ G/ P* a
  28. );/ L6 m( X) L. G& `" w
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
+ k" @" m9 d$ Y6 L3 \

4 J! c7 n" h; D: |' r6 R/ ^ordered 设置1 S  n) s# S3 ^! H3 ~; P' F$ b" H  q
9 O1 k- x/ g! N5 @6 O8 p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) t* }3 Q9 M% W2 n2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 D" U1 `3 F" I; I' B7 c
! ]0 x/ L: N% r7 k+ W; b* Z5:删除7 U7 [0 y0 b& j2 J
- s1 `6 {8 D; u; j3 P' p8 Z* S' v
  1. <?php5 E/ R/ p2 l2 w8 M

  2. $ f/ [' x+ b: k9 N
  3. //链接mongodb3 V+ A7 S: a6 Q" j( i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 _: r& _9 E& C* x
  5. 5 t# S3 f; P7 \6 F" ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 E! |( L  g3 v& }9 W+ W
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* x. F" `3 [) {5 {- H, z
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段- h) K& ?& b5 U, D+ g! s3 |8 H8 F: G, T
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合! a0 Q6 [' ?( }
  10. delete还可以通过limit设置不同删除方式" S; r/ h: ~0 B3 e! f6 X

  11. * i; ^3 p: E$ c3 B  X4 n1 o
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据# G% C8 w# I  d& a
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
; z  d0 O; e1 `
2 H0 @4 N# C6 r7 g$ h7 v: @  ~
6:捕获异常! n& I  P) O2 Y" R

( S: g5 o/ }8 S# G" h
  1. MongoDB\Driver\Exception\AuthenticationException
    4 u  X+ d7 E- B5 U, l
  2. MongoDB\Driver\Exception\BulkWriteException9 k( ?( W5 y0 w! M: k" O
  3. MongoDB\Driver\Exception\ConnectionException; V# Z, {) P7 Q) R* z( u0 n2 i
  4. MongoDB\Driver\Exception\ConnectionTimeoutException* F! T& C1 S/ X; Q+ T3 d
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口  q2 o6 h/ {5 D: c0 d
  6. MongoDB\Driver\Exception\ExecutionTimeoutException6 ?2 X. w7 g+ [, `
  7. MongoDB\Driver\Exception\InvalidArgumentException) j5 \/ p' d! I
  8. MongoDB\Driver\Exception\LogicException' `& i; p  c4 q( ~* w: N) t
  9. MongoDB\Driver\Exception\RuntimeException
    / b- ^' I* P! j
  10. MongoDB\Driver\Exception\SSLConnectionException0 I8 e; t; b/ M( D2 L
  11. MongoDB\Driver\Exception\UnexpectedValueException
    & [7 G0 F6 `% `) m1 |
  12. MongoDB\Driver\Exception\WriteException
复制代码
1 g" h7 N+ K# i8 w& X9 A
5 S& {5 i( V' y- }9 |
游客,如果您要查看本帖隐藏内容请回复
$ U6 k; e( l0 j3 C2 ~0 e3 O
点击查看全部
! \; o0 e* \/ c+ y
8 x/ C6 F* O# {
. X  j% S+ A: p7 H0 W; T6 |) z& h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-19 09:50 , Processed in 0.122930 second(s), 22 queries .

Copyright © 2001-2024 Powered by cncml! X3.2. Theme By cncml!