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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11537|回复: 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不支持以前的写法。* \7 F9 T& x9 M2 i' D
: C6 t- Q3 C+ \* J0 K
下面用PHP7新的API总结一下:- L4 N( [5 |0 p

4 s" W8 `# Q) o一:CURD  ^1 i$ v$ f7 h) K

7 H( i4 P2 ]8 s& N: ?  y0 f1:链接
1 J# a* n6 d$ A6 V( z0 f5 {) A- w3 i. Y/ H5 N7 [
  1. <?php
    7 G9 O7 G6 q$ s
  2. //链接mongodb" \# ], j- `* K( o
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');7 |& D+ o, m& L  w3 I" k9 o
  4. root 用户;123:密码;如果没有密码则不写
复制代码

4 J; f! ?/ v' d7 S/ ^  Z. S6 u" P* L8 K1 ~& m8 \4 f2 N
2:查询; B' n/ \. _5 P/ W9 }2 g+ q
$ N- K% v' n4 T4 H
  1. <?php
      V: A9 |: b0 {

  2. 3 ~& ]2 z+ a/ c( q- b/ B+ @7 J
  3. //链接mongodb1 A9 l0 b! _7 `% M4 H9 u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- H0 s* K: ~% M4 D: o: a

  5. ! @/ U. k3 G# y" ^1 t: u
  6. //查询) D  h& p$ _- H  R2 |7 b7 Y$ j
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0( W( q6 I$ A- o& e5 V- A, O; V
  8. $options = [
    7 c' w) n( k$ ~) z% S% i
  9.    'projection' => ['_id' => 0], //不输出_id字段, a5 y9 n# v. S' }5 x
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序$ `3 a! t7 G: q6 L& X- u/ E' B9 ?1 W
  11. ];
    % Q) u, F9 x0 t$ s# W' F
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ( P; }( T, E- b" Q
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # r% u5 O8 P( u; Y; j& x
  14. % D6 b" m$ ?* g6 j3 n

  15. 6 L  F4 C7 G: H8 M2 V( }! l' y5 d
  16. foreach ($list as $document) {
    * v5 e8 `1 Z# h6 n9 ~1 V" f+ F
  17.     print_r($document); $ X. `( O# ?+ n& T- H6 R
  18. }
复制代码
! D7 i0 H& e, l
查询更多条件使用方法,参考第二节mongodb基本命令,查询
- M. R( f" y" v0 F& Q% [" ~1 r. j
7 @, f7 b" q: H7 ?- Q8 j: J$ y3:添加; c5 ?+ Y4 q, E9 r# u
- L1 T3 G, P. A8 v
  1. <?php0 d3 ^$ b8 n& \
  2.   Q1 a# L+ S0 [
  3. //链接mongodb, O( a, b" x2 s) }" w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 {% o  U- H- N/ q
  5. 2 H- x* d) c1 F( V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ _& K! |2 M7 Q. E9 J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    : Q' W% e7 b' Y# R% o7 z% k. c+ P
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);) b* E" n% K5 Q, h+ S
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);- m& l  b8 a- B+ e
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: p7 j9 _/ t/ J4:修改
: K' `2 y. j. l& T( ?2 r9 d
" m5 T! d5 K$ ~3 c$ b
  1. <?php
    ( V9 L0 X5 @1 f8 w. H. }" L" b

  2. 7 G; o! c' @' Z' E! @2 Y$ `" v
  3. //链接mongodb: a( \% J9 c- y+ f# ^' M/ s* W$ k5 g
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ M% ?+ q& I; i" [  x$ g2 i
  5. 0 ]2 O# a* M" T3 b( Y6 ^- e  @) z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 r2 E' F# D/ H$ L# e+ k
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! |* ^& \& r1 f5 `. y
  8. $bulk->update(7 |# }& g: A1 {- t9 q3 R
  9.         ['user_id' => 2],
    % M1 _4 E$ X# W5 _* t- d8 O& j& R7 R
  10.         ['$set'=>['real_name'=>'中国国']
    # f& j5 u5 K- i  W
  11. ]); ! A1 g; j1 G5 `! j
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    1 v/ C7 R' N7 O  {' f: b
  13. //1:字段不存在会添加一个字段;( k6 G6 _1 z) Z7 {
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    1 V% ?& Q2 U. j

  15. 6 `: ^* N+ y7 y5 h  [' Y
  16. . O, @) B+ Q, r$ q& d( p4 n
  17. //如果条件不存在不新增加,可以通过设置upsert% M, z+ X4 V2 A* C
  18. //db.collectionName.update(query, obj, upsert, multi);8 U! p  I" j+ o1 B# }. U( L

  19. 0 }/ p# ?+ z3 e1 Y9 o" k
  20. $bulk->update(2 o' z( {5 k# D" B2 v
  21.         ['user_id' => 5],
    . {. V/ I! H& @9 B1 S
  22.         [
    6 }2 p9 {$ O! Y) M
  23.                 '$set'=>['fff'=>'中国国']$ H8 ]; H: K' o( ^4 n. {- W5 ]
  24.         ],+ r! I. a3 `$ e0 C6 L
  25.         ['multi' => true, 'upsert' => false]
    ; m% h9 k- ~/ o3 Z+ O; n8 h- g
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    6 e+ H0 T3 _* \* G
  27.         //upsert为 treu:表示不存在就新增
    " @0 U- J/ G7 u
  28. );
    " o* V* ]; B5 j5 S9 c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
5 c1 y. V6 e/ N; X
( K( [8 h0 v% C
ordered 设置5 p3 {1 F  T3 O
$ }0 D, `6 @3 J* q
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。0 T2 B  C: u) Y
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行  {" A, x) f! o$ z: K
" b' C9 @, v  P' ?
5:删除
1 B) J  [3 L: [; `8 |6 F% L2 I/ V  i* R3 b
  1. <?php
    0 V8 x1 ]) `! o' H6 U$ o

  2. 4 L8 B" z; \8 @' T8 `0 H! q7 ~* g+ Q
  3. //链接mongodb, _, |! I4 C1 u% P+ _; s) B2 o  e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');- ~. {; h0 G' J9 F7 Y

  5. 7 s  h  `6 f; }7 o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' B/ `# j' P2 A/ r, c/ O' V* C
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ! ^# S# E& a  h6 c1 k( e  u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段  _0 J5 \* _0 G$ h6 R4 a+ Y
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ) i9 e4 i1 ^1 E. G* m; O5 N
  10. delete还可以通过limit设置不同删除方式# h* v3 ^; t) I* g
  11. : n) v( \5 F3 h) E4 ]6 {
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
      {- q2 X& @5 j0 C7 y% R
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* w  g8 I3 Y! u* T' D# d

9 t8 T& G1 g  A& ?* m3 S" G1 e6:捕获异常: w& M- S2 P6 R$ W7 b

& f0 A1 C: W3 n- U
  1. MongoDB\Driver\Exception\AuthenticationException( f& Y- q+ E! f) [+ _  }- m/ Q
  2. MongoDB\Driver\Exception\BulkWriteException4 m# i& V# X7 i; \, N
  3. MongoDB\Driver\Exception\ConnectionException! y5 D; r* ~$ f+ f: e5 y: A
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    7 U; P1 J( p+ I5 J
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口% Y8 Y+ x2 G# ^% W& L9 A
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    # y- h$ U/ x4 B- O7 U
  7. MongoDB\Driver\Exception\InvalidArgumentException0 U" i( T& E' _. E# ?9 z
  8. MongoDB\Driver\Exception\LogicException. i. ^5 _  i; B2 Z, w
  9. MongoDB\Driver\Exception\RuntimeException, \7 U7 F% [6 q8 i: F
  10. MongoDB\Driver\Exception\SSLConnectionException' V, R; V3 n+ a+ f3 Q
  11. MongoDB\Driver\Exception\UnexpectedValueException
    $ |& M. p6 ~& R: E5 ?
  12. MongoDB\Driver\Exception\WriteException
复制代码
& H5 |4 ~( B6 i  R! W+ L
6 w  c; X0 r* P1 E2 ~" I# ]
游客,如果您要查看本帖隐藏内容请回复
8 K) N  m5 m. U: M3 G, _; U; i
点击查看全部
, f. v3 [, S6 ^+ ~" A
! c9 J; P+ c( k2 Z8 P
; Z: l( {. d# |& x# D! A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 11:50 , Processed in 0.106313 second(s), 20 queries .

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