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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15364|回复: 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 @# I/ A' m: O3 f$ z$ A( g; T
  E, ~( @' N+ o) i! q
下面用PHP7新的API总结一下:
7 M# j4 C: l- O4 E. h
6 `$ M8 f) d1 e一:CURD+ G+ X. U: q0 F- E4 y. o

- c3 p1 c0 M; q! Q1:链接
$ b3 M, I/ p1 e7 x) @# @# o3 y/ A( Y0 R0 o' w; S& u/ g
  1. <?php
    / \4 M& B" N4 \6 f) U: V% A0 G
  2. //链接mongodb4 T5 ]+ c% l6 y* \: {/ c; p
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ e) I7 G! v$ h$ @4 c
  4. root 用户;123:密码;如果没有密码则不写
复制代码
: s" m/ g: F! o  f

; t+ d  P% V$ ]3 [7 r# N$ q; n2 a2:查询
& }2 H# x. a" c; }% V; m9 ]% K6 M3 v, \& K7 e% z3 g3 |
  1. <?php$ A9 j/ g& f. |/ P( E0 E% G) Y
  2. 1 r. }, u# J3 k( m% M! }- H
  3. //链接mongodb
    5 M6 o0 B- h+ ~. T' S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & p( R2 h, o# c1 T
  5. * u. c! Y# }- ^) Y% Y3 l
  6. //查询2 T5 t! r  ~0 y: |
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    . N6 b' _1 ?. [" H" ^  O5 s
  8. $options = [
    % F: E& L. `2 ]. T: ^  o2 }
  9.    'projection' => ['_id' => 0], //不输出_id字段
    . `) w# ^1 a( D. ^% }
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" N& K% f) c- ~% T+ j- u) t7 y
  11. ];
    . v; e5 _7 ^& u$ z! K# p
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求5 v; X9 K* q6 v! R
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
      L1 M, U1 h% X/ _& k
  14. * z8 ^  |4 D: K" S9 J

  15. 6 e5 D3 t( O2 Y1 X3 e
  16. foreach ($list as $document) {2 Q+ i& j& u- c, _: J
  17.     print_r($document); , n8 ~/ _# P: X6 S
  18. }
复制代码
8 ^! n. |$ S  V( ]8 {9 Q5 y% ?9 r/ I
查询更多条件使用方法,参考第二节mongodb基本命令,查询
# {% d0 O2 z6 e, ^( [. N$ J4 t" {6 B: F
3:添加( q) q9 y7 |2 g* |2 ?4 K

- m. N1 Y" n- D
  1. <?php3 K& _# i0 L. k4 S2 B
  2. ' X$ t& V, U# H" q
  3. //链接mongodb& p, B5 U* k  x3 U, F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, ]9 A4 C9 A: |
  5. 4 y' Y( n) y6 d) i
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% M5 r/ Z+ X# [
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    / Z4 z; G0 U5 Z1 H; T! F8 i
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    / f* [  T/ q7 U( N5 }& T3 q
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    9 v! E4 x6 n6 ~
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

4 E5 L( o+ Z% y' Z1 K8 t5 e/ @6 {4:修改0 U; f8 ~  ]+ z6 M8 L: J( ~+ z
  X6 `" p( O9 [+ Y0 Z. o
  1. <?php
      J" J6 R$ e6 ^! M* x9 @
  2. 0 |/ J1 P6 ~$ x- n9 J
  3. //链接mongodb% `* N) t; j  |; L0 j7 a) h+ y' n
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  P: {& p9 D2 ]8 Y  }* |7 S: t
  5. " A0 h4 u. P& O& u- }* [7 ]
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% l3 r2 ]3 Y( D" y: L
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 I0 D% n8 |( u3 M
  8. $bulk->update(, L4 d; Z0 N9 R2 ]$ e! b
  9.         ['user_id' => 2],
    ( B" i& L3 \, [9 ?
  10.         ['$set'=>['real_name'=>'中国国']
    : g5 O/ E2 G' |; a7 G& {8 J$ q
  11. ]);
    " v7 B, s! l" O5 Q
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ) v2 ^2 l; f2 \- m# K! I& u
  13. //1:字段不存在会添加一个字段;$ W3 a" Z2 f# ?1 A
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    ( u$ j7 x3 I5 I

  15. & X1 I0 p) U9 @3 ]& x5 T  w
  16. & w% A) X8 ~* y8 Z7 I
  17. //如果条件不存在不新增加,可以通过设置upsert
    1 m  b+ E5 C9 A  X
  18. //db.collectionName.update(query, obj, upsert, multi);) m7 a% U& m% \! X' D: D; f

  19. 2 t- ^5 L+ v# s1 b
  20. $bulk->update(7 t1 Y9 l$ u+ Z% w: s' Z" z
  21.         ['user_id' => 5],$ R" R: M" m  P6 i3 ?9 C
  22.         [* c2 V& m5 n" r5 h6 z/ I6 G5 |
  23.                 '$set'=>['fff'=>'中国国']* V7 w: |) a- o3 ]% o5 }
  24.         ],
    8 Z7 w1 [! ?. v; r1 ]
  25.         ['multi' => true, 'upsert' => false] : }" {* l1 l1 @4 u8 n
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    9 p3 C$ t! w5 l2 F
  27.         //upsert为 treu:表示不存在就新增
      X' y" g3 Z( t5 e' n
  28. );; d0 ^9 q3 q, j3 y
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

0 B4 g- Z0 }) I9 T' u7 O: K5 z) ^: p# G; C+ w5 _/ F7 ~7 M/ ?4 V
ordered 设置
) S6 \3 S3 y0 j8 v/ r, T" Y1 l( V( r# c3 p6 x6 t5 c2 u* Q* ?- U
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
9 P8 {! d( L" s4 B3 K2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: J& l( a4 _1 Z* y0 x
- J5 U8 e3 Q- z& G4 ]$ C# \7 W8 e
5:删除; `$ w7 z: Q5 F0 x

! b$ m! s3 w1 D  S5 X
  1. <?php
    9 Y0 a0 @4 l- V

  2. . R% {3 c& K( {
  3. //链接mongodb
    * a( I/ J" m' N3 V3 C* g
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! o# b) f/ l  P# h$ {2 I1 Y0 W- O

  5. 4 F4 R7 k% c, @5 R; y( ?
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    0 L6 |8 {' b7 }) S- W3 f3 F
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    2 D: \8 d" ~$ k1 [# Z
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段3 u- |" o9 e, [+ N7 a
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    2 a! s  @1 k3 Z
  10. delete还可以通过limit设置不同删除方式
    ( P" [7 n" ?3 s0 I" }- V% N5 |
  11. 2 d3 _  b/ t% Y3 p! t
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) L4 U. |$ k! p1 N" Z7 V
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* G8 z5 x% x, e7 J& Q  e; Z7 \' F/ u- E/ H
6:捕获异常! l$ m/ Z/ W* }6 D* \; _$ z

2 C3 @% N9 L$ k4 M" X
  1. MongoDB\Driver\Exception\AuthenticationException0 p1 I5 F5 d! p! `8 |
  2. MongoDB\Driver\Exception\BulkWriteException
    ' @  l0 B" Z& U* I+ Z5 F, O" M
  3. MongoDB\Driver\Exception\ConnectionException
    # o0 s( }. r3 L- D* s3 d0 s" A) S
  4. MongoDB\Driver\Exception\ConnectionTimeoutException9 g0 Q/ w$ i) ^0 h& r  g& z
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口$ M& K+ I2 w$ k* p' X4 A
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ) _% q5 d. k5 `
  7. MongoDB\Driver\Exception\InvalidArgumentException4 Z- B( i: H1 h) X
  8. MongoDB\Driver\Exception\LogicException+ H$ p1 a: ^: A! {; N; ?
  9. MongoDB\Driver\Exception\RuntimeException
    - s1 s. {: ^' [) N& X1 p
  10. MongoDB\Driver\Exception\SSLConnectionException( o0 H$ o! U- K8 f, V, n
  11. MongoDB\Driver\Exception\UnexpectedValueException  V; W/ x2 g7 P* S8 q# j
  12. MongoDB\Driver\Exception\WriteException
复制代码

: P9 ~8 Z* i2 L; B- ]8 m- ^: D) ]) C# N; h3 k- a
游客,如果您要查看本帖隐藏内容请回复

# b- v  ~' j" t. I点击查看全部$ e, S/ S' @7 |. W: a/ k2 k2 G3 f

! ^# s7 o0 H7 [4 {* z9 c# Q- y; z) g& a: v4 T* m/ r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 12:39 , Processed in 0.047211 second(s), 19 queries .

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