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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14736|回复: 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不支持以前的写法。* Z- y6 v% H  M/ w: A
1 ?* W; p3 \. l1 H9 i( y- @. x6 j
下面用PHP7新的API总结一下:
5 Q6 Y9 y5 {1 Z$ z6 p& e/ N4 O4 ~2 i6 @) _7 L9 M
一:CURD$ Y) @  }' P+ J! f

% y, A  a) x( E( }1 M* J1:链接
5 J7 @5 Z$ P3 r
7 @0 ]' Y8 e1 U8 \0 Z
  1. <?php
    7 B, n  G4 K4 Y) x* L/ F- |
  2. //链接mongodb/ @- V% y- v' ]/ u' [) S' v
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');: ]0 W1 E$ q$ Z# I1 G2 G
  4. root 用户;123:密码;如果没有密码则不写
复制代码
9 d9 T0 Q8 m, r0 f$ s# X% D( n( c  J9 U
$ ]+ _$ O' K$ k  _! ?" \0 u
2:查询' D. r0 ^' p+ |
  I, W* D) _5 N, o
  1. <?php6 {* @' e6 E' q
  2. ! v7 c1 p; ^/ {5 ]# e
  3. //链接mongodb  E7 V7 _2 j. w3 n8 [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      V8 g( T5 ^0 T# O3 y# t% D

  5. - H9 B4 j' C3 ]2 {1 }* Z. x; R
  6. //查询
    9 l) f( K# [0 ^, K
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 D: r, M9 \) ^5 ?. F3 n
  8. $options = [
    5 X+ x8 ~9 U2 O& W. h# V. Y
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ! f0 z! P/ U! }, f- P
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序/ m" S; [& V- T3 ?6 |/ d4 I; O
  11. ];
    ; H6 G; W/ o. M; o# E3 G$ w3 E
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 \) j! v0 Z2 f
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合- j  f" u+ l$ p5 W) T# m

  14. , x" P& @+ W& y0 J

  15. , y1 p5 t; {* J/ a
  16. foreach ($list as $document) {! j' o# Y& s/ c! A, M- O
  17.     print_r($document);
    8 P$ O5 f+ [  ]: M% H% J2 \
  18. }
复制代码
* x% @( x/ T3 I8 \" n2 s
查询更多条件使用方法,参考第二节mongodb基本命令,查询
, V) ^2 M, x4 u3 G9 ^) K; L  F- N
, h9 _. S% D( h! y# t3:添加4 ^7 V$ ]& Q2 n2 P  D. `
; y2 g  p7 m/ x4 w$ C& b2 L/ ~$ \/ H
  1. <?php* R6 \1 ~5 v5 \* H

  2. % y* D) ~* f; E2 T8 D  ~1 k5 F
  3. //链接mongodb
    7 b' |  [5 G) T6 p$ p" B1 ~) m6 q
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    * i* Z- n* @$ M) e9 q( w

  5. - S. X1 t, ~8 n; A3 R& d8 C9 T+ {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ D- C2 f9 Y* L* w9 n- A" i. `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : C) c9 `0 W- R  ~& Y) V7 s5 @
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);: }' d' z1 }" U6 i, r% `
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      F8 [- F9 S' d
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: I6 t' l+ C# C0 I: I) Y4:修改
7 P1 X3 R8 P+ x8 [5 K( n2 S$ G2 k5 T9 |3 v+ m5 l7 u
  1. <?php
    9 r+ @# k- o& }, I  L" ?
  2. . c% ?8 K$ v6 s0 H
  3. //链接mongodb
    ' c4 X/ ^% w2 `
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    9 i2 B9 N9 u% s( B3 M
  5. 3 D# |# j7 A" ?+ r- D$ b# V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 n# c; a. W1 [- A7 j* }+ c7 w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* R. b- N; a" S9 ^2 G
  8. $bulk->update(9 d1 h" s" A3 N' c- `
  9.         ['user_id' => 2],
    ! d, c1 p. S. `0 I# k" V
  10.         ['$set'=>['real_name'=>'中国国']' h4 f0 q' @! T5 t/ c- `, S! q
  11. ]);
    1 F3 _' n( A& ^- A
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    : X* \* {: ]3 [& N  A  ~3 c
  13. //1:字段不存在会添加一个字段;
    . ^: P" c# X0 T
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    : b; S7 n( t% N

  15. ' _5 ^  M5 E! ~
  16. 0 b5 Q) p. e8 [: q
  17. //如果条件不存在不新增加,可以通过设置upsert
    . `5 j4 t5 k4 p$ f" d" L
  18. //db.collectionName.update(query, obj, upsert, multi);; D4 r) C& e# k5 R
  19. 0 ?8 U  \; q2 N' z
  20. $bulk->update(0 m& V: L( u' H  e1 {' C
  21.         ['user_id' => 5],0 ]+ R" T% S! s, w+ {+ U. z) x- G
  22.         [
    " y* P6 ]( S% v- E2 v1 p" ]+ t
  23.                 '$set'=>['fff'=>'中国国']
    9 [6 s; {& z, d" R
  24.         ],
    $ H. f: d0 E' ]9 c$ \2 I. u
  25.         ['multi' => true, 'upsert' => false] * H$ U7 _, C6 b+ }
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ u( J; t6 |/ i
  27.         //upsert为 treu:表示不存在就新增
    6 |8 K0 a) ?2 R. T5 C, `# j7 X
  28. );
    - m' ?/ c3 H: O8 |3 h/ H
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

) y0 m+ B5 C9 z4 h" g2 P2 a7 F9 i- n6 C9 J! w0 x+ r
ordered 设置
3 `5 S9 k' C" z* F4 p4 p# r
" F5 d, y6 O/ b* N3 _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
- w2 \6 Q3 G2 e  R; o2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 \5 ?/ [! q- m9 R2 T
+ ?' J( ^( D8 d$ J  r$ {3 y
5:删除
# S& S2 \8 G# H' r+ q0 G( x/ J$ c4 B$ n6 h' N
  1. <?php( x7 T# K' J/ S" w

  2. 1 w8 D5 c6 k) V- S, B
  3. //链接mongodb
      A$ E& ?" w0 }: U7 c* H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. r# ?9 m9 F# {, ?& ^4 |* T

  5. ) u5 `' b4 a2 U1 a
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # T, N8 C0 d2 a5 ?; K9 ?8 m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : B# w+ B9 B( y5 U
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    / C- O/ s) |* k% Q+ ?. H* f
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合$ X" y# v2 U' _
  10. delete还可以通过limit设置不同删除方式! u& E$ T1 E' Z  z) q& ~3 J
  11. + ?4 b8 i2 D# s6 G0 U
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据# x7 k+ ^& n# _1 U! k* P6 F% V
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
+ s3 G, W  n" K4 |% R, ]2 F

1 K6 x% d; _) _# i! F7 K6:捕获异常0 ?4 d. s+ U' i( C

0 M+ r; g7 v3 t0 ~9 ^
  1. MongoDB\Driver\Exception\AuthenticationException- b1 t' U3 p+ O
  2. MongoDB\Driver\Exception\BulkWriteException0 s7 z; U' V$ K. b) F
  3. MongoDB\Driver\Exception\ConnectionException+ W- q( y) l' y5 ?* S8 i
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    1 g, a2 Q7 z' O9 S* N; S7 s
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    # O' g& H8 g" Q3 l% n0 p# C- T/ o
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    , A9 U/ A# @6 ?" u: T
  7. MongoDB\Driver\Exception\InvalidArgumentException
    - [0 j- w" U) V6 i- L9 c
  8. MongoDB\Driver\Exception\LogicException
    5 J  P5 o( g& Q* a) O) u
  9. MongoDB\Driver\Exception\RuntimeException
    * _) n1 A  ?' U; k* r
  10. MongoDB\Driver\Exception\SSLConnectionException
    3 L( s9 O2 a$ }1 p; V
  11. MongoDB\Driver\Exception\UnexpectedValueException  p) |' \, q' b8 K
  12. MongoDB\Driver\Exception\WriteException
复制代码
4 |$ ]3 z1 w2 d- Y1 t, l

/ E: V% [- v& n$ A
游客,如果您要查看本帖隐藏内容请回复
3 h$ O( K. x4 w( C- e7 K( J- V! v
点击查看全部
% |4 I  S9 M3 `7 @& N. g% w7 ~1 ^  V" S
7 U9 Q9 D, O  E2 K* l  w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 21:46 , Processed in 0.052826 second(s), 20 queries .

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