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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14341|回复: 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不支持以前的写法。# \& o4 T5 y1 f  X9 N
8 t) ]- v  E7 h- E" H: G" e
下面用PHP7新的API总结一下:
3 ]& F" O7 w4 C2 E% S& d8 ~3 ^& C" y: h( i1 W
一:CURD7 i( c' L8 k! C* w% {
2 `" J7 z' ^* h. J+ ]1 @( g
1:链接
2 n) @, N; X8 _( P% O
9 O" `, X% s, K0 B1 ^* [6 F% j
  1. <?php0 i6 e7 ]* U& c2 y! g  v0 a
  2. //链接mongodb8 B% A& R4 w/ j
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ; e0 l; X# E# v# N
  4. root 用户;123:密码;如果没有密码则不写
复制代码
) k8 x! ]$ n. h' ~- _- _
$ n4 s. Q' o2 f2 O, g! y/ R4 |& T
2:查询
( T( v* {& f- X9 G6 O4 w$ h* |5 [% J9 J! _+ D2 \$ d* W; v" w1 m# Z
  1. <?php
    1 F. Z$ ?, f- i( h$ ?% N
  2. $ t: s  s+ A& o! x* z9 w' t
  3. //链接mongodb( n7 C( z& j( T+ t* v0 B, b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! p1 [) Y, ?  S: V8 O+ G

  5. 0 H9 f. }. Z. z: n( U7 P# t
  6. //查询1 h0 w# H4 K( u% c0 n
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& q& T4 d- {" |& |2 H3 p" U- l. [# |
  8. $options = [
    4 w. z+ {' r* O: h$ Z+ Y. B3 Y4 {
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . |1 V' V0 a3 z0 z# H
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序! n, V2 a$ j& z. K8 d- V/ r2 i
  11. ];" F( a$ q& d  @6 r+ d7 U% q
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    % ~; g' d7 O' T/ m7 Q
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合7 b1 }- C% s) A1 d9 l. c/ d0 ~. G

  14. $ l& v+ E- W9 X7 H
  15. 9 u+ S: X; v5 M- }; q! c
  16. foreach ($list as $document) {8 f  _  I3 V9 l& {
  17.     print_r($document);
    9 R! b7 q0 t2 y( Y  I
  18. }
复制代码

1 O0 l) {& h; p查询更多条件使用方法,参考第二节mongodb基本命令,查询$ u0 |' E+ N7 z" s

" G( R4 l4 e3 k' @3:添加% |) t/ z; E) u

" {4 X) s* ]6 V  N: n5 n) n
  1. <?php
    3 W2 z: X+ A3 l0 B4 m: b

  2. $ A# D5 v# W- W5 ?. f( ~) r  A
  3. //链接mongodb
    & V' B5 n) V9 a$ {7 S" n
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; Y! J: J! U0 v6 S4 ^% V* K% E
  5. ; V$ [: y9 D0 k- e2 t
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' \$ a8 j. P4 j% B" S
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    6 t: v% `# b3 f& ]) H
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);6 A- D$ F8 V+ i0 e: {4 ~2 b# Q
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ S1 V1 H4 g% e9 b9 F/ E
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

# V2 u! }3 j# x2 T: c, c( @: |% P& j4:修改
# b  P% r. ]7 u: V  _/ z# @# }( [: E5 W' |6 s
  1. <?php' W& O( o5 u- r+ }

  2. 7 s; Z% d- N, b3 {3 T
  3. //链接mongodb
    0 c" q& U8 A( y8 p& [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! G" U& [) Y& q: Z! V8 _! X

  5. 5 f: ~2 }: A) S+ C8 _! V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , L$ g8 l: ~/ J4 W
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 W7 H) D/ L, T$ H  v% O- Y  p
  8. $bulk->update(2 B% C2 G$ ^6 v- G: [* w+ i# u
  9.         ['user_id' => 2],
    7 V5 k# O  d) f
  10.         ['$set'=>['real_name'=>'中国国']
    & @/ O% x' U/ Q) `
  11. ]);
    - v5 d7 K, D& o: A* H1 S
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    - ^; |! P" r- g2 j3 [: q; z! A
  13. //1:字段不存在会添加一个字段;
    1 |$ Z( Q# k! E; M
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    2 N) C* _5 |' `
  15. . r( X( ~4 N1 M
  16. ) s: Z% y9 w8 k' B0 s9 \! [9 r7 \
  17. //如果条件不存在不新增加,可以通过设置upsert
    ( C- t3 b4 f, c6 Q/ ?
  18. //db.collectionName.update(query, obj, upsert, multi);
    ; M& F  Z; p6 l5 q
  19. ! h% X' T4 B+ |2 O9 I
  20. $bulk->update(
    : j% h% z8 k+ N
  21.         ['user_id' => 5],' Y& e. H$ \6 K9 `0 x; |
  22.         [
    ; D* g. B( G: p' h6 _1 z
  23.                 '$set'=>['fff'=>'中国国']
    ; M( o8 \; K2 h4 ~
  24.         ],
    * f8 S9 W  \* d) L, U* I: U
  25.         ['multi' => true, 'upsert' => false]
    3 M2 s: F2 J/ a) }9 `2 ~; v( x
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 l& S: v" Z6 l" U; w# J6 B$ W4 S+ f
  27.         //upsert为 treu:表示不存在就新增* Q( {( i, A' S/ |1 _& I/ g
  28. );
    ' r3 p* t6 M8 ^2 r
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 i, `- ?0 n0 ^

6 e0 p- M0 ~+ ~! s0 {* q  H2 aordered 设置
/ |; R3 Z& z" F, g' t
, x- O2 |% _$ a8 V1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。, g/ u8 I$ K3 w4 e- B0 o
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
8 o. _0 R4 }+ @6 N* q2 ]# y% v! \& t" b5 N# \9 t
5:删除# p0 b4 \6 V3 u3 t. Z
- n+ G3 @* |, x
  1. <?php2 V9 m8 `& H3 c9 N$ [* x6 v

  2. 8 g9 W5 _# |/ G. y1 D) D
  3. //链接mongodb
    . _% ^# w5 l/ @3 P. q( C
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 L, l' R* b8 x" y+ m

  5. ) g9 J/ ^5 y4 z2 F
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% f3 ?9 g! ]4 ]5 I
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # ^' Z0 J2 M8 S4 J8 w  g. I5 E
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    % n: d5 v/ O) v2 \2 o- z2 Z. g
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) ^' ~, u2 n% f7 {* F& C3 v
  10. delete还可以通过limit设置不同删除方式
    , _: s, A5 y7 u" O* Y& |, {3 p* F
  11. ; i1 R" o  D' F2 V& [# o3 p
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据  @7 V- k8 G" I
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* A( o" E: v) l. ], [$ Q
9 X7 @" c- M% C2 w9 N6 R3 A6:捕获异常- \) y9 _; ?$ Y6 u  @: x  e: \
! z4 p, l! }- S. L1 o+ i# n) M
  1. MongoDB\Driver\Exception\AuthenticationException
    ( E5 n7 r; \9 E
  2. MongoDB\Driver\Exception\BulkWriteException
    - x5 f: c2 _# [9 h: u- m
  3. MongoDB\Driver\Exception\ConnectionException( i$ f4 G& }; g# |
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    " q  D9 N) [# e( k$ F, R9 T4 z
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口5 j* ?6 `. `" h! X3 _
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' M# j. d: y! }, c% A! A
  7. MongoDB\Driver\Exception\InvalidArgumentException% p) X9 d6 k9 E! T* ?0 ]' L
  8. MongoDB\Driver\Exception\LogicException
    - U& I6 @& P4 Q$ d, Z: V
  9. MongoDB\Driver\Exception\RuntimeException$ X4 A6 Y" E8 X
  10. MongoDB\Driver\Exception\SSLConnectionException
    / S, ^3 ], R9 z4 K+ v
  11. MongoDB\Driver\Exception\UnexpectedValueException
    - e. D3 O: g: l6 W: `
  12. MongoDB\Driver\Exception\WriteException
复制代码

7 Z/ l- A. C. S# Q- Q
% w0 {9 }1 A5 n8 a- F( O
游客,如果您要查看本帖隐藏内容请回复

, t; t% D: ~5 n* W! K/ N+ ^' B点击查看全部
- I( O9 \- m* s5 k/ x) ?$ d
4 u) M. |7 N! l  U& L$ m( X1 n; B2 D9 Q; X9 E; Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 11:39 , Processed in 0.060773 second(s), 20 queries .

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