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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11533|回复: 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不支持以前的写法。& {! R1 X: F' y/ c$ n9 _. o
( ]/ y0 I' c# u% @
下面用PHP7新的API总结一下:3 n; G" p8 V" H3 R' l1 |. w4 X4 P. y* e

- m9 s% W) M' g* R- c. N+ R: N一:CURD
$ W, ?% l; |7 ]
: a% h. m4 D8 t1:链接
4 w: ^: `  p& p- W/ T/ A1 e/ a0 p) \; b0 S, u1 I- l3 W! F
  1. <?php9 e/ S6 u5 c0 Q$ F0 w
  2. //链接mongodb
    $ v- f) x+ l( {: U  \2 f# p
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');- c/ p$ ^! U( g& n6 o) e# Z: |1 Q
  4. root 用户;123:密码;如果没有密码则不写
复制代码
2 H3 W2 [; r5 |2 b
; M* w( m1 M6 a, B
2:查询
: d: V( n0 l9 W( M' l7 h  }5 [
3 s4 ?5 c% `5 T5 ~* X- z
  1. <?php7 T: q: m, q6 G$ ]+ ^( Z& y/ G
  2. " l$ ~6 t& s: z& V6 G8 ]
  3. //链接mongodb
      J' S( P) k# I9 y! g" t
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 _* L* u! d' a
  5. $ b' U' Y1 V8 y- x
  6. //查询
      Q+ y3 b" P+ f$ I* j8 t
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于01 H8 }( S$ p7 z1 J$ x, J5 N! p
  8. $options = [
    9 ]2 w7 P" i' K/ ?  W7 L0 D
  9.    'projection' => ['_id' => 0], //不输出_id字段, |8 ]  Z+ c6 a9 U9 x, L- q
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    9 W6 p* A2 I, j7 a
  11. ];
    & a1 J$ {: B# ?6 n, s
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求) ^5 L3 x8 z( l3 X4 E
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* _" M7 `3 ?% f

  14. / |( v6 }) K) l" E1 U( u/ _
  15. : O# Z- \* r0 x3 R9 d
  16. foreach ($list as $document) {
    4 k/ V+ z( [' v8 H
  17.     print_r($document);
    7 G7 j" V9 y2 c
  18. }
复制代码

+ U. s9 V; u2 D3 O! y! {7 t: m$ l查询更多条件使用方法,参考第二节mongodb基本命令,查询
- I' @( p5 @: Q$ a0 H
% k2 r0 U4 t: ]6 t3:添加
5 l0 j  O& b3 F5 J% y4 ], f
9 z/ @5 c  A' y: H# k+ @1 n. ~
  1. <?php! v, K+ ^& @  q( n- L/ i4 D

  2. # ^* y1 z6 P5 X, y( h
  3. //链接mongodb
    / v2 ^4 \. e; d3 u% A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');& \' x( r5 K3 \2 N5 F
  5. ! J( v* F0 [, p/ A/ h+ V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    2 B6 j0 }% i7 @  i- }: _
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    5 i, n$ _- ]$ K" T- Z
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    5 h2 h5 @9 i" Q) r) o) |$ }
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    , a& H! G% V# g4 ]4 `: t1 r* x
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ N) R7 {) t$ h0 |  b- c1 r4:修改% S6 T! ~! v$ y5 A1 j

3 L0 ?: R( x+ e( X# h8 r
  1. <?php
    ' }! z' R. h2 v8 D3 N, S  N5 k! f& q+ b
  2. 7 I7 A- M5 N6 I" V, b* G
  3. //链接mongodb/ Q  a2 g4 @: w3 {( n+ v) h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 q4 ~5 L% K! m: r/ F

  5. ' A  ]4 C) T& B& I8 d
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 s4 f9 m" j% F3 P  {9 y
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % u; N* Q. e+ g
  8. $bulk->update(
    & O: U' r2 l. U& f
  9.         ['user_id' => 2],- o8 O0 M8 T) V( M7 l
  10.         ['$set'=>['real_name'=>'中国国']
    2 K8 ~4 r; p* a
  11. ]);
    : I+ F% g' A* V+ u; F
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    1 D6 u, z8 T- ]6 H
  13. //1:字段不存在会添加一个字段;
    ) Q) j% T6 `9 h/ |# x; O' M
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert8 D- r, w6 X0 ^+ c) g

  15. , C6 T( i6 P, |3 J
  16. / [4 J2 z7 d1 n; p+ V* C
  17. //如果条件不存在不新增加,可以通过设置upsert  y: ]: L" h1 f0 L: v
  18. //db.collectionName.update(query, obj, upsert, multi);% [* Z% E( c$ @8 ^* b

  19. " g) |3 t# F+ c+ |* K8 q3 M' w2 d
  20. $bulk->update(
    2 f' H* F  c4 M8 q  n# z2 U8 x+ }
  21.         ['user_id' => 5],8 W$ p! W; ~! E/ ]
  22.         [" p. X) o# }6 |
  23.                 '$set'=>['fff'=>'中国国']
    , ~9 |, M' H& c) a9 \
  24.         ],
    2 `; s+ u. w! h7 I/ x: i
  25.         ['multi' => true, 'upsert' => false]
    ! ^9 G' M; r) a! |( E
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条- Q! p. g8 l# N
  27.         //upsert为 treu:表示不存在就新增
    . H+ n/ c# |1 t# A+ ?% `% X
  28. );9 n' F5 ~7 L5 Y
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 P* g5 t7 @9 N& U# O  o
/ q1 F. G& l+ i" s1 I! ~: w1 j# j
ordered 设置1 I8 |! ]* {' S4 q+ o/ z; i
* q( z  g; e- a! y  N# x% ]+ w
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
# d3 D% {$ J  ~0 B* B; H3 b2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
3 s' V1 P+ E! x/ L; q" N$ B( y  S& C" t, c0 }( j" `0 M5 s
5:删除
' e$ V8 _* J/ x& Q$ C& l' X/ A( v. S# O
  1. <?php
    ; K) m8 M5 [6 T+ s4 q1 I
  2. 3 T# a/ J5 o& Y" X+ I4 ~
  3. //链接mongodb
    * i! M) ]# s1 Z" v1 x% F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 _# t# w# [1 C$ J1 O- f

  5.   \% e# r4 C* a6 w, M
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# p! U% d4 q9 u6 W% z& K
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ' L( t7 h2 G9 j, K7 y& I2 q
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段" t& O# b9 F& W1 \' t. ?9 N# Q
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合* k" k# h6 M, s3 j5 t
  10. delete还可以通过limit设置不同删除方式( Y0 Q  f* E/ @" q/ H
  11. ' \# D8 X( o* Y
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    / Y# C& K: P  \4 e
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

* [5 W* \0 C7 C1 x! i
( b( j3 }  E( t. b  d) z& A6:捕获异常5 o5 q: \/ G$ [' x  O3 b- p

& x/ f; d( G+ ~+ G6 {
  1. MongoDB\Driver\Exception\AuthenticationException
    * U% m4 `) w9 l) b( q0 N( p# d
  2. MongoDB\Driver\Exception\BulkWriteException
    4 J$ e& q# ~* }/ f
  3. MongoDB\Driver\Exception\ConnectionException5 X: t+ R+ q3 k
  4. MongoDB\Driver\Exception\ConnectionTimeoutException) W/ V# V% J$ c: N
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    ( ]7 i. F! r6 s+ i
  6. MongoDB\Driver\Exception\ExecutionTimeoutException' V( L& u1 ^3 L
  7. MongoDB\Driver\Exception\InvalidArgumentException
    # s7 b7 [, f6 O4 c9 a& k2 P: a
  8. MongoDB\Driver\Exception\LogicException
    ; h1 G3 R& q! \2 T& u
  9. MongoDB\Driver\Exception\RuntimeException" {  @# B( n6 s3 H
  10. MongoDB\Driver\Exception\SSLConnectionException
    , m. N- y* n8 z( X4 e  U& q9 G
  11. MongoDB\Driver\Exception\UnexpectedValueException
    ! D% ^& @- W) ]3 f
  12. MongoDB\Driver\Exception\WriteException
复制代码

* W, p; b( q1 j4 E) u4 Z: x/ @) @* x# A) w9 h5 c
游客,如果您要查看本帖隐藏内容请回复
  W. }; `$ {3 |( e5 X
点击查看全部
0 _; W4 M- J" O& x+ J0 I. `+ C8 Y, |; {' P. D% x
% J3 e& S4 Y' Y, z. N7 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 10:07 , Processed in 0.105709 second(s), 20 queries .

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