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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14459|回复: 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不支持以前的写法。
( k$ `- @4 f9 p0 }  ]1 i' s, Y
; @9 N3 K3 ^- a$ y. w0 z下面用PHP7新的API总结一下:
2 G- ?4 P- c* T8 }* H; o; @/ j& }, a9 q; x9 b3 j7 a+ G
一:CURD1 `' Q. e; |$ h

, z3 P, m$ R  ]) V9 O5 ^( k1:链接! X9 h6 {; R2 j% m9 `" ?( G

5 Y; G$ m3 T4 p
  1. <?php
    0 t; M3 D; i$ [: a2 t2 i( v$ N
  2. //链接mongodb5 D  [/ L5 W$ n1 T* p
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ P! z9 I3 S2 j- {% u* O& n& y/ g
  4. root 用户;123:密码;如果没有密码则不写
复制代码
9 T% D; E( h9 X' Q: i# A* F

* E. ~' V/ \! h3 d2:查询% C2 j; J+ X  H3 J! N

. D- U! L( ~1 |9 l( y4 N
  1. <?php; b  U  m/ \6 t

  2. 3 o9 {; m. _/ a1 d; e. b
  3. //链接mongodb
    + j! H% J; s7 \# W0 |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    6 Z+ I# ^1 u* y5 \
  5. , S# E9 L  V, N* x9 C" M9 n$ `6 D
  6. //查询7 i  }$ K( g8 X
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0: `! \2 i: q: P# r1 H8 |
  8. $options = [
    & \  B9 q7 z2 X% n
  9.    'projection' => ['_id' => 0], //不输出_id字段+ K. A: S8 m8 u( ]) ^' j) J
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序& x# G* ]9 O  y* o5 l, m
  11. ];
    2 t- c6 @) `: Q2 C
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求' S5 {% @" d! V# L1 i
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合9 S0 I6 @! V; K+ Q, q( W& F. J
  14. 4 z' ]  w# |: Y2 E4 l, o9 q
  15. & T$ w+ v  Z7 C; c! z! J
  16. foreach ($list as $document) {
    4 T9 v. e6 N7 I0 a/ R( ]# a
  17.     print_r($document); ' N: K7 w; q2 R
  18. }
复制代码

" {) G' G8 }$ A, ]0 C查询更多条件使用方法,参考第二节mongodb基本命令,查询
* o: `  g9 Z  K7 k* Z6 X( c2 }2 W% _  Y& C' K& C
3:添加
) q" ?2 r7 H+ Q+ q( }* P& y
* }4 u1 I) O( M( p
  1. <?php
    # @: }! F$ u$ Y( F
  2. 7 j0 l, a4 I5 g4 G2 y! g8 K: j8 _
  3. //链接mongodb! _+ _! r- }% X: }2 s" O% a9 A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 j9 Q1 D" x' Q) z1 ~
  5. " v2 }4 T9 b2 u; k6 m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ @, C0 M" b  y/ t! D7 ~
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& _. S2 ?* N! y" e, X) j( E- [
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    # f' P% h4 o$ @) ^( r( P
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    2 ~  }6 C( S8 Z& Q
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 A5 ?( p# r% s! m7 |
4:修改
6 }# H& i5 g# Q( b/ B& C- `
5 O: d1 C, _9 h  f+ l
  1. <?php
    # S- _: d  r# Q" M' a: x0 d
  2. 4 e- j) |+ D# V, a$ f, C
  3. //链接mongodb
    % g: S- |- [: z0 ^+ e" v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 W+ A/ _- y) {+ I: |

  5. - B; P0 E1 g: ?, i. Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    * H0 w" [* e; D- l4 E
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % q( }% R7 f! x* d3 Q: b4 u3 W
  8. $bulk->update(/ w( \: q: t1 K3 {6 M' M$ _- ^
  9.         ['user_id' => 2],
    ' {7 d6 R1 w% V; A$ r# |$ Y3 j' I
  10.         ['$set'=>['real_name'=>'中国国']
    . g  G- ?; R$ L
  11. ]); 5 _+ Z/ i( [( ?: x4 r# N0 G
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ( L. N# g# C: |6 s6 x% B
  13. //1:字段不存在会添加一个字段;+ X5 S' r; V: g' D8 c4 ~
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    % Z5 @% O4 L; @4 U6 z( H& l

  15. 6 H. ^4 D0 c  k9 ~9 O
  16. ; K' h" K6 M/ s
  17. //如果条件不存在不新增加,可以通过设置upsert  s  ^' r, c  R, u8 R* H7 r
  18. //db.collectionName.update(query, obj, upsert, multi);
    - K; n* _3 |' g1 p6 a" @5 M
  19. + O1 H7 T9 D8 p5 n
  20. $bulk->update(
    / H# T" X1 O( j
  21.         ['user_id' => 5],
    & @* ~8 I: E" h
  22.         [( T5 Y8 V) s1 V; u" }) Q0 u
  23.                 '$set'=>['fff'=>'中国国']1 M2 y$ T% `* a
  24.         ],- ?9 B( L0 P' O# W, j, m4 ?
  25.         ['multi' => true, 'upsert' => false] / Q$ X- C" G" f) e
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    1 f* B$ T1 {  \0 T6 w4 q
  27.         //upsert为 treu:表示不存在就新增0 q$ W2 U7 t3 ^
  28. );& ?7 `! W" ]# g
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: f+ l0 L4 g7 m, n1 Q
% Q' N, y+ C+ |" yordered 设置8 Q  |( B' I+ Q9 C" s6 V* E
! t! l; O, t$ V! f7 I! p
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。( @. t" J  f4 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: f9 K" J& Q0 W

, A& q' ~) y/ a. r4 y$ c4 H5:删除
; K6 ]8 p/ m4 x4 E* \$ t& Y$ D4 b% K( C7 h: d. }3 ?- {
  1. <?php
    , b" O5 Y8 p$ J8 o: ~1 Y. |
  2. / C3 M& b' A$ X4 j8 ^3 [
  3. //链接mongodb6 `* X1 u+ l1 w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ l: H5 P( D6 L
  5. & U. [2 m8 t5 _1 a
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 [1 @% j' u4 B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    . X8 y+ m  E5 U! t
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段# [  Y/ e7 |0 F
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    9 O/ G8 u: |% I6 f
  10. delete还可以通过limit设置不同删除方式
      u8 P$ M: w3 `* s: f2 N& o+ X  m

  11. * b- q* }: J* k( o3 |
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    & |9 O, K" R2 R6 P
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

( l1 \& c  w. Z" X" }* V3 _% p% G3 O. A( P! z
6:捕获异常
1 O9 _4 t9 C) h9 d: X4 p: f' Q8 F1 u1 i7 x& S! ~( ~
  1. MongoDB\Driver\Exception\AuthenticationException( D* S! M* ]- U. o" a6 r; i
  2. MongoDB\Driver\Exception\BulkWriteException
    ( w& Q6 [2 ]8 c2 ~( P9 W+ e1 Z
  3. MongoDB\Driver\Exception\ConnectionException
    % I5 H1 T1 l  I: I8 Y+ E+ N
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    4 Y' h% q* ?2 S0 t
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    2 I# p9 }4 X" T. j2 b5 W) Y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException: K4 R6 Q( P! H" Q" A* N
  7. MongoDB\Driver\Exception\InvalidArgumentException
    . j+ u: [9 o% n7 B  T
  8. MongoDB\Driver\Exception\LogicException
    ( y8 L0 j& t( p& g1 L3 m% }% H
  9. MongoDB\Driver\Exception\RuntimeException2 J. V* U7 j& h- u
  10. MongoDB\Driver\Exception\SSLConnectionException
    # }3 m& H7 ?& y( Q7 N8 }6 Z( y5 C
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ! ]5 u7 A: s$ `9 `+ U
  12. MongoDB\Driver\Exception\WriteException
复制代码

2 P" j6 r9 m3 v( P
$ i& o; O8 c# a  S
游客,如果您要查看本帖隐藏内容请回复
5 j! G$ f+ n2 W+ k4 C
点击查看全部
0 _1 \. _$ n: u# e
# m8 c1 Y+ L: h# r# L. N9 a5 @2 \5 \, |  P0 W* N2 z0 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:10 , Processed in 0.062121 second(s), 19 queries .

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