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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15890|回复: 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不支持以前的写法。
( X9 E0 C+ b9 u) @, |/ P; C% a) y2 y, }1 Y  x: L, }* G
下面用PHP7新的API总结一下:# j( E9 |. w" }" ]  W# o" K3 J

0 g9 b  v: A, N0 n/ U2 B/ l一:CURD3 w0 V1 \$ _! e. T* Q$ l; @$ q
3 W  H9 r  [! h& ]: q2 e3 L/ z
1:链接
' p$ P. y0 c. \. U/ |+ ~6 z- C7 i1 \
  1. <?php
    - x& g6 V+ v6 z, J
  2. //链接mongodb2 {: N( T: Y; u; P& ~3 X& g  [
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    4 d# e! p% T0 P% h5 k9 g
  4. root 用户;123:密码;如果没有密码则不写
复制代码
0 s3 w, E( f" x# ?% S3 y

0 G% R; H1 O3 V  m2:查询
1 u2 Z. _9 v* W/ o) o6 A( K" s/ k6 X2 S
  1. <?php$ J0 f' F: y5 N$ ]
  2. ! k1 R7 M6 F( F7 A: T
  3. //链接mongodb
    4 G/ ~" b/ @0 M
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
      @: g$ i$ o" |' m" X

  5. ; j3 u+ f+ a4 p. R8 o. Z1 i8 x8 K5 a
  6. //查询0 L% T8 D# ?7 B  c* d
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    % c5 ~% M" }) Z
  8. $options = [
    + v0 w- P" D  r7 Y1 D" l
  9.    'projection' => ['_id' => 0], //不输出_id字段
    / d5 x4 p: D7 b& _/ [7 j
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    1 D( r$ e6 V/ \, p/ s; K2 O7 l
  11. ];
    * H( A( D# m, V/ I* y$ B
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求" f) J' c+ G# l7 e
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合9 Z! O; Q! B5 S6 d1 G3 A) a

  14. * U  V, h4 J; r
  15.   S2 @4 E/ _  o" `' z/ b* E
  16. foreach ($list as $document) {
    $ }$ m; u" H- R3 _' q2 D0 L+ M) z
  17.     print_r($document);
    # f# O% w( V; Z3 ^, G
  18. }
复制代码
; A7 ~9 Y+ G$ L: U" G( e1 H
查询更多条件使用方法,参考第二节mongodb基本命令,查询
* ~: J8 S: l% z, r7 p) A! A  I. O0 Z1 z& d# x7 F
3:添加+ `, v& C" H' T# J- I

' P4 ^% N- v+ C4 a: W3 J" I* {0 B
  1. <?php* a0 s6 b: q. \3 w! y% O
  2. + E, ]8 o0 s2 ^) ]5 N' Y
  3. //链接mongodb6 G, x5 a/ B2 |) m' H! d  V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  @6 m# i- U! L; x) {. `
  5. # A3 l+ ^& c0 c& ]0 _1 l
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ( C- u# y2 ?# |" X. _
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * a& s6 s# \) j2 z" t3 i% s% e
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);- [6 m; @' Z9 A$ }: ^8 W
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    % }$ X- b1 x* L, W+ L$ p# g
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ A/ f6 B, _  g0 I' G& S
4:修改. |1 r* o$ l3 H" x

* ^( j7 }& p" R+ H, D
  1. <?php6 C, Z  ^: [; U! i9 N
  2.   e' P% U2 c' h; T! \5 l' H
  3. //链接mongodb
    / P; |( _, a& `: H! B9 J
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* z# K( Z' W8 g# R2 `2 s; e

  5. 5 B6 U* |/ L* g  ?) R5 {9 Y4 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' A5 t7 c) o( i7 D: P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行: j- A+ o; `8 u
  8. $bulk->update(, Q9 z. U( Y! \5 W7 E
  9.         ['user_id' => 2],
    ; a0 g0 G6 H2 N( @% A7 w
  10.         ['$set'=>['real_name'=>'中国国']
      n5 {% r+ q1 v4 T) R4 V
  11. ]); - c4 q9 Q0 A7 D4 K
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    , H0 p, U" H' Q, o! S4 \
  13. //1:字段不存在会添加一个字段;
    * H+ `/ U+ X- U! i) F1 P
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    * y9 _6 l0 y+ z, w* h
  15. , [2 M8 Z) A8 f* J

  16. 7 W! V9 o- k3 P2 W
  17. //如果条件不存在不新增加,可以通过设置upsert* V6 \/ q( l0 l1 y- o, q/ A7 F, A
  18. //db.collectionName.update(query, obj, upsert, multi);
    + {7 y  f5 H% L5 e( F0 k3 c. g: l3 O

  19. & |; C0 p( m9 b" [, J2 n) [8 B- ~
  20. $bulk->update(9 @/ h! b. b/ C! S, c* @4 |' C
  21.         ['user_id' => 5],
    $ D2 m  Y% }0 S! [1 X# Z3 C
  22.         [
    : u- \8 Z( z7 P! J1 b; w4 ^
  23.                 '$set'=>['fff'=>'中国国']% z1 X# v4 u& ^. u4 M# U
  24.         ],' k  [. F7 K5 e) n6 b
  25.         ['multi' => true, 'upsert' => false]
    $ d( v6 a5 S4 ~7 l! h
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条! V, r* I6 l: X# E- c' M( O
  27.         //upsert为 treu:表示不存在就新增
    1 @/ e) [- M6 s+ _/ @! ?
  28. );
    + \& ~4 Y+ z2 Y0 M1 Z8 F) f
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* X, y& p) G, r7 W. I* o6 [+ R( r" G0 K7 b/ U
ordered 设置, i  i; d: J9 @; q5 ^) A

0 t* u  G  M4 h' l  s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
/ l, `3 F( r: _& Z5 v2 |2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行" |, F9 \$ ^' Q4 K. [( Q
; L0 m7 H) g7 f4 R' c  I/ Y: O) T) D
5:删除
; E, x* ~+ _% l( N( y8 a, C7 V; }/ i6 H) u5 X
  1. <?php
    # O4 v) H; V3 R3 l! j( i

  2. $ F8 }; @1 k9 {
  3. //链接mongodb' B( {! p; n! x' v/ r' o, ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 v9 t) ~2 Q  R7 W

  5. ! c3 e6 O  v, C# x8 }% _- P
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! W5 h8 j& s5 s1 V* o. {) H
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - t& b# x0 `5 X8 S' I4 N1 L
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    8 H" A; l$ c3 Z- t6 }
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' m) N& u* l, A) c" B
  10. delete还可以通过limit设置不同删除方式
    9 B/ W# E- m$ |; x

  11. " O) ^8 \. Z4 F7 b  @( E
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    2 e- A2 z$ r8 E& u/ D" t
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

/ I9 ?" y7 S" o6 y( |' @3 L. Z9 T, [- h$ W$ j: A( v8 @0 T
6:捕获异常( W' O, B4 {  c$ L( x1 c

. c/ O6 `0 Z2 K, H
  1. MongoDB\Driver\Exception\AuthenticationException0 X0 h% t% N4 f0 |6 I
  2. MongoDB\Driver\Exception\BulkWriteException
    , ]9 v8 w3 |* b+ w& X3 W# Y; l
  3. MongoDB\Driver\Exception\ConnectionException5 r9 L1 b$ }& R/ L
  4. MongoDB\Driver\Exception\ConnectionTimeoutException0 D, P% f+ W7 X6 }+ j/ b; U
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    2 j1 G6 J' s0 ?6 V
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    5 R/ i. Y. y9 j+ c0 s$ G4 h
  7. MongoDB\Driver\Exception\InvalidArgumentException
    - l+ r$ r( Z  e5 l6 a
  8. MongoDB\Driver\Exception\LogicException* y5 M7 b- g+ S8 C! H5 L# J7 m+ W( J
  9. MongoDB\Driver\Exception\RuntimeException
      s5 b1 n; i/ e$ e6 b* p  z% J
  10. MongoDB\Driver\Exception\SSLConnectionException
    2 I. t. h5 D5 f! G0 `0 Y
  11. MongoDB\Driver\Exception\UnexpectedValueException
    $ q3 \. j7 K- _! G
  12. MongoDB\Driver\Exception\WriteException
复制代码

6 F" F, m, ?$ y4 t2 T) a9 M, W9 k6 }& n
游客,如果您要查看本帖隐藏内容请回复
5 @* K0 i6 G' i+ t+ j5 ?0 Y
点击查看全部* n+ X7 d6 m) d7 s2 y

% K. o- q* v8 D& A( K  u  Z7 C: m! s) c9 F3 Q4 u4 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 05:17 , Processed in 0.095496 second(s), 19 queries .

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