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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14733|回复: 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 W8 n$ ?% G; ^- M  d
: J) B& c- y; |; u1 U# b3 U2 O下面用PHP7新的API总结一下:
! k1 k/ t7 ]  J* n5 i! x
" e* L) T, n: X8 x/ x一:CURD- _& U% l2 ?9 A$ |2 _  t- q& x
$ z) ^# I+ T: _6 U# U  N
1:链接
# M4 ~6 d3 W* d* p
3 G6 i1 R% M4 ~! q4 q& i! Y) \
  1. <?php1 R0 Q0 C" y+ W: Q  l# G
  2. //链接mongodb' ^0 z; |. O7 V8 f
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ( v' q; ?$ z* l, @2 T2 P7 b0 H
  4. root 用户;123:密码;如果没有密码则不写
复制代码
+ D2 ?6 l8 m) O8 @: ?

+ x, u) V5 K( h9 @* o! J& P" M9 s2:查询* @0 L% W' g5 `5 m, Z7 a

3 q2 c1 A! ?% A# i. i$ V
  1. <?php; v% T- m* G  I, y  t
  2. + _7 q& @4 Y5 g# w/ F
  3. //链接mongodb# f* u6 [$ ]3 C& n8 j; m( T: i# ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ! H' T' ]% B6 ?/ \' q

  5. / ^& M8 ~% p* W5 [2 P
  6. //查询( t* a* r) U' b. ?
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于08 \% H# U5 P1 l
  8. $options = [& i% S+ i) ~% m
  9.    'projection' => ['_id' => 0], //不输出_id字段
    0 l1 U) }1 ^1 M. ], v* S
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
      E. }9 B$ O% i& m5 A/ u& z* v, n
  11. ];. ^# a* r9 M9 K
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求% h6 b" i+ ^$ s5 i% P- @8 r# ]$ S
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    5 R, x+ g5 b. R
  14. 3 u5 R7 o: _! r6 D6 D2 G# j: ^3 r

  15. ! T, d6 D# ~; e
  16. foreach ($list as $document) {
    % s1 X& }) k' z- ?
  17.     print_r($document); 7 V% t; F2 z$ i4 q
  18. }
复制代码

+ Z9 u* l6 c4 v, i查询更多条件使用方法,参考第二节mongodb基本命令,查询
- R' U& x6 F! @5 }. n- S5 v) W' ^1 t4 }: {5 M+ J! A; m) p* }
3:添加6 j, m  V  @4 M) @
/ q! T  @2 V, S! F4 G
  1. <?php
    2 a/ Z( J* S, |5 C6 Z) {3 V5 U

  2. : T7 C5 V: Q; _( V0 v/ H
  3. //链接mongodb
    6 Z5 E* O0 S* t" J$ T
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# P1 j; @, I4 k" g# k: ]7 {# a
  5. . l( f* f8 _1 ^& I$ _# R
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( Y9 I9 y9 h. m  M) v4 v
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* t8 l3 X; F, Z5 g1 \
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);" K/ d& Q; }6 r) }4 T# ]' w
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);/ U2 c: M1 @/ a! t. l& \' U
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ A1 F" Q6 |( O* t) _3 x0 @' @
4:修改
6 w! S* y8 y; {9 z
. J+ f- R1 s/ @! q8 k! M
  1. <?php  ?% N; S- H: M. [4 a7 ?
  2. 3 l$ U0 |0 O( ^  G. i
  3. //链接mongodb. L- v% v! ?/ R0 p. d$ w: F
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    8 h4 P  w5 G, @3 n- q$ W- c
  5. , M) d' O/ }1 ?6 x4 @9 A) a0 @
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( R5 H5 _- |# q4 g+ A( O
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ I1 _! I, v2 z5 ]4 j' u) s+ B
  8. $bulk->update(
    3 `) D  m6 {. z( O# r) C
  9.         ['user_id' => 2],' Y- p: m- A9 X/ _! c1 h0 F
  10.         ['$set'=>['real_name'=>'中国国']
    % h! t! X& n6 i! N
  11. ]);
    7 J2 Q1 o$ D6 r! U
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    # `5 q! n6 w1 E, ?" i) e
  13. //1:字段不存在会添加一个字段;* W: r7 c& n/ J/ v
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert: A" a8 k* o% d# r! b* E$ d& w

  15. 6 x6 T( {: Q* e2 O

  16. 2 B; k" \8 H' h, _' K0 U
  17. //如果条件不存在不新增加,可以通过设置upsert
    , O2 a( P- @( A3 M
  18. //db.collectionName.update(query, obj, upsert, multi);! d% \/ z2 P8 J' {  Z& W
  19. ( T. m- S0 o0 `
  20. $bulk->update(
    ! Q; ^! B7 n. k
  21.         ['user_id' => 5],
    1 _6 q6 U+ p# v  I5 f6 x
  22.         [% k; y4 J2 R7 ?' j6 F! c$ \
  23.                 '$set'=>['fff'=>'中国国']; U3 A  M0 k6 [0 l9 |
  24.         ],9 x* ]7 I7 e$ y* R
  25.         ['multi' => true, 'upsert' => false]
    / [" q9 i3 d. j/ V# `
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    6 n  P% V$ z6 @
  27.         //upsert为 treu:表示不存在就新增
    ' w8 w6 b0 A; M; [& {
  28. );. G* Y9 h+ I( O8 G( Z1 E
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

. r1 p; w3 L* _, q7 F( u  x+ L6 l
ordered 设置
, L: t+ I, {; O6 W* e- f3 s
! a1 }2 L0 |1 ~4 W4 C; D7 T- H1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。" @: @. V% o$ y: ]9 S6 X
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
4 M! |: i5 i7 a5 b3 o2 D) G6 ~1 ]  ~
5:删除
) j$ P" a& n8 }- G1 M9 P- S1 j
5 r) R6 h$ k8 V& E3 r7 O" Z
  1. <?php
    - ~- }% L; C: F5 D: T7 {" I# x

  2. 3 r! w% D& q! y5 j
  3. //链接mongodb
    " A1 s, T6 G' ]; _/ N6 l5 j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 E6 k/ E2 t: j( `8 ?

  5. 1 p+ x: W2 W  Z# {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( ]& X7 F% |( W& {9 W. N' P% M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    $ U% w8 o, B2 q6 z: L0 C
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    1 @2 i3 r  `- ^* d. r1 u1 |
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    1 a1 L. P; e  }& B
  10. delete还可以通过limit设置不同删除方式4 P! F1 c4 @! @$ N
  11. , s  n. @- p( e- C( h  K2 V
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    - T. ?3 x' C8 P
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
# e  P/ f( q" Q5 q3 U# K

1 Q* _4 H( b. o4 K  H) ?& c6:捕获异常
' S& l* U9 |3 C3 X: E- Q0 C7 N
. b. K" Y) u, w( Q% L' S2 F
  1. MongoDB\Driver\Exception\AuthenticationException! Y9 B0 Z% ?' E
  2. MongoDB\Driver\Exception\BulkWriteException3 y$ p8 o4 a! R: `
  3. MongoDB\Driver\Exception\ConnectionException) V$ E5 g3 g8 u7 X: d
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    8 A, r, \+ R2 O0 f+ d% h2 o
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口* ?( Y* x4 P2 ?6 u3 h. d; D7 n
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    3 h! W  @- _# p( t  S( e  X0 ~
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ! X& K5 J$ z& D- I: g
  8. MongoDB\Driver\Exception\LogicException+ A/ {3 k& T5 y' L; a% F, h
  9. MongoDB\Driver\Exception\RuntimeException3 `/ F' s9 u7 n+ r" H
  10. MongoDB\Driver\Exception\SSLConnectionException" K  m6 B8 n' i
  11. MongoDB\Driver\Exception\UnexpectedValueException
    $ ~: f( v# Z) @- u0 _% `$ g; \
  12. MongoDB\Driver\Exception\WriteException
复制代码
' J. e  h$ N/ j% ~
4 }, d1 f1 f0 e: h
游客,如果您要查看本帖隐藏内容请回复

8 q" {( S8 g  z( U- @1 d  A点击查看全部" i/ ~4 I0 h% q

% J7 a9 A0 H2 D/ u8 g
6 _% E! s  u- d3 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 20:50 , Processed in 0.068447 second(s), 19 queries .

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