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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9599|回复: 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不支持以前的写法。+ X* V# \: H, D) x. F

' Z; {% p1 X5 e& j- h下面用PHP7新的API总结一下:
# _% j6 C$ K) |' m! G0 N/ X. Y; q$ |! n9 ~4 f! Z, p! Q
一:CURD" }* E" {7 E4 }0 L$ M' S3 W" f, h
8 ?  R" u* [9 F
1:链接
6 y7 Q9 r8 ]0 d+ V7 U3 P" [4 x. x& y. v3 q% a- e2 A6 `
  1. <?php
    8 l  K" J) C6 z, D
  2. //链接mongodb( d, Q* M4 `4 \3 }& i
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ' _# L9 r/ L3 [. S# ^4 E
  4. root 用户;123:密码;如果没有密码则不写
复制代码
. F! d* L. m8 A- a5 i2 v9 W

# g# x0 ]/ \0 N9 B! w1 m2:查询
# l2 P% N5 g! Q9 s& ?' x; Q' C8 d$ [
  1. <?php
    : s, w: O6 X: u& m1 l
  2. * J" I; @, h  ~: ]2 d1 S
  3. //链接mongodb
    & ?5 K8 A- l" t% w, \6 V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; T- }9 z' y. ?% T7 {0 u% A' A
  5. 1 I' |" r8 V+ W4 V* A
  6. //查询
    ) ]/ p$ s# `0 y6 Z: E: ^
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    6 @( k+ N6 L5 e, |) t' I* U
  8. $options = [3 n) Z/ R, {% v
  9.    'projection' => ['_id' => 0], //不输出_id字段
    2 N) H5 W- L3 P8 |. k
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序  q% t5 T1 z! O/ x2 z4 M
  11. ];
    4 }1 ]; }7 d0 a
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ; Y" S; B4 g& R4 `1 d6 ~
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    6 Q# K* s; S# J" t, A! s9 f* |2 U0 {
  14. $ W$ F' N; \0 w& T
  15. , i- R2 s8 X' }
  16. foreach ($list as $document) {( h7 U) ~2 @* S9 J
  17.     print_r($document);
    2 @7 x0 g! f2 X8 U6 L+ ^- `  q
  18. }
复制代码

; l0 O. O0 e' T( x" D& Y% F查询更多条件使用方法,参考第二节mongodb基本命令,查询& Q5 e% z) T3 Q: w
# M! T+ ?8 O4 w: s' ?
3:添加* S- R6 E8 c! Q$ S

1 L; S4 i$ _# X  u5 ^& x
  1. <?php
    7 h, w  t4 M1 z
  2. ' u% W$ p' |! \2 z3 a1 y+ m8 \# N( p
  3. //链接mongodb
    9 ^* v, f) C- E, Q4 t, S8 n1 t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    7 w1 x4 W( }+ ~1 ?
  5. 8 O- \0 r/ V0 s& d
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    $ B5 T! x, q2 \, h7 H: P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行# F: h: z9 m& `3 z+ `
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    3 C4 u' v/ m/ b6 p# N5 P/ C' V2 `9 Y+ M
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);7 H3 D+ [3 P% c
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

/ L4 R6 k  A7 ~; t9 q& L+ q4:修改( w7 s0 K# l. @. \

3 o6 w& n  ~3 k# M+ z7 M+ O
  1. <?php
    ) [) E+ D" F4 B* q
  2. % _3 ~: C* [$ \
  3. //链接mongodb
    8 U9 z# F, G3 y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 u5 w* r0 k& n9 D& r* ?
  5. : \% o7 s, H; o8 X. G
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + _4 {" Y5 K" k; M5 U, U
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行) B) N, O- E  d8 j( }
  8. $bulk->update(
    : f, _4 v: E) S! x' S8 t) H
  9.         ['user_id' => 2],
    - w3 b0 R; u' y1 ~
  10.         ['$set'=>['real_name'=>'中国国']
    4 g2 P5 x$ h6 V. E
  11. ]);
    , H8 R+ R' z. y( M
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,  g. j* q+ L1 t0 l: o6 l0 Q; J& q
  13. //1:字段不存在会添加一个字段;
    : o, o" g) D: g& s
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    5 Q- d, u4 N4 @

  15. 2 E, g3 O8 \/ \+ C- z5 v1 m; \

  16. ' h& g# `* e( f' U& r7 b& y$ y
  17. //如果条件不存在不新增加,可以通过设置upsert
    - o9 e2 f- Y6 S  H4 U% i
  18. //db.collectionName.update(query, obj, upsert, multi);* z& S. K( Q1 i5 O/ Q6 c

  19. # H3 p# l. r1 [
  20. $bulk->update(3 P8 X7 i' Y  I" o) {
  21.         ['user_id' => 5],
    2 R& d: u  k) J/ K
  22.         [
    , Z0 I' T( l7 h9 O* o
  23.                 '$set'=>['fff'=>'中国国']
    , L, |3 X# A6 t+ S& U( A
  24.         ],) B8 ^# R% ]3 Z- @# |
  25.         ['multi' => true, 'upsert' => false]
    4 t6 w( a/ Y% @6 b" X7 Q
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条+ q: T- l) w  Z
  27.         //upsert为 treu:表示不存在就新增6 o% c6 j0 g, k: s
  28. );
    ' y( e) p( L# h& c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
0 j' [3 l4 j; m$ Q

3 Z3 h% y0 w! X* B8 N/ ?ordered 设置& Y: Z+ R9 G$ z8 L5 \4 A# r; b
3 x; R- z1 p& s# ?
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
7 J, Q$ w% h0 u$ v4 ^4 i1 p. K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
) z! M& d: E* n+ q6 t, `' a* @1 X" R+ m" X
5:删除/ R: V" g# D/ O7 F/ `
: {& V8 i+ M3 T  ]5 Y  D
  1. <?php0 b# d+ x( s" m" A" D: t+ m
  2. + K: N8 W7 z6 J( N
  3. //链接mongodb
    2 X- F3 h# Z2 N( u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! m! s4 u4 Q9 ^  _1 d, X6 }

  5. ( _) u: q; B% e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* I0 Z& _4 x% S4 H: z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % `4 W2 A4 ]$ ^, U7 _
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    : E& w2 l- D7 d2 Z
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合% P- N. [2 p1 @0 \9 }! h
  10. delete还可以通过limit设置不同删除方式, w7 H3 o+ B% p" a6 k: b2 F

  11. 1 x, h* n1 G- Y9 ?4 |9 e
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) u, [0 Z8 K& J, N9 e: r
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

0 p/ g- T$ f( J5 {; N2 W8 ]+ C8 s$ D4 Y1 l
6:捕获异常" _! S7 x1 }1 G3 O" l1 N% |
8 z' t) f7 Y, w# T1 Y( y
  1. MongoDB\Driver\Exception\AuthenticationException
    8 g3 A% q0 p) W4 o5 _9 o
  2. MongoDB\Driver\Exception\BulkWriteException
    3 X) Y4 |& ]5 Q& I$ p4 t0 z' \
  3. MongoDB\Driver\Exception\ConnectionException5 J7 E) j, Q9 m* m( {% y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException+ d6 L/ I8 W; x- `3 f& m2 P
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    , u" g* P0 y: p3 Y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ' }/ z+ A& X4 f* t! q
  7. MongoDB\Driver\Exception\InvalidArgumentException! p. C! b, U6 Z# u; m* b8 C
  8. MongoDB\Driver\Exception\LogicException4 [9 d! ?" l6 a! L% c) p1 Z! y
  9. MongoDB\Driver\Exception\RuntimeException' J9 n- I' s2 h- g  ?) ]8 S/ K2 T
  10. MongoDB\Driver\Exception\SSLConnectionException
    - J1 f7 ]! o9 D/ D* U
  11. MongoDB\Driver\Exception\UnexpectedValueException
      R6 E6 w% w. N4 Q( a1 f6 E6 I% p! ^
  12. MongoDB\Driver\Exception\WriteException
复制代码

" I8 P8 k* d9 V
9 \2 Y5 x$ Z1 L) ?. v, r$ U
游客,如果您要查看本帖隐藏内容请回复

( J% G" s+ x8 A6 g点击查看全部
9 i2 _2 y8 z4 ]$ S+ w
. ?4 e8 y. Y4 K; X" b
9 n1 F1 h, D  _* d' ~" q$ t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-2 03:40 , Processed in 0.112761 second(s), 19 queries .

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