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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10737|回复: 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不支持以前的写法。
- q8 w1 j2 m( v0 {( g6 ~
2 W5 ]9 i! U; Z, o下面用PHP7新的API总结一下:/ {; ]  ^* g: ?5 y+ m0 p  l9 b

% E7 h! _8 j; u8 B" x" K一:CURD
: X5 F& q' z3 Y: b1 A9 e+ }
# I1 e. q0 W- v  }4 P6 F# r4 i/ |8 ~1:链接( }" z, m9 u2 a' D( Y2 [6 ?: b, |/ t7 q
5 N& I$ N6 N5 ~
  1. <?php
    ; P: b* l2 A3 F" `1 k& V# X2 E
  2. //链接mongodb
    % ~9 W$ ?( |" H( T
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');  x/ l; U0 ]( x4 f% J( k1 l6 G
  4. root 用户;123:密码;如果没有密码则不写
复制代码
+ c+ }" p6 ~- m" V

. l- I. M3 Q! a3 J' ?) i2:查询
( M( {6 ]# k- e# p8 L' c4 W0 Q0 v7 ]7 |. a! A4 C, R
  1. <?php
    8 r3 F. Z! k6 G) Q
  2. 9 k/ P- E  m/ V5 F. y1 H9 R
  3. //链接mongodb
    ; ~  ?2 w' b% g) O* S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / e, P1 V: u: o: }
  5. 7 d+ h& L; W! z. z: }  K! D" _6 p- \
  6. //查询: \) W2 ]9 \1 o; d; D& I
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    2 y% I1 U* B) W' `8 w( w" _
  8. $options = [( Y" Q" H, D& n/ H- J. ^4 B
  9.    'projection' => ['_id' => 0], //不输出_id字段
    0 V2 O7 a$ Q; \; O' G8 `8 `: F# Y$ q
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    * k8 r8 k" |. n* _* k
  11. ];; F+ b( c$ I" i; z
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    ! }. @" a/ E: z: f
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; S$ {1 X: ]: m0 G
  14. * b5 z. m* S! m1 ~- @

  15.   I; n0 c' F/ p$ u% }& A
  16. foreach ($list as $document) {
    9 T5 E* c- i6 b
  17.     print_r($document);
    " V+ H+ k0 T; P7 h3 \
  18. }
复制代码

( H/ W; E5 C2 W6 w+ Q查询更多条件使用方法,参考第二节mongodb基本命令,查询
: I' |% D* w% I8 Q; X# I' X+ a' d+ D3 g( b, Q9 A( m
3:添加! }1 h8 S) |& U( J: ?9 u" ]

" D* T. ^# {1 P% I: |6 [5 d$ w
  1. <?php7 L! q# J4 U- o% R; B# [. E" W0 m

  2.   P" l$ c6 [& v5 z
  3. //链接mongodb$ e, ]! U8 N8 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    0 X, ]9 D2 W! A3 g8 ]: b
  5. ! W, K! K7 u  e4 ^1 }, y8 f' C
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! ?( x0 O( J% l( k5 [
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 F3 i1 H0 `9 X, J6 o3 k8 G# j% G, |
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
      l" ^3 I' U6 d& f4 s
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);! ~9 J# [' G( Y, i; T9 B
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ p7 r( x- g; \" ?4 Q: R0 Z. D4:修改0 `6 r  [- a# u4 |9 Q, {. g
2 R1 ?0 Z- F- A7 D# f
  1. <?php* @1 Y' O3 @2 `  g
  2. # k" R% |4 L) c
  3. //链接mongodb
    9 N# ?) w+ A( u+ ^3 d8 I" {) C: y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* j: \0 g1 k) t- H/ k  {+ w- W$ Q. a! h
  5. : O' f- y# Q7 ]
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行/ x' i; r/ ~6 o, `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! Z7 ~  p8 Q1 B
  8. $bulk->update(
    ; a8 u! c- e1 m. x" n; p, K
  9.         ['user_id' => 2],
    & D/ @: P' f8 Q8 M
  10.         ['$set'=>['real_name'=>'中国国']. w% q  V- l5 v( j
  11. ]); 6 i. J; P. q3 L3 F1 z2 I
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    : \/ W% a) B* m- j
  13. //1:字段不存在会添加一个字段;" l0 y# V' Y9 B5 n6 J' _! F
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    8 B7 _% x% u% T) F" e+ s+ j

  15. / I5 ?& E$ U6 S! a  x+ v5 ~/ U
  16. 5 e, x: r- _9 Z. M" D
  17. //如果条件不存在不新增加,可以通过设置upsert0 N9 ]9 ?' e$ l+ G
  18. //db.collectionName.update(query, obj, upsert, multi);) H, V& U7 w1 [2 E* A* }$ o

  19. / W0 V) L( p) M. b8 R8 ~1 K+ ?
  20. $bulk->update(
    + ^- L. v# H& \
  21.         ['user_id' => 5],) D2 n: g% j, }4 f  `
  22.         [
    . ?% Q/ q* Q7 q$ n2 B" _! q
  23.                 '$set'=>['fff'=>'中国国']
    0 b: S; |% q* ^. |% v0 p' P
  24.         ],
    # s3 P$ Z7 h  s0 T
  25.         ['multi' => true, 'upsert' => false] $ s) B3 R# Q' e2 i: C/ v+ n8 d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条; p; I4 P3 R9 V; ]- e6 K0 W
  27.         //upsert为 treu:表示不存在就新增8 i% k% U+ K) Z
  28. );, M* P, V) t  J, D
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

. u7 r* E: I- |
8 g2 j: y8 P1 I% Bordered 设置4 G% y# M5 i9 @( |4 t& M* w/ Y1 p
) B( o% ?7 S8 @5 W
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。; }" ?# z% B. Z$ ], h
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 X' y* M' ]! J+ i$ T& j
' u9 |2 }$ y6 a3 \; w2 ]5:删除# w, j9 B" l, t8 S8 H

! H8 w& T! t- {1 U& X6 P
  1. <?php% M; f. u7 D3 ~% j' P

  2. 4 g3 {$ i9 T0 N
  3. //链接mongodb& e9 r' Z+ A) S% s3 M) n* Z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' S; m% j# x. S5 [5 r
  5. 4 b# Z0 N+ B' E" l1 o- a# H) e* e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ) Q) ]: s* k  ]
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # ?4 v+ z0 W6 h# E1 l' p
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段! d4 }# m2 m4 m+ C2 l3 Q7 E
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合0 q4 h5 V2 D+ s0 y2 U2 h' v0 u
  10. delete还可以通过limit设置不同删除方式
    7 v) c$ r4 T  M  F/ L
  11. 5 O2 f7 e# F) @" I8 e
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据  j) m9 I) c) ?
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
; P' e$ a8 U( l& O

, q2 w0 u0 ?# u8 _: ]  D8 q: m$ l5 Q6:捕获异常
1 W$ |$ t% Y: b- f/ U  s
. b9 K* S5 P. [3 T4 y. I: m3 y+ M9 |1 K
  1. MongoDB\Driver\Exception\AuthenticationException5 A7 n- M' R5 [5 T# q+ F! R
  2. MongoDB\Driver\Exception\BulkWriteException6 p( T, ^$ ~. j) s, P! i% u* y8 V0 P
  3. MongoDB\Driver\Exception\ConnectionException
    ( y, d  i) O) o& z' o
  4. MongoDB\Driver\Exception\ConnectionTimeoutException+ p; X" |( y5 s4 {1 W6 i
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    2 `6 |" Y" g& Q7 O# y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException( H! `8 l1 |$ b: g5 [: C
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ) Y7 A+ [& u( b1 d7 J. @) N- i
  8. MongoDB\Driver\Exception\LogicException1 S3 B: p- P& E0 y% Q, A% D
  9. MongoDB\Driver\Exception\RuntimeException
    5 J7 I6 V0 W8 U$ l" L( N" n! F
  10. MongoDB\Driver\Exception\SSLConnectionException
    6 H- n$ R6 A- o* L8 `: P: d4 p" N. L! J
  11. MongoDB\Driver\Exception\UnexpectedValueException$ b( Q% _5 b! ]: W9 q7 s
  12. MongoDB\Driver\Exception\WriteException
复制代码

/ P! b7 h! I3 {5 U7 J" C8 M/ C2 M0 e8 I! D: G* g4 K
游客,如果您要查看本帖隐藏内容请回复
  w  @5 g! n1 n/ Q
点击查看全部
+ Q: X0 y$ Y; i3 c% W* q& J
; P/ B& |1 c3 N% m" p; ^9 K$ s6 g! r( L! ^+ Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-17 04:08 , Processed in 0.145808 second(s), 20 queries .

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