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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11539|回复: 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不支持以前的写法。
9 I3 s2 [$ P& X4 Z3 r' {& g; j0 V. p3 Q7 X) v
下面用PHP7新的API总结一下:
& R, T& B& s$ M+ C+ s8 j! z% d0 C
一:CURD) c; r# w; e8 c% n5 t

4 e2 Y7 O1 ?) i4 U& Y8 m) a1:链接( J4 i$ V" o( |3 {9 C" {

: E. x0 b) Q6 h2 W  c& [" Z- ^0 [! e
  1. <?php
    & I8 D9 `5 C! `
  2. //链接mongodb9 k5 X5 Q7 H! [3 C3 c
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');5 F: Q: |7 _! |8 o3 |4 u
  4. root 用户;123:密码;如果没有密码则不写
复制代码

+ P) {7 o9 l& R, X- j1 y
( X$ J. m: A& e% p% j; Z3 b2 C2:查询4 {2 r3 Z! p# m6 L$ U, ?$ V

% `- G. k) N* e* ~# p* c
  1. <?php2 w, c3 Z! p) W8 C9 B- S6 S$ t( S3 E$ d

  2. ' U& C  w' n9 G. J+ \
  3. //链接mongodb
    ; s+ r* v$ ?# L
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# I- D1 ?2 j! y. u
  5. , a( S$ ~8 k0 H* ]
  6. //查询3 E! i7 N4 @! I# o3 s. b/ [6 H
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 D, f+ [' S' A- M7 O, G( {
  8. $options = [
    - O4 K+ u1 ]: W
  9.    'projection' => ['_id' => 0], //不输出_id字段
    $ r4 [  W- n( k! p" I5 b
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序' n4 R1 V0 N6 b- n
  11. ];& I( l/ Y* ~0 t& c% P
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    4 E. y8 H3 r4 o# ~* x2 u, V* h  [
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    0 T- W" M7 m2 t$ w0 Q- ]
  14. 1 x/ g  U) `1 t: E
  15. % z( f) m# J1 _1 F; w8 a
  16. foreach ($list as $document) {
    * L/ s% i1 W/ c4 {8 }5 s& h
  17.     print_r($document); : @1 m6 {( e( X; W4 r; B% I$ H
  18. }
复制代码
6 @, j3 B! t. I& O$ K+ _7 a' q
查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 y- z2 S6 P# y1 ]) m
7 t3 o: X4 K" Y2 C. }# n3:添加# V( |" `9 K* W

5 Q9 c. p! V% k# i/ `8 u0 _* Z, t
  1. <?php' h5 B& W- e( Q+ S6 K

  2. , q2 Z4 _: d* v( m7 V" n' {- D
  3. //链接mongodb
    ( h' V$ C- H% u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 ]7 t! j1 z7 w; a8 X# ]. F
  5. & E# Y1 r- l1 L; v% e
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    - g! }; X+ Y6 z: ^  x0 c9 n- a1 H
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行8 G# ~) u9 h9 c) o3 u3 {
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& }1 s- w" D  `' c4 C" |$ H' \' O/ _% L
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    ' p9 ~  e: d, _  [
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

2 H. o. w0 h0 ]6 z4:修改, {+ G5 X9 Z3 [  P  j/ w' Z! K$ m3 r4 p& \

) V  i0 I+ q; h' o3 ~2 {3 H( M
  1. <?php
    0 |6 j9 F6 y) b7 z  K: J; b

  2. ' }& Y8 k/ w4 L8 y1 U6 L6 d7 ?2 i
  3. //链接mongodb
    " b8 M! }& C; C$ S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . s0 Y9 t! i8 y" w  P. G
  5. / e$ J7 ^9 i- W4 w. V: D3 Y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    * B! k' Z7 H) K# s  m+ H& `
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 U8 i$ ~# ~- b9 }
  8. $bulk->update(
    ' P# t. s) X8 h: h. k8 [
  9.         ['user_id' => 2],: T* A1 C9 l$ O6 l# |- V
  10.         ['$set'=>['real_name'=>'中国国']3 S. B1 Q5 z; ~$ Z/ }( s/ p6 e) E
  11. ]); * D# P; ^# P* K' i, U, m
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,) y0 V/ Y( \1 z) t4 F
  13. //1:字段不存在会添加一个字段;' K0 |5 z2 |0 `9 S: |- q3 \  y
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 I7 e2 ^- M+ i' u% {& F# q

  15. # V. F: h/ R  A

  16. 1 c& Q& `# w2 I* z' W% K* i# g
  17. //如果条件不存在不新增加,可以通过设置upsert
    " E" |" L, i+ P3 W
  18. //db.collectionName.update(query, obj, upsert, multi);) w5 T! S* ~( X4 I( y5 m6 S9 n

  19. 5 l$ I3 D, e+ N# N
  20. $bulk->update(
    0 L. n+ v; c3 t( l
  21.         ['user_id' => 5],2 C! t  f2 K) k& R! \; v- o! z# D
  22.         [
    $ t  k& ^1 q0 l" ]5 T: _* D
  23.                 '$set'=>['fff'=>'中国国']
    # y. u- A/ R* v/ O* A- B
  24.         ],
    7 j# m/ ^  J$ L* q. d& r6 U' e
  25.         ['multi' => true, 'upsert' => false] : t; R/ w3 u) W
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    3 ]" b, O( ~7 C. }3 i
  27.         //upsert为 treu:表示不存在就新增
    & R1 H' _' V" f% d$ K' S1 ~/ @
  28. );- _5 u9 b7 i7 d: O1 M8 K# v
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

0 K- x! M: y3 v" X9 @
0 b0 z/ M  O2 Z4 I* D, w# d) y7 gordered 设置
7 w0 {4 |7 A5 \( @5 _
+ |+ |: m) H8 `5 o; n4 f! I1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
2 }3 L+ F' X% p$ v; V6 W5 ]! b2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
9 W- ?2 e" a4 j8 I; b/ ~; {; K* i; c: N! _
5:删除0 T" G% l! C: ?' K; o% g) W! _

2 ~3 L  x% |2 O& e  h0 U8 b
  1. <?php0 a* x" i- H9 c# X1 |1 R
  2. : h4 l3 {# O9 W  d; d
  3. //链接mongodb* j* U4 d7 B8 ^' P, `' }) i( L# s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    % S& Z* T# I1 j. R+ r" b8 f

  5. + R  p$ {% j% J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% d* l' o, T) k3 b: w
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    - m/ Y7 Y+ b- I$ V9 k1 \% C! {
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) w2 I4 r& ]4 I3 U9 G3 K
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合% J  k0 W0 j0 {) B; T
  10. delete还可以通过limit设置不同删除方式
    ) _3 N) o( H" q

  11. ( @0 B# Y+ h' J' O/ o0 I5 l
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据) Q& U+ g+ V3 z  t( d  F, y
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

# b% f: s8 W7 ?3 j9 @0 |: k; `0 D$ Z7 C) G( d6 w  P/ H
6:捕获异常
$ Y. _# U. a) X% ?% I0 h4 B# L. O8 A  K5 k0 _
  1. MongoDB\Driver\Exception\AuthenticationException
    * n2 [9 ?0 D% ?$ S$ l
  2. MongoDB\Driver\Exception\BulkWriteException
    . \! `* w8 X! h1 L  f
  3. MongoDB\Driver\Exception\ConnectionException) K5 p( _/ \3 j9 S4 n+ r
  4. MongoDB\Driver\Exception\ConnectionTimeoutException" @6 c# Z( o; U& [" K0 n
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    " Q: J8 K# Q  N6 f: C8 q9 ?8 q4 X
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    5 D4 _) A% a0 l4 l7 C
  7. MongoDB\Driver\Exception\InvalidArgumentException
    $ F/ {% I7 }/ R$ }% S$ H. f
  8. MongoDB\Driver\Exception\LogicException
    6 f4 L  F/ d& v
  9. MongoDB\Driver\Exception\RuntimeException
    5 m9 ]+ v/ O, q" ?- P- g- o% \
  10. MongoDB\Driver\Exception\SSLConnectionException' y* |  R5 q5 r9 R4 t; T9 U$ p# q3 Q
  11. MongoDB\Driver\Exception\UnexpectedValueException' }  ~2 _. `4 m. p& G$ U
  12. MongoDB\Driver\Exception\WriteException
复制代码

- j; D* w9 E1 W- C0 R7 S# [3 a
8 d. |6 y' \8 t; ^: E5 j
游客,如果您要查看本帖隐藏内容请回复
7 o4 ~4 `6 F5 R" e
点击查看全部
# `& w1 G' {5 o# T2 Z9 e% ?+ x5 C9 `: T: J0 Y
; E9 P1 u$ n* h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:00 , Processed in 0.113539 second(s), 21 queries .

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