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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9507|回复: 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不支持以前的写法。6 V) P% H( q3 Z9 i5 ^& O- c" l
, `' i" k# n! h8 N; y$ w& _
下面用PHP7新的API总结一下:
. U( v7 f% C3 X8 W9 }
3 `7 j: v5 w9 p一:CURD
3 w9 o$ [- D' e: ]  \( M4 F
2 o3 K2 z6 M: B2 x6 V6 T0 e1:链接
) |  `' J! v% y2 P: p  G1 U# A) k8 T( o4 Z% y8 y4 t# ]& I
  1. <?php
    ' m; J5 j0 N: ?. ^* f/ B
  2. //链接mongodb6 `7 D7 _9 d: [9 v" v5 p) `$ M
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ' ~, N3 T- w, u. h4 r
  4. root 用户;123:密码;如果没有密码则不写
复制代码
3 b  ~7 F, U; l8 l2 m  a
0 s/ E% I" H0 N; p" X
2:查询8 t8 ?& b  J$ A7 _1 {! i

! L& M) d- x$ m4 h* }
  1. <?php9 |$ l. z' ~$ j9 }! Q" c' e
  2. 4 C- s% k0 w$ T' P
  3. //链接mongodb
    6 d. k( ^5 ?: t* F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 F  G8 ^0 O! R+ @. ?
  5. ( n% _/ Z0 g. T$ ?
  6. //查询4 I' g: U$ D; @; p5 `# s- E5 a
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0! N# \; B- j0 D* q* h& W" `4 s4 b
  8. $options = [, z0 x0 F, H2 K1 t
  9.    'projection' => ['_id' => 0], //不输出_id字段
    ( l' T. a; i2 m6 U. w2 j. q! t4 V* Q% m
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    - {2 G8 I$ t  }: H* C
  11. ];, n9 I, A. A5 `; n7 a
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 T- d5 b& j7 J7 n) ^: R
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合" r, Q* E$ Q; q4 f

  14.   X: o' J, w$ E9 N/ J' z7 ]

  15. # I' S" I' g2 g" b& c6 F
  16. foreach ($list as $document) {$ s: W' ]& w; W5 \. A) ?( z3 @
  17.     print_r($document);
    ' w. J( ], W, E7 J" ~
  18. }
复制代码
, t, N9 o, H. h- G, P$ s
查询更多条件使用方法,参考第二节mongodb基本命令,查询5 Z# t4 p& h- t8 L- F, ?. U. L" D$ c
  b3 P- ^5 A, t3 N7 v3 g/ i
3:添加
: Q+ k' h% k+ n* J& ^
5 m2 |  u' T) m0 ~( V, C: Y9 J
  1. <?php" T7 e4 D6 @/ r9 u% ?
  2. - c2 O! i' L! M8 c
  3. //链接mongodb
    * l" H2 i. o6 k: e- H8 K  o4 Y4 H" ]1 \- J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! S! z, q8 ^& y# u/ U
  5. ' ^4 e; \( G. h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 Y$ r+ \; k3 t/ ~2 y
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行0 i6 Y, W( n* X  N5 c5 \# L8 t
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);9 ?3 e6 Z; r0 L" O; F- N
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    + q. }3 _8 ~) o: d
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ T4 ]  `" D5 H! ^
4:修改/ Q2 c1 p/ ~8 d7 h/ {
+ w8 O9 ?: O% F" p& J
  1. <?php
    0 V) }( v: K* ^1 k4 T0 [. Z- n

  2. 4 N& d- y- r* p* {+ F+ j3 L
  3. //链接mongodb
    , N- c! S* }9 T* ?
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : j& h: q3 F. l% l

  5. + E+ E+ I# h, C- Y6 x
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 h$ p* C  n. g* s2 T% z2 e
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ J3 O' B  F: g
  8. $bulk->update(8 A" S( t0 w- \+ S, z5 f
  9.         ['user_id' => 2],3 `* I3 D1 b- N5 j; b6 k0 B# U
  10.         ['$set'=>['real_name'=>'中国国']4 Y0 `, T* P2 r7 g
  11. ]); , D2 A! a- Y' z! I% C. r& Y9 V
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    / V' C- P3 a! A3 ~
  13. //1:字段不存在会添加一个字段;
    9 K/ U5 Y9 \- x$ s. I7 |2 p/ i. v
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert: K% }4 h* H- a% i- P

  15. 6 O9 r0 M) D3 L( j

  16. . \8 C( w: O4 z- I% y6 J2 I
  17. //如果条件不存在不新增加,可以通过设置upsert
    9 g- |8 V6 ?4 t$ D7 K( v
  18. //db.collectionName.update(query, obj, upsert, multi);
    + V4 }$ O% e$ a! Y: ?$ z4 @- M  n" B

  19. : @8 w0 N' t; D  a& g5 I7 h0 G; U) R
  20. $bulk->update(4 r! A: ]2 w2 ^( O. o/ d- {
  21.         ['user_id' => 5],' @( V; M2 K8 f8 t: u
  22.         [
    - w3 p; n$ e' d7 Y
  23.                 '$set'=>['fff'=>'中国国']
    4 t! S1 j: Q3 a
  24.         ],6 I& L5 f+ q" m- M  N+ r! P. ]
  25.         ['multi' => true, 'upsert' => false]
    & `8 _0 m2 a  s3 u4 E) Z* y1 k& K
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    $ s, X: j+ J9 c9 ^
  27.         //upsert为 treu:表示不存在就新增
    % z6 \# |5 C' b
  28. );8 A- G2 _. w7 e* j& e
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
% B) \2 w7 P7 e6 S6 ]
* B/ ]7 x2 `- {; V# t( [* i
ordered 设置" A; A6 g- t  s$ B3 ?# N6 A

% W% U0 F7 D* `3 `' W1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: j8 }. F. b6 w# p! w: N
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
% _1 L' ~/ r% T6 R8 U0 K% ^( s
/ l9 O8 f6 P0 Q7 @& d5:删除" B, |4 g( }! h) n" z' _) X
0 `; g3 m, D( \4 `
  1. <?php
    - ^) X& X! D; L6 A

  2. 9 d( V8 d% p2 \2 h' B  ^( r9 O
  3. //链接mongodb+ }- {& f* v9 G
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , r3 @8 y; t, |3 G8 C
  5. ; J- O* X+ M" [9 T2 _% {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / G" v5 l& S& a& S1 S
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& u) c5 e2 c, G+ L7 g1 a
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段5 w% R2 E# V" v/ N: ]4 x5 c+ `: `
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    3 }- I5 Z) z( ~& |
  10. delete还可以通过limit设置不同删除方式
    3 e% K) Q( z/ h) P0 Y( L

  11. # V) V, N* O8 ?
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    7 z0 E& H& {7 e* \; k/ y6 Q2 `
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
$ l$ h5 |' ?2 G; F6 n* f- L
$ {# `3 k2 E2 r4 Z
6:捕获异常
' j& ?5 P- i! A+ \" H) c7 V
" L+ k  E0 x! e( Q6 v9 R$ Y3 ?
  1. MongoDB\Driver\Exception\AuthenticationException
    0 }" |% N' o# D, Y
  2. MongoDB\Driver\Exception\BulkWriteException9 Z. N- L. Z6 D" E
  3. MongoDB\Driver\Exception\ConnectionException. e0 E) V9 m! \  h1 t- d! Y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException0 N$ B# \0 X" v. h
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口& s( h) B+ ^' |" H5 S! n
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    3 h3 l6 q/ G- f3 k: N: D
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ) ~) b4 X- d1 a
  8. MongoDB\Driver\Exception\LogicException
    % C4 |1 b" s; |. B
  9. MongoDB\Driver\Exception\RuntimeException
    ' C) _) e2 Y( \+ S% A- h% h' J5 `
  10. MongoDB\Driver\Exception\SSLConnectionException, m) Q, @) K1 _! k
  11. MongoDB\Driver\Exception\UnexpectedValueException
    / @  j# S! Z7 a# u; c; M' ~4 b. N% E
  12. MongoDB\Driver\Exception\WriteException
复制代码

6 ?( @1 T  t9 q3 w9 n8 F, ^/ v# A# F) d  A% X, u
游客,如果您要查看本帖隐藏内容请回复

: s4 c( N/ b# f) r& p点击查看全部4 c9 T5 j3 e6 u$ j4 c4 {

' z- O6 I5 m1 L( n! x5 Z2 e5 L# _9 C7 k) h. R- Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-24 16:58 , Processed in 0.119592 second(s), 19 queries .

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