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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15365|回复: 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不支持以前的写法。
- P% H2 K- t) Z& J+ v1 L4 W
  {8 N# W. U8 i+ ^7 E2 e7 P' U下面用PHP7新的API总结一下:8 B. {! y. }" D1 `: W

, P5 [. s# l: I+ ~0 Q! r6 p% U, \一:CURD+ V: S$ f5 o7 p$ d; J& v1 i* y
2 M& F" I) m2 ?+ e" |5 p; g
1:链接. b- a# @7 r( Q6 V: k3 Q
0 A7 a; l% g$ v( s
  1. <?php
    $ a8 B, F% l8 B- ]# p7 {! o6 H
  2. //链接mongodb
    9 G& g4 O9 w' y' K3 V
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ' f: x5 \5 n* ]
  4. root 用户;123:密码;如果没有密码则不写
复制代码
' y- B. p, F3 ^) _7 U# ^6 U) J2 T
- B) C* e4 X& h' O8 k% t
2:查询
' u% L" n) O; y+ v1 _* |" @4 Z8 B7 i4 a8 v* d2 i' J% R0 T, R
  1. <?php
    & W9 u4 n8 q% Z  D4 v/ t

  2.   J6 e+ q& X$ T6 d# s
  3. //链接mongodb1 O% W0 H# b. G# ~2 Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    $ S; ?# P: l+ N

  5. , P; Q! I2 H5 B9 M, k- ]
  6. //查询
    ; j! }3 j$ u$ e6 L4 z/ t! F, B; `
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 v) g  w5 Y  E
  8. $options = [
    % G0 O6 s1 h- i7 m! Q$ d9 I
  9.    'projection' => ['_id' => 0], //不输出_id字段0 n2 p; U& d6 D; C- l& ~
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    + z: f# P% U6 ^. Y7 p" D
  11. ];  @4 ?) h4 f( @( T/ |
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求2 \5 c7 ^3 n  ?+ B) M" o$ g! H- }
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ' Z9 S# `& X# t4 @. i: B, N
  14. $ ~; O3 f; a. b' ]) Y9 P
  15. ) O% ]9 c/ l# k. H* ~0 I
  16. foreach ($list as $document) {2 e, |( J/ V$ j: l/ p% z
  17.     print_r($document);
    + y) ]/ \4 r. n- |9 w" r4 e6 L
  18. }
复制代码

0 t1 u& I1 G& u查询更多条件使用方法,参考第二节mongodb基本命令,查询
; x2 p1 G( |6 {5 ?5 u
+ s! K: q, n$ b# W  r6 V/ K2 d3:添加
+ M) }+ s7 ?8 O( V. ]8 R  ?, a7 f3 r
  1. <?php1 Z% y" D, t5 U( `& e4 C% N: g7 \

  2. ; B8 K( Y/ v; r$ v: v
  3. //链接mongodb
    9 r; M& P6 C, H; o' I- e( X
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( {7 e. M& v9 q  P* x% j

  5. & g! e& X6 b% A+ S2 \. U, `7 B
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " _% i& F8 i: \/ l; c* V- ^
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    8 i7 W% _* t5 K5 ^2 N  ^' I" B
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    9 ]* e( Y% @! W3 t+ y
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);9 Z& M% Y5 X/ r8 L
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

1 G; i4 j9 ^0 d5 m4:修改
( w2 @5 H( e) p) j4 _% Q. }  x
/ {, U: f# E1 ]# U, W- {
  1. <?php4 T; G! s2 B+ Z: P( V
  2.   Z9 _+ ]6 c( J( v& _
  3. //链接mongodb2 N) r2 z# J/ W1 C( n( O2 X6 I0 N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    0 Z# _' [$ ~9 w! S

  5.   p1 J1 N9 V7 l1 |  K
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" H$ O4 l# A& n* ?- ?8 j+ q* F/ i5 }
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # g+ Q" G) c7 ^3 v6 {, _% T# j
  8. $bulk->update(
    ! q) ]+ Q2 D, t. _- a
  9.         ['user_id' => 2],8 t: g/ u9 C% ?2 ]" D8 |; l
  10.         ['$set'=>['real_name'=>'中国国']
    ; }/ N3 w5 P. J) l' H; J3 Z' P
  11. ]);
    ! k4 R0 v$ q- }" h6 t6 O2 I
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,6 C5 Q: B+ Q& ?
  13. //1:字段不存在会添加一个字段;
    1 X/ D  \+ q2 R. k& @
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ) v+ Q$ P- s0 X/ N5 z6 G) w$ ~
  15. 0 d. y( W  ~( U$ T5 U2 h$ @' P
  16. 5 h: d# F* T" _
  17. //如果条件不存在不新增加,可以通过设置upsert- ]+ v. s& ~  b6 |
  18. //db.collectionName.update(query, obj, upsert, multi);
    4 f  J4 p' V1 V1 R. ^; T; Y- J
  19.   h. ~+ I+ P/ N3 d9 S9 [
  20. $bulk->update($ l; F4 `4 _7 m! K
  21.         ['user_id' => 5],
      d% _' z# }7 Q4 w( c
  22.         [  [# ~2 {. ?: e9 M8 e9 i
  23.                 '$set'=>['fff'=>'中国国']' z/ w. [9 o+ }
  24.         ],. W$ f2 e) ~! E' ]" V0 M$ _
  25.         ['multi' => true, 'upsert' => false] 6 k$ M2 Y/ c2 k
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    # U! V5 h4 v" S
  27.         //upsert为 treu:表示不存在就新增
    & e* F0 n2 d' e7 [- R
  28. );, s9 M+ P' w  H& E4 v
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: ]- R% U. ]  i6 F% k6 x

: n3 L% V9 o6 J& d. x8 Rordered 设置
- Y$ y9 j: C  |' ?' d& V( v+ h, S- ^8 Z) R/ @! m* I) o
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
. D$ }; e7 ~% Q7 ]6 l2 C" s* X2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
" j! U( Y9 m( j$ z& K( O
  j" J/ Y1 T' k5 D. ]5:删除4 i! n. j+ A+ q& J& U$ t. _
2 T9 c+ F, K5 Y0 Q8 h3 e4 n) ]
  1. <?php1 R# }) p% S3 ~* }

  2. ! I1 L( V7 ?8 x
  3. //链接mongodb
    - i% P5 Q! e: ]6 N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& f. Z2 t( Q$ V

  5. ) |* n$ n- T2 u6 {1 ~
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 w6 f! b# `/ _& S3 ~/ i( v
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ W9 ~8 Y. I4 }+ C* J2 U  B
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    + [% O; V: @* ?0 c
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    % P9 W; T) L4 o8 n; O
  10. delete还可以通过limit设置不同删除方式
    " g5 `* l6 _) k: t7 r7 [! o  r
  11. , _3 d; y/ A- _; R
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据  S- I+ r! z8 @) e# a% L' U
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

  N$ L# C/ {2 e9 D2 t
8 v9 Q% `  g+ `6:捕获异常
# F7 ^( f& j" M, l+ Y5 ?+ E: X6 S& e$ O* Z7 Z1 V
  1. MongoDB\Driver\Exception\AuthenticationException
    / [, Y% g; s) M% L$ q( e) T# S
  2. MongoDB\Driver\Exception\BulkWriteException
    + p4 b9 `2 c2 |6 D
  3. MongoDB\Driver\Exception\ConnectionException
    ; k4 h- N$ F# u- R1 G: x
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    0 W' f$ @# n2 ~
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口# c" G) B5 u9 T/ z2 T+ M* D
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' ], K; r# H3 Q6 i0 g
  7. MongoDB\Driver\Exception\InvalidArgumentException
    $ F; O8 N( H( H" B- Z; A
  8. MongoDB\Driver\Exception\LogicException5 }) Y$ F7 F( `4 t4 s1 }
  9. MongoDB\Driver\Exception\RuntimeException
    ) w, k5 l4 N: G, g  O$ o; k9 U6 M
  10. MongoDB\Driver\Exception\SSLConnectionException
    7 z, g! G1 B( `2 f% b8 \" E+ v
  11. MongoDB\Driver\Exception\UnexpectedValueException* l5 W" m, u* A& I" W0 C7 Y
  12. MongoDB\Driver\Exception\WriteException
复制代码
: u0 `; X1 p. W) S1 k$ l2 \

! y6 [+ v1 f  `" m1 K
游客,如果您要查看本帖隐藏内容请回复
) P" j: O" ?$ h3 i2 d6 w" p
点击查看全部
* N4 I4 L; R- ^  H: J. Z) F% w2 o0 ^# A* P8 j; @1 M% A
* ]- l# y" I4 r- L. Q) g$ I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 12:40 , Processed in 0.051706 second(s), 20 queries .

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