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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14731|回复: 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不支持以前的写法。* G4 [4 D$ `6 w; x
6 @, @. B9 T" P/ ~% B  [
下面用PHP7新的API总结一下:
& `7 G; d$ D1 \0 H# A% ]) c7 d6 P  j
一:CURD
, R' P7 ~2 q) i. U' {# A8 A  L2 f- n$ d' k9 X- \& |8 A+ C
1:链接* b. N  P4 W4 z6 G& T

) ~/ G2 o) g; _  b2 x
  1. <?php8 p5 F% m- Q: a- Z
  2. //链接mongodb$ S" ^2 F& P9 R  x5 f& [" a2 ^8 d
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');. c% `6 [  K/ a5 O" ~! H
  4. root 用户;123:密码;如果没有密码则不写
复制代码
# H) `* |; P7 N7 I
: U- J$ K0 |9 n: V9 Y$ K
2:查询! S  ]0 M, K1 ?% _

2 n* |0 l4 r# ^( P: ^4 U
  1. <?php
    3 ?- ~% @. F3 Q, @1 E
  2. 7 f; r4 i# L3 n. s$ W4 k
  3. //链接mongodb. y1 }+ {6 f8 q1 P1 q  @3 d
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    % `8 W9 ^: `+ D8 D/ ^) {) t8 Q  g" {
  5. ! K9 L: W7 ]; W4 S0 t; G2 _% T
  6. //查询
    ( ?" H% U) G# i3 P5 ?
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 R4 X( i0 L3 Z
  8. $options = [
    . @: G4 t0 i" l( I9 D. w% o9 m3 l* m& E
  9.    'projection' => ['_id' => 0], //不输出_id字段# K2 F# X4 j8 e: s% X
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序1 X2 n" q/ |& H: n3 m+ N0 @
  11. ];
    , z; e( @( r9 r; G# Y; G' h
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 s8 d" Z! P+ P. Q. R6 ]
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合% D0 {# `- n" I5 K3 r1 D' _5 K
  14. ) N9 h+ \1 }: h+ C3 Y, G! ^, y
  15. - d: R, Y  V- W7 b4 J4 R
  16. foreach ($list as $document) {
    : v. q7 f# i8 Z+ M
  17.     print_r($document);
    1 A1 W- T, {0 i2 Y& W" }0 B! d
  18. }
复制代码

) ?" a" V. {  U  Q查询更多条件使用方法,参考第二节mongodb基本命令,查询# F4 |, Z3 }/ z) F' V/ j
% y/ o: a, v5 f$ D% j
3:添加* y' [) ~! Z( h+ p
0 y4 H) ?8 x0 z8 U; l4 D* w2 u: D7 p
  1. <?php
    3 r8 N( h' Y3 }$ n8 E& Z

  2. $ D6 S" W  H& b5 D  h
  3. //链接mongodb
    , ]0 U% s7 b+ M3 _6 J. g
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 K" D+ z. F; f) I7 t! p% |
  5. . }0 P+ [( ~3 b, Y! W3 }# ]
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " U8 I7 g2 _" D. s9 U5 Y5 o
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ' Z, O; t1 p, U
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    * S+ _2 o0 w# \5 s+ z) I1 X; S+ X* b
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* Z( q' ]9 L! q! C0 f
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# T  A; V7 G8 `0 `
4:修改
$ X7 R- P; H: ^7 J# {. H/ d5 L0 R" K! B# _
  1. <?php
    2 t+ R0 v3 S8 B9 n: U
  2. . P. j3 ^5 C) |) ]+ M; p, B
  3. //链接mongodb
    ; C; l% K, U2 @9 |& ?% d+ E
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / [9 }. j9 t: I1 ^0 P9 @- z4 R
  5. 2 M8 U* N% l4 f. `. Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 ~- o: V3 Y5 @; B
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    / D  }# o5 S0 B" Q& {+ G7 E* j
  8. $bulk->update(& {/ D  n" j  ?) W- ]9 J
  9.         ['user_id' => 2],' |3 V" L& W$ k5 b0 J
  10.         ['$set'=>['real_name'=>'中国国']
    : [+ D; _0 j8 i* E  r2 ?8 k* R' D
  11. ]); - {9 S* m; `: F
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,) J, p% {1 {. k7 l! \( f6 O
  13. //1:字段不存在会添加一个字段;6 m, @1 o; h0 ~- s
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert# H& h- ]7 A1 E: i
  15. & K6 y/ X5 d* D/ `+ R% u5 b3 s

  16. . w3 Y) u2 S  N
  17. //如果条件不存在不新增加,可以通过设置upsert
    . N( c9 O( I" a3 f
  18. //db.collectionName.update(query, obj, upsert, multi);
    . {4 {3 V% x( ]# N. J/ j& J

  19. , q/ S; I! \% u5 U0 C0 W- [9 A
  20. $bulk->update(. d& _/ @# H" B7 Q1 s6 g
  21.         ['user_id' => 5],& S1 C) v! [$ q! t+ G
  22.         [9 L! Y1 E/ }' V7 I% i
  23.                 '$set'=>['fff'=>'中国国']
    % l7 c0 Y' Q$ u* j; @
  24.         ],9 E# L& l* l8 U5 r
  25.         ['multi' => true, 'upsert' => false]
    * j4 ~# y4 T0 Q* g: p
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    : e7 f$ i) I1 c! f( M: s  {
  27.         //upsert为 treu:表示不存在就新增
    8 B# a) n/ e% {& _
  28. );
    ( m3 I2 G4 q: O
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

! O* \/ \( D# P7 u; m, Y& i9 l5 x
ordered 设置
! w- a+ }% H. X. P: b
" D- }' k2 H' b9 X' E' K5 D1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 |' |. O. p+ B# K
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
1 y/ v: u- c& @! n9 o& r6 |
" d" J, ?3 R; k' ^5:删除
/ v9 @7 o, G$ Z6 X& |
; R8 t) E3 ~# ]. k+ U5 N$ E
  1. <?php( n, r4 K0 J4 b3 i' W- i
  2. 1 H8 Z# d+ ~% u3 M4 n  G( ^
  3. //链接mongodb5 d5 P9 N, D) f' r/ k
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 q* E) m, j; b9 a
  5. 8 I! ^- x& A" i8 y' `( Q
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; C% z$ R/ L' ~1 Z+ A/ C& x6 `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % V$ s! [0 X( |4 E
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段9 F/ q4 D" r) [5 W- U9 d5 F4 Z
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    , W& d0 X. V  P5 z0 @7 m
  10. delete还可以通过limit设置不同删除方式
    6 P% j7 n" k; u' j2 R

  11. 6 Y- h* R) r4 v
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    % ~1 i- B- [" T& s
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" [( s9 g. Q! Q: C! u! i" M8 T
# E. \/ T( \1 a- B6 p* _0 y" U. B
6:捕获异常
# A; G! h9 f* c; i$ e# T! e
7 [9 F+ p0 d1 }! S; L
  1. MongoDB\Driver\Exception\AuthenticationException& x! y9 x. T( A7 a7 y- ^, C
  2. MongoDB\Driver\Exception\BulkWriteException
    * h! k" {! v: x2 X7 ]
  3. MongoDB\Driver\Exception\ConnectionException) P% I0 ~! Y% O- O% I& y5 d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ' t: d7 i7 ]5 h4 F; m
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口. {% b4 t& T( Y/ u  t9 s- T
  6. MongoDB\Driver\Exception\ExecutionTimeoutException1 O5 ?9 o& r5 Q4 x
  7. MongoDB\Driver\Exception\InvalidArgumentException
    7 k3 B1 `: S6 [8 L7 `) }! y' r5 F
  8. MongoDB\Driver\Exception\LogicException
    8 }# a: w7 s9 H* i( A: v
  9. MongoDB\Driver\Exception\RuntimeException( g* f+ h1 \9 n3 S+ p4 U; R
  10. MongoDB\Driver\Exception\SSLConnectionException
    3 q8 V7 s. \6 r6 N2 L# O
  11. MongoDB\Driver\Exception\UnexpectedValueException; v6 \7 R$ M7 J, @- [) m: V0 l- ]
  12. MongoDB\Driver\Exception\WriteException
复制代码

, F* i) s! k& t2 K+ q! ?2 g; t5 w6 l. K" D
游客,如果您要查看本帖隐藏内容请回复
  Y) f& S' c2 r5 Q, g+ S1 Y# D
点击查看全部$ [6 O8 R* N0 ]8 D" e

7 m( L8 r9 ]: s0 e1 s2 Y
, d# ]" I* e! A8 e2 N1 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:48 , Processed in 0.064410 second(s), 19 queries .

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