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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14954|回复: 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不支持以前的写法。
# _' m+ @6 H# ^: y4 M  P+ Y, ~5 ?7 [2 K  S" y: {) S
下面用PHP7新的API总结一下:$ d9 `8 v; V1 t5 K" U7 \% s2 F
$ q. P! k8 q& T, R% \% A
一:CURD  K$ d, W4 M) ~7 R2 L

0 R- c4 I0 _5 Z0 O1:链接, R3 f- x" {% f2 m0 J

9 f' M( S  _' H6 }1 E+ a
  1. <?php: w- u/ t) h# V  D
  2. //链接mongodb! o4 ?% c, Z9 x6 L3 h8 \
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    7 o8 s  `5 C* d
  4. root 用户;123:密码;如果没有密码则不写
复制代码
/ g' D% x0 N  k' y, X" W# z
% B, o' s0 @- W% j
2:查询
" t8 D! F* Y+ V! q/ V; e1 v% x" q* P. Z+ P" H( z$ K
  1. <?php0 H% q1 z4 i$ E0 n2 a$ q& g% P

  2. ) Q* W9 ?  X' ~
  3. //链接mongodb
    ( V" i- k- K: ?4 H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ' h, p$ T! r  p4 T
  5. $ b8 t7 L, p; }9 |1 i# X3 z
  6. //查询
    ( [5 g5 z; m. |! C
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 i6 b+ J$ X2 _; O
  8. $options = [: y8 _: P/ T: k
  9.    'projection' => ['_id' => 0], //不输出_id字段
    8 W9 f3 H* G" m1 M$ [, m
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    0 z' |4 B0 T( R  Y/ \
  11. ];5 a- ?" t( C, e/ \
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    % T  f4 u9 w, ^7 z; _0 Y: Y9 w7 ]9 _
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    : R7 ~* t7 K7 S) t0 \  Y

  14.   A/ ?& c$ o& q' A% F7 _& K
  15. . C$ I4 q- w; o" Y& x0 k: @0 D/ `
  16. foreach ($list as $document) {
    9 d+ y# w. Q+ X8 D1 O% G* s# \0 K
  17.     print_r($document);
    ' I; M6 e' p! Y& e, o/ C
  18. }
复制代码

% Y0 e& [' H/ a. O2 m0 u查询更多条件使用方法,参考第二节mongodb基本命令,查询
6 q& p  Z- w9 g0 h2 i
7 y' ]$ J1 J0 ~% U1 g% E3:添加7 W. U9 ^( Q7 G! ?# i/ h9 h1 z$ ]) Z4 d

0 q) J  k6 ^) ^: r6 X: H/ a8 o( y
  1. <?php( g; @* ~6 H" M

  2. ! b: c; R! d/ Q0 ^% F* [8 [; }* T
  3. //链接mongodb
    : A% C! T8 A' V" f( Q, `2 b
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 |# |! R% j( _: T

  5. 0 ^: Q& g! W  g* z" J
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    5 ~# Z" i/ U( M, _& K6 m7 s
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. o1 W8 u# g: o: ~
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);3 c4 X7 J, v& {( n3 @; {
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 A- ^0 O! h+ X  J5 R, F( J
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

+ b( V9 n" S$ ^( O6 `# E4 J4:修改. T# }# k8 q, Z" ~/ ]+ H7 G9 y5 Y# W

2 P+ j; `5 N# c# Q- `
  1. <?php6 n+ O+ V6 [! `  B2 K+ w

  2. 2 l. @; M" I8 R6 _5 V9 d0 ?6 w/ i, w' P9 ~
  3. //链接mongodb
    9 _0 W$ X9 N0 j# e# u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 J. T  f4 p' o# I7 w5 r

  5. # ^+ d' J& x8 m7 H  {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; ?4 o1 f" w2 B6 b' B$ a/ S1 N
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ) Y, S5 D% e# Q# D, K5 Z. R# W
  8. $bulk->update(/ p% f8 U2 P! w6 @' ~
  9.         ['user_id' => 2],
      U) c% e! ^7 @7 W+ h1 g/ N
  10.         ['$set'=>['real_name'=>'中国国']8 R6 E$ b  T; F5 Q/ e" ^; ~
  11. ]);
    6 c& J- s- N: v. B3 Z
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    $ x' Q% x: w7 Q7 j& w
  13. //1:字段不存在会添加一个字段;# Z+ D, x  M2 {( R+ R% o# c
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
      H9 _# m, X# j" p+ r

  15. 1 z& `9 o& R1 T! K6 E% u

  16. ' w7 K6 m" m: Z0 x, Z& K. T
  17. //如果条件不存在不新增加,可以通过设置upsert. w3 `: E5 y2 b
  18. //db.collectionName.update(query, obj, upsert, multi);3 K& x' |0 C' D9 O2 n/ p

  19. 4 G4 _5 W/ \/ D6 ]2 v
  20. $bulk->update(( Q4 ?3 ^& {; \
  21.         ['user_id' => 5],
    0 d4 ^6 f; K; G- l1 {
  22.         [% v; s; u! P4 P3 c
  23.                 '$set'=>['fff'=>'中国国']4 Y( \' H- @& j
  24.         ],( z% m. J+ |' u1 U5 y0 C
  25.         ['multi' => true, 'upsert' => false]
    7 M# j" ~; d- y% v  U
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& E: `. ^! i  Q" ]
  27.         //upsert为 treu:表示不存在就新增
    $ r' D/ F- G2 ]% q* p2 h
  28. );
    $ [" n5 p' C' l5 d. z
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
/ k( P( f9 J7 J
! G4 f+ e, r9 \. t2 d) R7 V
ordered 设置' E8 K6 \3 X  C8 B

" S/ n7 G& z" j& x1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' O& z+ B1 q( M4 b  w: a0 {( i
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行) ]2 S5 C3 ?4 J  W% I# T6 A4 C1 U

- x$ d3 o" c' M: l7 @2 T5:删除
; v. y; t, |) ], g) `- q  y- \0 _3 b7 f: z9 e5 Q8 m0 A+ }" {' ]- }
  1. <?php
    ; L2 j7 Q- r) W# j8 s0 ?
  2. 4 e8 Q8 I0 l" B" W  y$ j. o
  3. //链接mongodb4 T, H! o5 g- @# ^& H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    8 Y( S" a, ]! H* j3 f
  5. 9 a- g" a3 I- i! I, ?) M
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ' P7 Z& F" }1 a, y* M- S4 Z
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    , Q: m9 ?7 O* _2 A4 _/ ~
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    8 O  `5 M) w! I
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合- L' h, y$ r5 l, k7 F' U
  10. delete还可以通过limit设置不同删除方式$ D+ h" E% y' b' Q" p  I. w! M8 s
  11. 3 Z) F$ [3 D/ C( \
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据" v, q3 e. ?0 x2 S
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ m9 ~( b: d& P6 t, s' T" H4 _' x

. a/ _. X4 {, W9 {0 Y5 u6:捕获异常
  N; R# m( ]1 _" W/ }, t/ Z. h9 b: v1 B: j. `3 `8 W! ?* t
  1. MongoDB\Driver\Exception\AuthenticationException
    ! Z" c7 i2 y* k& x9 C, ]
  2. MongoDB\Driver\Exception\BulkWriteException$ J9 J6 U- r! f0 W
  3. MongoDB\Driver\Exception\ConnectionException
    & t$ C+ G& D  _: L/ [! l' {* n) J
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    9 Z  X. p! s; O% O7 j
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    3 K8 ~! a' n! L0 W
  6. MongoDB\Driver\Exception\ExecutionTimeoutException0 a4 ~' Y2 e3 r! L
  7. MongoDB\Driver\Exception\InvalidArgumentException9 x7 O7 \) k: H4 x4 c) |" A
  8. MongoDB\Driver\Exception\LogicException6 g1 [, l& m1 `4 \+ p( X5 e
  9. MongoDB\Driver\Exception\RuntimeException
    , w- _' Y# E$ h
  10. MongoDB\Driver\Exception\SSLConnectionException
    ( E/ {8 U; t; D! ?7 z
  11. MongoDB\Driver\Exception\UnexpectedValueException& G! O" s9 k- {6 M
  12. MongoDB\Driver\Exception\WriteException
复制代码
6 Z5 M/ b1 ~7 W1 {% z2 _# o  p
! `" e! r9 R0 e
游客,如果您要查看本帖隐藏内容请回复
- B# k3 ]; a6 i2 Z& R
点击查看全部
% F) g" g) U  L( I, |) q9 I
+ J* L# M$ Y+ y# C1 Q
* h# B$ u  X1 N8 @8 u$ E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 04:19 , Processed in 0.069711 second(s), 20 queries .

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