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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15542|回复: 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不支持以前的写法。
( a9 K; A3 ]3 y( c0 `! H; k* V3 f0 D( `; C3 C" \3 `  \4 u; N5 H
下面用PHP7新的API总结一下:
5 r6 I% n( Q5 N) ?8 I' ^6 x
, d7 s) G. d5 v3 H; e5 }一:CURD( e/ C8 T. c7 K0 _! d3 H

7 Q/ r# ^7 }" \/ n% X! l; o& V( q' @7 s1:链接
3 N$ r3 k7 Y6 q+ V; g! U
" |; x% Z) ]9 B3 m; n) m9 ]8 P: I
  1. <?php
    1 d4 H' x: f. ?7 T* F9 }
  2. //链接mongodb
    - M7 b. d& O* P: W( S* j
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    1 {/ ~$ F$ I& E2 n: ~! p. A- ]
  4. root 用户;123:密码;如果没有密码则不写
复制代码

) c( |7 I+ n  H" ]; ^
, c+ c* N# `/ _, Q4 u& Z. g) d2:查询
# _7 `# y9 t7 f  {/ H+ S: Z3 o5 A* z  B% B: |. h
  1. <?php$ N  x& ~+ h0 Z* Q' I7 \

  2. : Q5 }( `4 w0 S- k
  3. //链接mongodb
    2 x) s: F; M9 x7 c# I, Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . p+ h8 u0 d$ ?  W) l$ [1 }

  5. % D5 F$ `6 W' O! Z- l" w1 i5 J
  6. //查询
    & P; p7 \2 G. f" l( T
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" E& C" l7 ?% s* `1 B; \2 u
  8. $options = [
    " r. n! R7 x* Y# K5 `5 t
  9.    'projection' => ['_id' => 0], //不输出_id字段$ w7 M0 ?- t  M' ?6 G
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    " ?$ W/ k5 p6 @1 X& H
  11. ];: L8 W' U8 s8 c- u
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求& b$ k6 v0 x' e) q3 g6 ~
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ; v* i" [) [7 z
  14. 4 v& k+ `% S6 H0 ^  ^, H
  15. 4 a9 p  s5 ?( S& _/ a2 {/ j% `
  16. foreach ($list as $document) {
    ! e) }& C: d' k1 E6 Y9 ?0 L4 ?
  17.     print_r($document); ! H( }( h& G  y+ H
  18. }
复制代码
7 ?2 x1 K- M/ `# `+ _1 G
查询更多条件使用方法,参考第二节mongodb基本命令,查询
" j4 R- D9 [( i9 U& @) R
3 ^7 J3 t9 n/ @* Q$ Q3:添加
0 b6 P; ?- G2 h  l$ ]; \' x1 ~! b% j, |, J1 N# G2 c
  1. <?php9 T2 a. H- W# p3 P5 U4 y* e
  2. " R- ^# p+ K) b8 _
  3. //链接mongodb
    / J5 `% j0 U9 g6 M% h% {
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 ?8 [/ t% r( k& Y. A. t2 K; E
  5. 4 R' r$ o5 ]1 N; ?, m/ R5 i
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; l+ o) W: l2 H6 K: t$ E% e/ @
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! P- w; G$ x- L2 `! D
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    0 z* _4 K0 q2 o5 ~# y% p
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ; z5 f  a2 W  h; ]+ f7 r9 S
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, `6 N: b  E5 f  A( E$ J
4:修改5 b+ l2 z  o, W, S1 \
4 D% K$ d! @: e5 E+ e
  1. <?php: P- e! d8 u7 W- M

  2. ) [7 l0 Y1 f6 U# }& o( w
  3. //链接mongodb# i( _* f" C- d5 ~, K- D% Q& z% }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! u& A; s' f& M! l# a! k) P

  5. # s# ^/ e& ?) s  s4 q& X
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 S3 g/ ~2 m3 f/ E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    " P0 ?9 O) |0 X. w. a( h
  8. $bulk->update(
    . ^' O  ~# g8 x$ c
  9.         ['user_id' => 2]," H) I8 K5 \1 _! p8 m& k8 l
  10.         ['$set'=>['real_name'=>'中国国']
    9 _; A2 c9 a  D7 I. s
  11. ]); ) e, P3 L$ H4 G0 ]. x* n2 m
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    . G/ B' X* D  `( _  U
  13. //1:字段不存在会添加一个字段;8 F1 b) v* k: n( N0 H( }
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ M* Y5 W0 X2 k" Y
  15. 1 e  S+ @8 I6 K5 w& Z4 e

  16. . H; a5 \+ o1 @6 D
  17. //如果条件不存在不新增加,可以通过设置upsert
    : q. T! w5 n2 s+ {: P% u
  18. //db.collectionName.update(query, obj, upsert, multi);4 l# J, W3 Q( n" p# @1 [
  19. 9 A' Z( H: r( F, b
  20. $bulk->update(
    % K7 S6 ]) ]: y9 t  E! [
  21.         ['user_id' => 5]," }( F4 ^+ p7 L$ v+ b2 o; b9 ^# C
  22.         [9 t% W) q' I# D
  23.                 '$set'=>['fff'=>'中国国']
    " ~# I1 V- u5 I% Q. B8 {+ R- a
  24.         ],
    . s% A# B$ h  m# _) \3 _' i' d& P
  25.         ['multi' => true, 'upsert' => false] ( v7 t+ ]4 J: S5 Y
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    & g2 ]* E3 d+ Y5 y* N" @3 o7 `  ~
  27.         //upsert为 treu:表示不存在就新增' Z; C3 \0 P( p( [
  28. );" ?6 m# v; ?+ c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. m" d; n0 C8 C: u0 |" u, |9 P
" x! _3 o) _* P9 t0 p& e) t; F* t
ordered 设置
  c% f4 ]1 n5 x7 M: J8 P3 ?& M. U3 r+ C1 l/ D; Y/ {( I( D
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 _7 N3 C8 N6 W- A
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
! o4 Q" Z3 V9 B/ k% n
! J5 U1 [! v9 v+ q5:删除
+ Y6 O" d: O9 q; v) f$ S& R
: ~0 N5 X0 k5 l! B" r! A3 P9 u& U
  1. <?php5 P5 l9 d+ l  L

  2.   M: B9 i7 _. q- S3 N( d2 m. T
  3. //链接mongodb$ ?& ?. s5 b- ]- b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / P9 H( D& {2 v+ W% x% F, y
  5. 4 J* F( t9 J4 k4 o: O
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ ^! W9 _  B2 G/ N' t
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 ]1 u: j: |- B+ ]$ V" K
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段2 N/ f; R: g8 o; y8 G
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合6 X* G8 _* v9 O# [/ t. b
  10. delete还可以通过limit设置不同删除方式
    ; W/ _" V" J% f: l' ~
  11. 0 g$ s' {' k+ ]
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    + a  t9 e) r8 Q6 K( v9 y& r
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

1 u1 w# Q- h, _. a, `  F# c9 O
. Z% {$ F! h  D! F1 x+ s6:捕获异常! p' \* s  A1 R+ Y. X  B& _

7 e' m9 e$ t* P9 Q
  1. MongoDB\Driver\Exception\AuthenticationException1 r1 f  S4 s: V
  2. MongoDB\Driver\Exception\BulkWriteException
    0 \+ i# L4 {& s
  3. MongoDB\Driver\Exception\ConnectionException
    / e) o" I% L" v
  4. MongoDB\Driver\Exception\ConnectionTimeoutException7 x5 ]& d& t$ m$ G0 }
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    / z# p9 h$ {  @& J& n' P
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    6 ]" O7 k/ M( ~2 ?
  7. MongoDB\Driver\Exception\InvalidArgumentException1 m( a% `5 z+ `' A- K
  8. MongoDB\Driver\Exception\LogicException4 z; F; [9 f/ \
  9. MongoDB\Driver\Exception\RuntimeException
    6 E* d9 ^5 I' w: x, S: ?
  10. MongoDB\Driver\Exception\SSLConnectionException6 ]$ {$ H8 {$ T# A
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ) `* e7 [6 {2 S: N
  12. MongoDB\Driver\Exception\WriteException
复制代码

6 I9 |$ h  q# F* \0 s2 G5 }' n  H( d; P* S$ F$ ]* X: t
游客,如果您要查看本帖隐藏内容请回复
) x5 h, h) b1 ~: J
点击查看全部' N2 v6 @. D7 p% u/ r% h8 }
* r6 B7 i" i$ E1 ~2 y
- V* @4 p1 [+ ^2 G8 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-25 05:20 , Processed in 0.073110 second(s), 19 queries .

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