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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15381|回复: 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不支持以前的写法。
/ P" _$ P, [8 e- J% z1 l% n8 K! S) A! y4 |  l9 E, ^& U
下面用PHP7新的API总结一下:
3 H: y6 I* j% R/ a/ j3 w- ~) R- ~* g9 M) A% j8 q
一:CURD
/ P3 W, E' L+ W8 `
% [5 p: \2 ^+ I4 T& _$ K6 R' G1:链接
3 q! c$ _( W3 G4 x) {1 h+ V/ N7 |' O9 X. {7 B6 L( c/ [
  1. <?php- }# `  [/ J. N
  2. //链接mongodb
    + J( f7 G0 U. }0 p3 @+ g( k
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ! n/ P6 M' q* E1 S5 C7 u# x5 }. D
  4. root 用户;123:密码;如果没有密码则不写
复制代码
6 S2 `  a& e: u( R% d2 ]; Y( z
: C2 Q8 l' p  T6 G1 k- q+ }+ i
2:查询, A/ v+ Y: s6 b! c* G. ~0 w

+ ^- k2 Q* B0 i# m8 Z$ g% p9 j$ ~" N
  1. <?php
    ) L% L1 B7 U4 w/ g6 p0 }, w! m# P

  2. " g3 i, J# X! `4 l! J& Z/ @
  3. //链接mongodb9 f. z+ W. M3 V  h
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 N, e: ^2 ?+ y/ l
  5. : J4 ^8 x  x2 I0 p
  6. //查询1 H  X, e. |, ^/ e3 D5 K4 l
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0( |2 J" @7 N; D8 N. X/ [7 Y  p  W) k& d
  8. $options = [7 k# O- }. w* W1 f: U1 n4 h
  9.    'projection' => ['_id' => 0], //不输出_id字段  H. L, Z' ?, O2 j$ N& S
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    % T, D9 }3 [& e
  11. ];6 L6 V+ R, M4 y& h% ?2 B
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求6 c& ?+ \9 ^: |0 l/ w. m! W4 p
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    - ]9 |6 x  z0 o4 Z& o4 `  i$ e

  14. 3 E* {' F8 z- P% E5 X/ ~
  15. 9 t- d/ @# W4 m2 M9 {( M4 m
  16. foreach ($list as $document) {- ~+ C. T: j9 k% i$ S
  17.     print_r($document);
    3 n0 ~9 l8 v5 K7 C  o2 `: N) j
  18. }
复制代码

; F; u6 ^) J9 k# _; |' ]查询更多条件使用方法,参考第二节mongodb基本命令,查询4 w, E2 e/ o' u+ V/ D( f) Z& ~

1 B( G8 w$ U; O5 t- D/ o  E3:添加) o/ n8 f) V  |/ y! W+ u" B
* A- T4 q3 Y: m7 G: g# L
  1. <?php' ]& P# i0 f3 e$ |& o( N& L

  2. ; p3 Z3 ^/ F9 |. }# C" L
  3. //链接mongodb! m  k1 u$ H2 o# R9 D5 w
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . T) g) x. i: ]  ?- K: @3 L: ~

  5.   V0 z* s  `0 W  Q5 L. E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    + g' h7 @( q2 N0 H0 f$ v# p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 m+ v8 j: M% A6 b0 v5 G9 Q( d
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);: p( o( h! e1 W1 j4 ^7 x6 E
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    $ n# a) N5 n3 B. }6 d7 v/ |
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" _; Y4 g, M3 g3 }' S. Z7 r0 g
4:修改
* ]9 _* A! }6 d% q( p( o) b
3 T- y6 \2 Q2 ]: {, z
  1. <?php3 U: \5 T" Y6 `7 U2 W' B) j0 n
  2. : l' y2 ?$ T( U! h
  3. //链接mongodb. f9 h; C  l: O- Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    / `6 |: p0 O9 [4 @0 m
  5. + b; @5 M( F( g( N2 L' z4 Y  l0 @
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' r! ?/ ~6 r$ T. ^) I0 m
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    2 g* K1 u- f" V# u+ E
  8. $bulk->update(0 i4 n; t6 Y; O3 C: y" g
  9.         ['user_id' => 2],
    1 H8 y2 o% l9 [' ^9 p
  10.         ['$set'=>['real_name'=>'中国国']
    , M7 i7 m9 T' f! V6 V
  11. ]); % I" S8 Q( v8 B& n7 j5 q, a; K
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,- q. i+ C) Q, y  j
  13. //1:字段不存在会添加一个字段;/ X! r5 r- c2 C+ |4 c# F
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert$ e; c, ~" c3 b1 p8 j. |
  15. " e( F/ \- j7 k
  16. # y, i" Y7 h3 k
  17. //如果条件不存在不新增加,可以通过设置upsert# R5 W  V* ^, s+ l( ?
  18. //db.collectionName.update(query, obj, upsert, multi);
      [  y4 i4 \  b" ^0 E+ g
  19. 7 h, a, y. T" x5 d+ n' ~" o
  20. $bulk->update(% F! f: g  [. r! u
  21.         ['user_id' => 5],
    ; R! D( n, c5 _. c4 m9 F: J
  22.         [
      z2 t6 i) T2 O7 c* Z6 x
  23.                 '$set'=>['fff'=>'中国国']
    ) W* E5 a* M$ D# [. r
  24.         ],1 O2 ]: x& t5 w
  25.         ['multi' => true, 'upsert' => false] 4 H0 N& X. j' n) ~1 c0 U% O" L& W
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    9 w" u+ z  J; |/ Y9 \3 h# }
  27.         //upsert为 treu:表示不存在就新增+ H6 n5 L! ~; m( Q1 `7 a. Q
  28. );8 W: V" m& }# R1 A" ^3 F
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

  Z! i  m* E4 E( a& C9 F" g6 |$ v6 U7 q3 E; q1 v) K8 H9 R
ordered 设置; ?& O6 J* I: P5 z  ]

/ ~8 `% @" c% W( l1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。6 x" \9 X9 n; B# I
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行: ^$ p+ M0 b. |( _) M. _  Z
( G/ B6 |" W6 p! O
5:删除
4 M3 f) N8 L" p& d% h& d5 M% ?) U/ R8 }$ @
  1. <?php. k& c# c/ y" C9 t7 Q
  2. - z2 W* Y2 j- J: A4 L1 o
  3. //链接mongodb6 [/ d7 }+ u- d
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# s+ f; g( [1 h) a7 l" Q

  5. . J) {$ K" y1 s2 t$ w' c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  q9 G; p# W% p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 R, z( |( w! J  c$ u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ( p0 N: L9 E9 O7 h/ W5 T
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合' Y2 r  G, P7 D0 _/ o2 M7 O  {/ V
  10. delete还可以通过limit设置不同删除方式
    ) S; f9 X  M6 O6 f' x

  11. . b% u" a1 K1 z& x
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    8 c3 L5 G' p: K- s( u) b& i9 H9 _
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

3 R9 H1 _3 _! S
3 d/ s6 s( T! c! m; P( C) D6:捕获异常: x7 w& R" |1 N5 \3 k; k/ c/ X3 I: h
6 |2 {4 H0 ?; ^' r
  1. MongoDB\Driver\Exception\AuthenticationException
    , J; p# g" X: W; U
  2. MongoDB\Driver\Exception\BulkWriteException
    & o; P- O9 Z1 h. t
  3. MongoDB\Driver\Exception\ConnectionException
    ' `) g3 P0 E. u# A3 \, d$ P
  4. MongoDB\Driver\Exception\ConnectionTimeoutException" S) q7 U2 g  _, t6 ~
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口, m! y+ l1 ?+ p$ }# K" ~6 C0 O
  6. MongoDB\Driver\Exception\ExecutionTimeoutException$ C: p) ]9 i# G
  7. MongoDB\Driver\Exception\InvalidArgumentException
    ' ~3 X  p$ ]$ @1 C& s
  8. MongoDB\Driver\Exception\LogicException
    % Y; n# I. _8 e+ Q2 p% x
  9. MongoDB\Driver\Exception\RuntimeException6 E7 Z% o4 W# u) O1 J" P
  10. MongoDB\Driver\Exception\SSLConnectionException: b# n, x2 q0 U! F: M
  11. MongoDB\Driver\Exception\UnexpectedValueException* B8 L5 m2 M8 r, \$ O
  12. MongoDB\Driver\Exception\WriteException
复制代码

7 S( M1 Q0 M: r/ @) k/ P% Y% T. [) U( ^# C; k$ @9 Q
游客,如果您要查看本帖隐藏内容请回复

) L+ `" W: \) x0 [点击查看全部0 p9 ?" w  @1 Y* l$ ]: d* o
. B+ ~: V* W7 V' D

9 w# K# t# C* H9 b7 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-5 03:12 , Processed in 0.054723 second(s), 21 queries .

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