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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11544|回复: 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 y8 T; J& V% r+ A) P6 w. K* k5 d: n' j
下面用PHP7新的API总结一下:& Q; s$ }6 r7 ~- {
, K4 |! @; f, E, @& L9 ]5 ^" p
一:CURD
" g/ `* O8 D8 `0 E, p1 P6 k3 X( {" f2 V: B* R
1:链接6 T5 r  e( {8 \+ T! v

1 |+ u: g& W' W# U
  1. <?php
    0 M  Z& T& t, f. s
  2. //链接mongodb; m$ U  j3 n9 e' s: ^
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');; O0 n% f9 D/ W! j
  4. root 用户;123:密码;如果没有密码则不写
复制代码
# H& n0 M1 M- f3 f
' J* V! \( M$ f+ g
2:查询
) e* ^" t9 E3 d- Y) s% D& v% }) N
' `  x; c: s2 H* I) ]' D' j' Y  i
  1. <?php# G* Z/ I; r$ [/ f+ E! b

  2. * @" R5 J+ g6 _7 X
  3. //链接mongodb6 r7 g2 }; Z5 P; s0 Q9 `+ @
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    , W, x  f7 O& k  \/ M1 E0 P; K. ?

  5. % I. d7 c9 K! U0 N! g
  6. //查询! s. P# X! H' @! b* w" F
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0# e2 f4 f( f2 M+ F) G; m
  8. $options = [
      E- d: P7 v9 I6 Q, Q
  9.    'projection' => ['_id' => 0], //不输出_id字段0 j- F0 \. w( D: e
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序" t" R7 @/ y6 t% e- {. `$ ?  _
  11. ];+ q$ y# D# `, b6 o: S
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 a: W6 i! j* S3 V) A' }# r1 @
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    1 a4 ^, j6 k; v% G

  14. : E! _9 R' f$ q
  15. 6 D- o: h& ~; ?" H' j1 _' ]6 J
  16. foreach ($list as $document) {) g3 K( t0 m% `7 u* u: n
  17.     print_r($document);
    5 e3 F' E9 b, G0 t$ }/ N$ ?  {9 Y
  18. }
复制代码
6 L. W0 U. P% B& U/ S# T' y
查询更多条件使用方法,参考第二节mongodb基本命令,查询- Q' E% H( J3 |" l* l
; p$ h$ u  e0 Y4 @8 z% t. ]
3:添加/ B* F5 Y, k5 B1 u, S( @7 ]! U' m
: X- [; n) }: @$ E& ]
  1. <?php
    8 H: s% l% p9 F5 K
  2.   ~8 U# ?0 y' g  B; f% z
  3. //链接mongodb  K% [8 r) k  I: d/ Y" b+ T  k# A6 ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');4 A# e7 ~) o& }# E% @/ f( X
  5. 2 r4 S& b5 ?4 Q: |! J6 B/ b
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  A" [$ K) E9 t0 |; a- w7 c
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% ^: M" W$ b3 x6 \  h% e* \
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    , Q' G- Z: t8 X
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. p5 R$ t/ s) c) h
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
( g2 }# ?" F; k
4:修改
; \  I4 M# U. o# ~) b' n0 y/ V4 s
8 Y7 ~! F% u5 c3 Y, i
  1. <?php
    3 |! W- C+ @! c

  2. " J  N; ?3 L  Y5 t& X7 {4 z
  3. //链接mongodb
    # g% o9 }/ e# e2 Z9 H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! w1 U) C* v. |8 J
  5. 3 s  f" e0 _7 y9 }# n& o
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 {) C4 O- z. l. `3 b9 p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行; }0 v8 i1 V7 G  z2 @( x2 U( |
  8. $bulk->update(
    9 o2 }. B5 b) Z7 \: O% p3 m" n
  9.         ['user_id' => 2],: C5 `4 Q  _" d2 @# B
  10.         ['$set'=>['real_name'=>'中国国']
    * E% R" Z  ~4 G! B
  11. ]); 7 A) w0 v1 f1 E  v& U5 }2 h/ l
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    5 a: Y& w7 E% z$ H
  13. //1:字段不存在会添加一个字段;/ [& w" k" }% `2 s0 p( J- q  `
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    3 {. @% J  Z  o4 s! }4 L

  15. 8 s4 T2 _: w- H4 x& ]
  16. 2 u- Y' M+ x+ u8 x' j
  17. //如果条件不存在不新增加,可以通过设置upsert3 o6 R, g# }9 X
  18. //db.collectionName.update(query, obj, upsert, multi);3 }# X, N( `' ?
  19. ! I/ e2 _3 H& x' ]+ K/ S  w
  20. $bulk->update() \9 g7 l: S! @' ~. k
  21.         ['user_id' => 5],! }" d$ o4 @4 Q/ Z8 E& Q' N
  22.         [
    ) b4 ?. J) ?. V
  23.                 '$set'=>['fff'=>'中国国']
    ( u! ^2 x9 o, L8 M! G7 p0 ^
  24.         ],6 v) ]# Y; n5 q
  25.         ['multi' => true, 'upsert' => false] 0 `' i$ D2 r$ l/ b
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条6 k% \' F" o7 o% H8 q/ \% z5 C
  27.         //upsert为 treu:表示不存在就新增; E( c+ H0 k' J* G% a( ]% j
  28. );4 P2 \) J0 }) [
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 k8 G* r, R. K7 O4 F3 x

! `/ i+ _, [# h5 ]5 E3 \9 i" Oordered 设置
  e$ q7 E7 Q- i8 b/ ]- h
. L, T  K1 }, P  q  c) E) f1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 ]' V6 S9 J/ M* d" ~# I2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行$ {( h* [& l1 S, K! ^7 @, c
2 \9 B4 B$ L0 k( }4 c* S- Y8 A; o
5:删除% D9 u7 T8 W2 f# U; E2 G

' L/ v, b" j+ @5 }7 }6 \- l6 m
  1. <?php2 z. S% C8 I: ]1 K& D9 `8 m
  2. : F7 b1 s& Y1 q/ a% |0 w8 d
  3. //链接mongodb
    # E" f0 Z+ l) A- y7 b2 U6 v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');5 w5 Y: S) p) B  S5 g3 |: T  e. w
  5. " }; G; G7 g. {! |/ l& A) J: E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# V* h. J% \  o; {* D
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    7 ?  G  @, p& d4 b% A' A  N6 k
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段( W  b9 R0 o4 R( k0 I  D. D
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    # y# L- I5 ~) a
  10. delete还可以通过limit设置不同删除方式
    * t0 ]. ?! ?3 v

  11. , e3 d; ], c) }4 l" G: B7 Y  O
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    . h' E+ i4 K2 v! n; O
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
8 w* [* ~* I1 Z" v3 d, _

# R( Y, X6 d: X( k' \6:捕获异常
2 s) k& j7 j4 K* J+ {
8 l! Y7 P  b: [9 @6 i  ?6 t7 W
  1. MongoDB\Driver\Exception\AuthenticationException* c/ j2 T# B* n
  2. MongoDB\Driver\Exception\BulkWriteException1 b! i' ^, T7 ^* E
  3. MongoDB\Driver\Exception\ConnectionException
    # }0 p) g, b4 p
  4. MongoDB\Driver\Exception\ConnectionTimeoutException( H; D1 g. L7 v7 ]6 ?& W
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    * x# v3 `6 s- }1 R* ^: v. j8 U
  6. MongoDB\Driver\Exception\ExecutionTimeoutException! m6 E6 e) c& `% f" e6 T
  7. MongoDB\Driver\Exception\InvalidArgumentException. Y6 K% S# H) \
  8. MongoDB\Driver\Exception\LogicException
    ! ^$ N) k7 f+ G4 h" J; m/ U5 @
  9. MongoDB\Driver\Exception\RuntimeException; Q4 k6 G) J5 `6 c1 H: s, K
  10. MongoDB\Driver\Exception\SSLConnectionException4 G( {: k& N* C& w" P6 k
  11. MongoDB\Driver\Exception\UnexpectedValueException
    0 a' f2 H9 i7 Z& u8 F! M7 |
  12. MongoDB\Driver\Exception\WriteException
复制代码

( c3 E. J- I6 j5 t1 D1 ~! T, V3 v/ u% a! R9 W7 t9 l
游客,如果您要查看本帖隐藏内容请回复
+ `& j# m5 n. ?; u( ~
点击查看全部
8 y9 J3 X, [' w' D( P2 O
( l2 n1 Z7 s' r2 E/ z; z
' V; j% @: P# @! I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:05 , Processed in 0.128856 second(s), 20 queries .

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