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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14348|回复: 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不支持以前的写法。1 f. E9 e9 e$ I1 P
7 m& R. b" V  B: h& y/ D
下面用PHP7新的API总结一下:3 S- F. {$ ~! b, C" d, K

1 ]' s. @* b% H& k# d1 e; H一:CURD, b2 A# p' H7 h1 d  j  X+ m+ Z' w) v

% S6 L" \; e+ K6 M+ }+ j1:链接% N% x1 i7 Y8 P9 e& x+ Y

) Y$ u/ F2 c! e; m6 N8 Y7 K4 N. G
  1. <?php
    * d: O5 R$ R6 U& ]5 w5 U
  2. //链接mongodb
    " N: ^- [0 ?3 K2 _
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');- n7 S) U/ v6 `8 G
  4. root 用户;123:密码;如果没有密码则不写
复制代码
& H4 K# U$ r3 U4 @  a
1 e7 e/ Y* @; ?* d
2:查询4 H9 d' Q; I% Q; U* D# f. d
( C6 n7 {" E! n0 B) l: F5 X
  1. <?php
    . d) S# c# f( C) a

  2. & H) s& H' w9 j) e1 K# c9 O, O" I
  3. //链接mongodb
    " r& x" a% V$ A5 n1 }8 R6 A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 I' Y0 V- x! k+ |% f/ u7 a
  5. , R! J) l3 m/ r& y' B
  6. //查询
    - T1 S4 r3 l+ }! u' L1 }  A' y
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于02 c  S. u* Y! b
  8. $options = [
    9 Y9 C& T( R  p, F& R; }1 a
  9.    'projection' => ['_id' => 0], //不输出_id字段
    9 D& s( f! l4 I5 Q( W; z; h
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序! n8 t) H3 E  I, Q
  11. ];
    & C* u9 z( o+ ^2 n
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
      }( ^* u; E+ V4 R- c9 P
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    " {, w' y; e" \* _' n% h! E. V7 b
  14. $ c' x. H6 w( c1 N+ g
  15. / I1 U- k( A6 h$ A, w: m
  16. foreach ($list as $document) {' F7 I: O' C! p
  17.     print_r($document);
    5 E# y/ O# I2 |: A: D
  18. }
复制代码

1 S1 b. J$ n# h7 L2 a1 m查询更多条件使用方法,参考第二节mongodb基本命令,查询
7 G1 c: }5 s! e* o/ E+ s1 [: x5 e# I/ E' }( S7 Y% c
3:添加
! T, N8 d6 ^3 G  b' V8 a1 @3 P" O% i2 e4 _
  1. <?php
    7 Z+ O. P9 y6 c( o0 v7 l6 ?

  2. 4 x/ G# H5 d+ f
  3. //链接mongodb
    + a6 S0 Q) O# A  {5 J# A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ n9 t/ F5 M  V

  5. " Q6 s$ S" a7 a8 ^# R$ b0 T
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    : b3 Z7 N8 P8 t1 b; q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % E% C6 S4 b4 d
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);5 s# O7 B3 j) k
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);8 j, D9 B: s# b
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# L+ \/ q6 m0 H( s6 q
4:修改
1 e0 S; Q" d. L! O) u
" g1 L& W, Y7 Z) H. x
  1. <?php6 F# h) S; ^8 F. D4 k' M

  2. ' ?+ d& _+ `7 i& o" d1 s: K- _, W* [
  3. //链接mongodb' s+ e% q) w* j+ D$ M  o' \" ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- X: r' E# k4 b0 n  ^' i9 S
  5. 5 y8 l7 |0 g: x8 o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 J) m# J0 E8 d
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ w4 }7 Q3 K+ S0 Z8 |' F# o
  8. $bulk->update(' o. Z, `! l& [9 c5 m% [' C) j: x
  9.         ['user_id' => 2],
    5 q# I6 `$ ^) G
  10.         ['$set'=>['real_name'=>'中国国']
    2 ?8 s" \3 D' C# V- ]; F
  11. ]);
    ! F$ f) _. s' H" l" _6 @
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 [# a0 {  V9 O
  13. //1:字段不存在会添加一个字段;
    # F  s" ~% G2 K5 Z) `+ n4 U+ V' @0 P; q
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert; S6 A% R% u5 L+ x
  15. 5 _  A4 F  G) Y+ F4 z$ d# h: I, v3 f
  16. ) D  t! W- N, N
  17. //如果条件不存在不新增加,可以通过设置upsert3 K8 D0 j7 B' M+ o! Z; |, a7 h/ N, _
  18. //db.collectionName.update(query, obj, upsert, multi);
    ! K7 _2 _8 F: b8 W3 x. v- ^

  19. 7 _) g- f0 ^1 D8 a/ k
  20. $bulk->update(
    6 o" G% z* c! [; ~4 q/ r7 ^( I
  21.         ['user_id' => 5],! V- o5 s5 Z" n! Z/ l8 R( T* @
  22.         [
    + N$ a7 {8 H5 d* i4 w; |9 o; s2 E
  23.                 '$set'=>['fff'=>'中国国']
    " ]# M1 |4 L- N* ^
  24.         ],9 u# x& s5 }/ F* a: F) U
  25.         ['multi' => true, 'upsert' => false]
    3 d- b# |' g8 `1 |
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    * _7 Q8 {' g3 p. V( n' X; {6 r
  27.         //upsert为 treu:表示不存在就新增' T& G. f9 O& u- Z2 [1 g3 q/ p
  28. );# e, r6 `2 H/ ~% F" r
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 f# @3 {% F" I  P0 @

0 q# r. L2 N; X; |$ }ordered 设置3 w2 J  c( K1 A
" V0 N* V* b+ t- [# O& K& i! W
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
& j( E% b1 L) E' S9 v$ ]: L2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行/ \) |8 A2 C$ e( A0 w+ q
9 H1 n4 H/ p5 G8 h% n+ l: j( J
5:删除
0 s1 o+ }' h* }9 b+ r7 |: c# ^. v; @' R+ H7 }
  1. <?php- g2 k/ K, w4 b# Q- Q2 m

  2. $ }7 x; d/ G% [1 d) f$ S! U4 g
  3. //链接mongodb
    : h" f. |: {, e0 [+ F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' Y6 N. a) ~( x. ?5 s
  5. ; s- {; f5 Z: R# W5 o; t) o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    9 P! i% @$ M4 z- E3 N2 x# @  @
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
      l# N8 U3 Z# q' A
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ! n  l4 ~# ]1 ~. B1 J' v  U5 ~
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    1 T) o! _6 f2 O5 T5 v
  10. delete还可以通过limit设置不同删除方式9 [5 q' }# K+ @6 [" y

  11. & T$ Q0 S; N, o
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) g7 Q: |7 u! `4 n2 H( ^* d% F
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ a3 W$ V: C0 h- V. g% t! }! `: K8 t) F  V
6:捕获异常8 Y8 X1 R" m$ d1 j
, r% [2 v( [1 p4 U; W# g# r, N
  1. MongoDB\Driver\Exception\AuthenticationException
    2 V! M1 N. ?6 h
  2. MongoDB\Driver\Exception\BulkWriteException! `. B* Q" `; m+ n
  3. MongoDB\Driver\Exception\ConnectionException6 [8 v* a/ A. ~7 J# A; }
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    8 V4 x. Z3 j) ]1 V9 I6 s
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    : r& N/ `% O6 H7 r6 W& ?% N
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' T( V# F* U3 ~4 c- i' _# [
  7. MongoDB\Driver\Exception\InvalidArgumentException4 b1 T4 }6 a. n
  8. MongoDB\Driver\Exception\LogicException
    1 q' B7 p6 t6 v8 G
  9. MongoDB\Driver\Exception\RuntimeException
    1 W6 A+ t" D  i4 D6 E  I
  10. MongoDB\Driver\Exception\SSLConnectionException, _5 C6 I6 E( a# X- K2 G
  11. MongoDB\Driver\Exception\UnexpectedValueException
    9 ]3 a2 U) Z* f3 A$ ]
  12. MongoDB\Driver\Exception\WriteException
复制代码

; U7 v+ F# R* g% d; s  h  e2 U* K( n& x  Q
游客,如果您要查看本帖隐藏内容请回复
6 X4 C( f' _! y, p& D9 n
点击查看全部
( Z5 G5 ?$ D# m( O/ j3 \$ ~3 i2 Q+ m' r. t) @6 C% H1 P0 E* s. n, b
; l- c2 f$ y' Z; t- r! J- {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 16:44 , Processed in 0.055891 second(s), 20 queries .

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