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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15363|回复: 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不支持以前的写法。+ u" w: ]$ C  M. g
. M- k5 i7 Y: V4 m. x) \* c6 w
下面用PHP7新的API总结一下:2 ^4 Y* R/ u6 |4 o9 }) N8 Z
" C: K4 K9 ^' q5 A4 ~
一:CURD
" j. U' F7 F$ R$ b0 C' U
! R' U$ B/ n* }9 F( }1:链接
# d5 M# r2 k8 g* F) r, s
# G7 E4 K9 b& O- L/ P1 S
  1. <?php9 b% J9 h& Y$ R, k0 {# z. {4 p. b
  2. //链接mongodb
    * ]) ]2 q$ D4 x
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');+ |* @, l5 e( y8 S$ D) Q
  4. root 用户;123:密码;如果没有密码则不写
复制代码

  F' k0 s) x3 S& i# v* M
+ D$ ]/ g4 N9 c! r, [2:查询) N' K  g* h* o

7 @* i$ _$ q: L; K/ c) z# t, d. g5 A
  1. <?php
    1 o) x; z  d( q% `- j' h$ C
  2. 5 p& [6 [% N: O- Q: ]
  3. //链接mongodb
    7 u5 ]+ \- K$ q" X
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & G$ J. J9 r# Z7 @$ Q: r# R- u7 ]/ _
  5. 1 w, f1 |- s9 |, w" [6 ]
  6. //查询
    4 j2 ~6 Z7 q4 a+ `" p" p" _4 l
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    * F5 y3 Q+ q! e1 g: t
  8. $options = [) H5 ~# n! r  ?, e4 J" _' f
  9.    'projection' => ['_id' => 0], //不输出_id字段
    7 ]+ R3 S" t, v9 Q# g
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序: A; b( l1 f2 P9 h+ H. D
  11. ];9 C3 o% g: A- p' o6 o; i
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求- e9 P( P. @" p* C+ p# d9 o
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
      |1 X4 P7 G+ Q: t
  14. / A5 q. q$ L" c+ W: T
  15. ( i/ F' }% O' A# U! a! j3 K
  16. foreach ($list as $document) {
    9 ~3 O( \( @" C& `- w3 S7 g; Y
  17.     print_r($document); $ z* Q4 t2 V5 f" p) ?5 p$ {
  18. }
复制代码

0 d/ k, t3 H* [" v1 m查询更多条件使用方法,参考第二节mongodb基本命令,查询
" }! f2 V) E1 T# ~
' T; f  m0 x$ W, v8 P. U# p3:添加9 C0 I, y5 }8 R# ?+ D

$ |2 m- m; X6 m: [/ K/ J- E
  1. <?php4 G. \9 k, e7 H( I4 C
  2.   B- x  t  `6 y: L: o  a
  3. //链接mongodb
    3 {' q4 `! S4 e  c" I+ W1 t% Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' a$ S6 |) E9 g" e
  5. ( a$ V3 q+ g$ x# |6 K$ Y& V& g
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # y4 ~$ Z8 `' o  K! h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行4 V4 {+ |& J" g3 {+ B) S! e
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);* U9 X0 y6 c, d& H- J* _/ [- ^
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    , M+ X2 V- @3 A) n# t
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

1 Z2 Y# q5 {4 U" r4:修改
, F1 p9 `: q- b. d% \$ e" D) g) L# r  U2 r, }+ K! H3 ^5 R( b! ]
  1. <?php
    % Z! G% w( w- U/ t7 B8 A
  2. / b# L3 C% F9 ?/ z* X
  3. //链接mongodb  @- A" I+ @+ _4 X8 D
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! f0 s$ V' g$ h! B0 u8 m* O
  5. / A* Y2 v% K; J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 O/ Y8 o5 [: ?' W+ N7 U; t  c; x
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + l! b' L1 Y, r; y9 K. B# B+ x
  8. $bulk->update(
    , }) x5 V' L5 ~: q5 d) J
  9.         ['user_id' => 2],
    % _9 D/ d6 T% i2 P; _8 l  X
  10.         ['$set'=>['real_name'=>'中国国']  y5 ~, _8 o  |/ {) @
  11. ]);
    8 ]0 }( J# G, K) L  K8 P( z: r
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    3 \3 u. U3 j; E$ e" \; f; s
  13. //1:字段不存在会添加一个字段;8 t1 X0 K6 m7 [6 u; a" t
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    / v& Z9 ?" V  S' ?( ~% g, I, b

  15. " U. C3 y& A+ C. z4 U) g( m& Y9 U

  16. 3 }# h. A# Y8 z3 s$ r' }7 ~
  17. //如果条件不存在不新增加,可以通过设置upsert1 J1 }: }. _' _5 }7 j
  18. //db.collectionName.update(query, obj, upsert, multi);3 n: {5 [; B# j' w- D6 K

  19. 4 _. A" m, a% y6 \
  20. $bulk->update(8 O! j6 `  n1 J% b" s  e/ h
  21.         ['user_id' => 5],! u, {  D3 x% X1 n4 X
  22.         [9 V& S' x4 _# }5 g' w5 ~
  23.                 '$set'=>['fff'=>'中国国']% l% u) j2 Y0 E4 p2 j( c8 I
  24.         ],& n! L6 H+ ^& V5 P
  25.         ['multi' => true, 'upsert' => false]
    : w( D; B' c, O$ o$ D$ E/ M8 R  e
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    3 ^  q* ^% ~/ l
  27.         //upsert为 treu:表示不存在就新增
    ; F- ?6 d1 ~- b" O( k4 B
  28. );2 o; F/ R* J4 c0 t/ c
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

4 b) p4 s% }- E; G- h3 h
6 ^5 G% G0 w. \5 `( }7 \5 g' C- j: oordered 设置
+ e( d3 |% T. c
2 Z# `* l+ q9 O  g# ]+ [  P( S1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 T) k) K( g: v6 Z' W$ e
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行2 l# H" U7 @# Z7 v1 \- ?
; [  E1 H. v1 q: c% u6 j; ^/ H
5:删除
2 |- _5 M$ B4 l
1 q8 i. X1 L) Y! ^0 z: D
  1. <?php  z9 c$ M3 W) `" M9 E- m* c) [
  2. & E5 A. i: I  g& t  z
  3. //链接mongodb
      b" r# X9 f8 O/ T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& L" E4 z0 X) J$ y
  5. - g( X2 \3 q$ A4 D- k% d' v, N  X
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " l0 {1 f" Q6 X+ {
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( ^& G3 Z' a  d
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    / R: F2 b$ V5 r2 J
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    5 [* ^# L5 d. D8 n) E1 K, w! e
  10. delete还可以通过limit设置不同删除方式
    ( g8 t) s2 Y7 k/ B7 {) R7 p5 b

  11. 7 T* `9 K4 T2 u
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    - P$ o1 o, A. Z& J5 g0 \7 q* l
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

3 \& a& ]: a+ [5 m* T( o2 l* m" r8 `
6:捕获异常
/ H7 e  Q5 m- k, H1 e! c9 B# t
; u/ x0 L+ [) s: E
  1. MongoDB\Driver\Exception\AuthenticationException% b  q6 l9 n% r5 w. T. d0 k
  2. MongoDB\Driver\Exception\BulkWriteException
    + P8 H" I( ]* H
  3. MongoDB\Driver\Exception\ConnectionException
    3 p- [0 B. C2 B  }/ f& x4 C3 w- a
  4. MongoDB\Driver\Exception\ConnectionTimeoutException. D. ]/ p0 E$ C) B8 ^# j; Q4 k" p) |$ o
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    $ o1 l) s2 ?$ g3 D7 a  V) y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    % i# b0 n# k+ F
  7. MongoDB\Driver\Exception\InvalidArgumentException0 b6 ]6 m7 j; E6 p2 Y8 S+ m
  8. MongoDB\Driver\Exception\LogicException" W/ L, ^. s# n' j6 i2 n. p2 h
  9. MongoDB\Driver\Exception\RuntimeException
    - _8 e1 N! a3 g/ k. P# _
  10. MongoDB\Driver\Exception\SSLConnectionException
    3 a3 |, v( U' @& _$ ?3 a* g
  11. MongoDB\Driver\Exception\UnexpectedValueException
      U  Y% r/ Q: `- g- `5 u
  12. MongoDB\Driver\Exception\WriteException
复制代码

$ ?+ ]3 [* T$ h0 D, J
) o: B4 H, m  z6 V, _
游客,如果您要查看本帖隐藏内容请回复

, h' z0 _- D) V4 \* x. f4 G点击查看全部
( D5 l- h3 ]0 e. _0 |. _6 I# u1 O4 T
" ]' T4 k' ^$ G+ o, ^& _) q- }5 L2 s6 y. {: s' C- X3 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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