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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11120|回复: 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不支持以前的写法。
0 G: N9 V  p. w8 x3 a
4 m% k2 S3 e9 F! X+ y下面用PHP7新的API总结一下:  R4 M4 K4 U+ J4 M2 Z9 E" R; P
( _. L% S# t, u8 M8 d* Q% C! Y4 E; q; B
一:CURD6 _( \% z- e  b; @
, \4 E8 {+ c* ^5 _: [6 t2 `% Z
1:链接
5 z6 T% z* }# K# F$ E. N1 H& K4 p/ w4 v. ^5 A" m
  1. <?php! v7 ^  I+ c1 c2 ^! ~4 c. u! z
  2. //链接mongodb- _- D$ ]5 G) ~3 G3 f- L
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');& e2 t. g- f: Q$ A4 g# P  Z
  4. root 用户;123:密码;如果没有密码则不写
复制代码
5 i  S4 ^- s& D! [

3 A4 A  g, {& M2:查询1 v2 m  E- i% y( S" z

  {3 M+ G, v. l' J2 u; ?$ \0 Y
  1. <?php
    6 x# N2 T5 H6 }0 s+ x

  2. , C3 N% J5 G; Z. a
  3. //链接mongodb
    " f0 X3 e; H9 N
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');, v/ Y& p5 [" O

  5. 3 e6 `; A' ?8 @8 @. [
  6. //查询
    3 J2 P4 i! h* X+ l
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0) Z* S  b+ P" v9 q7 H* ^& ~* i+ q
  8. $options = [+ Z$ e0 i/ F$ y  D1 x$ s3 E
  9.    'projection' => ['_id' => 0], //不输出_id字段
    5 u7 }2 n( L2 I# L: S8 o+ A8 [3 J- E
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    7 l7 v6 [/ [2 B8 U6 u& z+ r8 i  Z6 u5 I
  11. ];
    9 j9 G0 @7 L  L6 w
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求( `3 ?/ v& {  F, Z
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    : h1 x# T+ M5 `3 g7 S- b6 b
  14. 0 ]# O% {- R3 N' J

  15. # v2 f' Z2 [3 `* y
  16. foreach ($list as $document) {3 \2 s0 r+ r! a8 ?7 h0 i" A* Z
  17.     print_r($document);
    * K+ s" ~' i% u# W) N
  18. }
复制代码
" ]! T) w1 ~5 H( A8 F% ~
查询更多条件使用方法,参考第二节mongodb基本命令,查询' o" b( W4 u+ r; b. c( x# [* Z' Z, L
+ A. Q  ?9 E) W* P
3:添加
' R' m& f6 [9 Y, c: N2 ^% E0 `8 A& E" G# w! [5 {
  1. <?php
    ; p. U0 a: W$ ~+ T0 N. a' N5 ^

  2. 4 s0 h/ _3 w4 o
  3. //链接mongodb
    ; R  t1 c* `- U! u7 R* S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . B+ f+ n4 ^4 h1 P. M

  5. / V: C6 ]- h6 }6 X  n* d& m( W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 A$ j$ Z3 r) p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    / o4 g8 P  s: G& x$ w1 n
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);# e9 Y* h! S$ P9 a
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    0 A, B, A! q3 l# D; p! O
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
: D; w2 y4 ^' V5 W/ Z% u7 ]
4:修改0 f& n: d/ M+ l! j: \+ q( ]

/ c# R) f* v6 q% c- \  w
  1. <?php
    * ^8 f6 c7 _/ k1 y
  2. - U: l; y0 E- @2 a
  3. //链接mongodb
    : N! I& k4 N) z) k0 X: s4 _" r- R
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 e& t) v5 \0 t8 H
  5. 8 o7 y4 c) m/ K4 k. t) P
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    % U: p$ w" i7 w4 C$ q  ^
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 C4 |+ g9 q  Q% I  Y
  8. $bulk->update(/ |" B8 C+ L- w
  9.         ['user_id' => 2],# }- ^- _% ?' t7 F
  10.         ['$set'=>['real_name'=>'中国国']
    * H  L9 E9 x; V; o, {% h
  11. ]);
    ( A& E1 k) D5 R/ ]3 s
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,. g' V( x% [1 e5 T+ O
  13. //1:字段不存在会添加一个字段;  S4 s& t  B7 W3 \6 i2 L
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert. d& l% Z5 O# H- g* t3 n  U
  15. 2 D" x2 o1 I. l" G! j
  16. " |' c7 d5 v& |0 L
  17. //如果条件不存在不新增加,可以通过设置upsert
    & C4 c8 N) q, R8 ^$ F
  18. //db.collectionName.update(query, obj, upsert, multi);9 p; ^6 B, Y4 q* S# w+ ?

  19. % K% v! B- T+ r( q' v
  20. $bulk->update(7 I' H6 B/ P  U# A
  21.         ['user_id' => 5],
    3 F. C6 m1 a3 e( Z1 g% L
  22.         [
    # k$ L) ~+ Z  `* e) o& ~+ p
  23.                 '$set'=>['fff'=>'中国国']
    % O! J( G0 i9 H" E; o
  24.         ],% ~& \2 m& c  _5 K  S0 W
  25.         ['multi' => true, 'upsert' => false] ( L' I- T4 s) H7 s/ c
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条8 P  A+ b0 L: d9 T8 E
  27.         //upsert为 treu:表示不存在就新增
    , n  J5 j' Z- q8 z) \
  28. );
    ( D. z4 G! o. k" @
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# }' |% n2 c+ o* g" }% ^( W; K
* t) Q- G! ~4 g: e% I! _; ~
ordered 设置
0 |/ H+ M6 k" ?8 A% i
* [4 {; I! y: g1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' Y" ]6 J3 ~% F+ ]' ?7 m$ p
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
! U% `/ B" X0 o4 I5 t! w  R% F) r5 g1 g. ]' T& a2 \* o6 z
5:删除
+ R; ^/ _  l% d: f3 T& @/ t2 s. Q  L8 ]. b7 e- j7 y
  1. <?php
    ' x+ V+ l& G7 l4 e9 S

  2. $ n# e- R* V6 x6 x7 n7 w
  3. //链接mongodb
    2 O7 l! @: Y4 i
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    4 `1 W  @3 w4 Y* }; w1 r

  5. ) w" O$ G- I7 b* k- U- v
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    8 @* [' W2 A9 x
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行& Z' h$ A) @( D' R" z
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段! }7 o% A) I+ v. G# p0 j
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合: j0 I9 K! c2 Y0 {  Y) t0 c. P* L. f
  10. delete还可以通过limit设置不同删除方式1 y- V+ k  U. }6 u& \8 C

  11. + O* @' A4 R0 v9 N( m  k
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据# b% r& E2 Q" @( {% H
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* c2 I$ b& z. y9 c

% h: t" I$ ^0 w) ?6:捕获异常
% i3 Z8 [0 h8 x) o' G
% B! w: F- ]( y+ Y0 [1 e% S
  1. MongoDB\Driver\Exception\AuthenticationException) e: O! N4 r" l) J; L6 b( K* C* _3 e
  2. MongoDB\Driver\Exception\BulkWriteException
    + r0 @5 {* G, I
  3. MongoDB\Driver\Exception\ConnectionException
    6 M- V- z3 L0 F, t) r3 ?6 R
  4. MongoDB\Driver\Exception\ConnectionTimeoutException! h3 z" b$ Y2 L; A# n' K
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口4 @* v$ W" y2 Z
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    $ Z! d7 M2 |1 D9 |, s7 }
  7. MongoDB\Driver\Exception\InvalidArgumentException0 Y2 s3 x, M! ^4 g
  8. MongoDB\Driver\Exception\LogicException2 X! s3 o8 v- {5 _
  9. MongoDB\Driver\Exception\RuntimeException
    & s' Z. y" B3 I
  10. MongoDB\Driver\Exception\SSLConnectionException: B3 f' \" p: Y7 N3 G/ h" q9 n
  11. MongoDB\Driver\Exception\UnexpectedValueException* X/ x! X! K, {7 S, l
  12. MongoDB\Driver\Exception\WriteException
复制代码

# `, D8 R  L/ R; k; H9 ]
& Z1 f7 _9 g4 m5 x
游客,如果您要查看本帖隐藏内容请回复

$ B' {+ a6 x) k; E- ^0 v' e点击查看全部; ~' D8 ?8 m5 D1 N4 ^7 q

9 {& K, O5 V. U5 I( V- \8 G* I9 u
3 x5 O! \# }8 z1 w7 M7 }" y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-11-13 06:41 , Processed in 0.116677 second(s), 19 queries .

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