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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14948|回复: 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不支持以前的写法。
% l/ j+ n5 l/ U# P/ W2 ~& J
' u- j% |# q, s3 s; s; ?. B下面用PHP7新的API总结一下:
# r7 V3 L0 P7 d5 `; Q
! t9 f; w2 }8 F$ p一:CURD+ G6 p. k$ ]9 p  i8 J9 F

; }* K4 H& [' G1:链接
" m9 h" y1 {% e" D* G9 o
4 Z; d6 r3 e! p5 Z4 _* Z
  1. <?php' A, y8 ]+ R% U# ^1 N% h# T) C
  2. //链接mongodb
    9 [7 {. P! Y: X9 S. W+ ]# P
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    6 a8 J7 l; V$ `2 ]9 C$ o& y
  4. root 用户;123:密码;如果没有密码则不写
复制代码
2 z1 t) _; @5 x! F& Y+ f
- K1 h; L3 \1 L4 X  z  e
2:查询' P, {0 A3 v4 H

! l+ a' t( s# h9 d6 g2 m
  1. <?php3 O  }, p$ T7 i0 x5 P7 R/ k8 y

  2. # ^9 w# ^. l! M
  3. //链接mongodb6 \& y) d! r4 z% v8 n% E5 Z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 d! D. D7 R; {

  5. $ l4 u" ~. t! u, x( V: s7 w
  6. //查询
    ( R3 u9 v) V9 S% b6 u8 s" T4 |  J- d
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    3 r) N! p' q7 O
  8. $options = [5 e+ D& i& g- @9 O0 B
  9.    'projection' => ['_id' => 0], //不输出_id字段5 K; x9 l  Q1 A) ~- f! m; K
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
      s( o% G0 a( F/ Q. b! y
  11. ];( C1 i/ V: G8 B+ b" o
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ) [" R, ]8 ?- J$ p
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    5 Z2 |. u( x0 z0 y! s2 [
  14. $ D, O% J1 A6 y9 d" L2 S6 z

  15. 8 Q* N. j8 j+ T2 x/ d; F6 T
  16. foreach ($list as $document) {
    / d" A$ X5 G% O) I5 ^7 {
  17.     print_r($document); 7 g% m3 u0 K( x) b* f' s
  18. }
复制代码
& y4 v3 S' Z  H, z
查询更多条件使用方法,参考第二节mongodb基本命令,查询, R  U3 t6 F, Z! h( _$ V8 L

- F( \' a3 i% p3 r- S3:添加
8 k: {0 @5 l$ a4 [2 P
8 c& U. F7 P8 G5 S: l+ x+ Y
  1. <?php; E, G5 u: l* q) x8 Z
  2. 0 X. `  a: o6 S( q2 s
  3. //链接mongodb/ F5 C/ J4 m% W# b9 X, o
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 b# b& `/ }9 d# b+ c9 R+ x

  5. % Y" z& @; d3 `1 \& |. s6 X
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    6 X1 h# l# Y' D- x4 `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( g, l# G8 l, J
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);# D- u  f8 @2 o0 ]- B9 W
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ; R! X  b9 K; K$ k* c& l3 v
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; Q7 b% y  ]9 T. T& m% d: o7 d
4:修改
# W' I! z' f4 Z" x' V# z. W/ E. z( Q+ u+ s' c. J
  1. <?php
      B% m' a; A6 @: U

  2. % J3 J( l& q" |" U+ p2 e: P
  3. //链接mongodb' p+ L( W4 W8 Q4 t5 r8 U" S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 k6 ?% s6 U* K# v/ O, R8 X. p1 U# K
  5.   O$ F8 }+ }( X! A6 U
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    0 R0 F* E6 q7 N# G0 u8 M6 q/ q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( i1 b" z9 L' ~. ^9 _" ]( i$ u& O
  8. $bulk->update(4 u7 o6 [; O, h; r: o
  9.         ['user_id' => 2],3 b% X5 T+ U9 I0 m
  10.         ['$set'=>['real_name'=>'中国国']
    " M  @- H3 y1 M  X0 \' E0 o: n
  11. ]);
    - ]) k/ ^: g- e) S5 C7 L: L
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,! N8 S$ \3 W: T
  13. //1:字段不存在会添加一个字段;& s- I5 X& Y! D  f) Z  e- f
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    # l6 X5 P+ s: |/ |3 Z5 ]
  15. 1 f  ^* Z* Z% y

  16. 6 Z. c' R% i; O5 S- W' _
  17. //如果条件不存在不新增加,可以通过设置upsert. w7 ]- M" \% W- d' I
  18. //db.collectionName.update(query, obj, upsert, multi);
    6 k; [4 ]; g+ H! n: d6 L& v
  19. , c8 w2 p& C% A4 @/ ~% |  w
  20. $bulk->update(" u: `* \5 W1 K% w
  21.         ['user_id' => 5],
    * K1 @  S  K  {. f4 e
  22.         [3 f9 |! j3 J) D9 E4 x9 ]: c. |
  23.                 '$set'=>['fff'=>'中国国']
    $ o9 n# Z, j% k# l3 g
  24.         ]," b4 G! T0 V8 t2 K( _/ h4 F; C' Q+ [
  25.         ['multi' => true, 'upsert' => false] 9 @$ x: w* _+ i7 X- p  S
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    9 M- b9 w  p; s  q4 H7 u
  27.         //upsert为 treu:表示不存在就新增$ P# i& G* N! o/ [/ M4 h
  28. );# U; Y4 M! u& f! j
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

2 [& P* Z7 }/ g& l$ H  {$ Z, w: ^( H" u7 O. ?+ u  n
ordered 设置8 N. {- q7 F$ f1 p; G9 u0 c) Q
3 p& }1 P! }/ ^- j* c5 w9 B
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- v% o, [4 f9 K7 f& `- J8 S4 O
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
9 w: `, }  j, `7 \  f2 S) o+ ~( ?1 w, |" K3 M  F8 N- N
5:删除/ `4 ?& [. K; f

( ?. |+ E8 N0 O4 y. ^& \+ i
  1. <?php
    - h' {0 x$ r% r( w7 ~9 W$ e
  2. : D4 u; b% r: [& y; s
  3. //链接mongodb/ w7 F9 f( D' K3 e0 M
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 ?3 ~# z! `+ Y. t
  5. " ^; \- e0 W; E4 @0 o: a+ W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / k1 D3 ~# h: k  i% q( @2 ]
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% a% U) W. G1 S' s, V5 T
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    8 P5 A" L0 }) Z  Z
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    8 ]  u6 W9 ?* M; X8 |' D
  10. delete还可以通过limit设置不同删除方式
    " H' Y" s" C; `! E. X1 o/ Z2 i6 a* h
  11. " w  [& B2 r& u0 I4 Q9 l
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据3 N% p% b2 s& l7 M/ g$ _
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

1 w: I3 X) r; F) @4 B  n4 k! K, d, W) b+ y6 ~( R6 Q
6:捕获异常
1 y9 s) U: a( L* d7 e" G3 O3 a5 y! O
  1. MongoDB\Driver\Exception\AuthenticationException
    ' P: v$ n  B# c5 D9 h* Y6 r* Y$ ^8 w0 z
  2. MongoDB\Driver\Exception\BulkWriteException
    : a( a6 i" @5 ^" I& i  x
  3. MongoDB\Driver\Exception\ConnectionException/ ]" p- a6 S7 G& v! |9 d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException* u5 C: C/ ?1 V' k5 Y( ]
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    # e. I. Q' L- G8 U3 X. U. N
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    . z& g+ v) Y( t/ {
  7. MongoDB\Driver\Exception\InvalidArgumentException  ~9 |' {7 ?; Q7 y0 Y: t
  8. MongoDB\Driver\Exception\LogicException
    ; [7 n. \# d+ ]" [5 i& ?1 h" E
  9. MongoDB\Driver\Exception\RuntimeException
    / q3 D- j  Q5 |' R5 R
  10. MongoDB\Driver\Exception\SSLConnectionException  u; o, s! ]* E8 V) K% R
  11. MongoDB\Driver\Exception\UnexpectedValueException) l+ X6 Y6 T) [8 [+ d" A
  12. MongoDB\Driver\Exception\WriteException
复制代码

# g* K) o2 J) _$ ]( T) A. L
* Y; H3 a* a$ a9 c" x% J
游客,如果您要查看本帖隐藏内容请回复

# q, z. V! ^2 @$ ~点击查看全部. V1 ^* [' L) ~& m3 H
! f: N0 t6 ]& X$ Z4 ~# l

& Z* t$ Z9 |! q6 {6 X" g6 d" s/ {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:38 , Processed in 0.054514 second(s), 19 queries .

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