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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11541|回复: 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不支持以前的写法。
. u$ w2 u9 [: v& M& s$ g
+ _9 j- k, {7 [7 g下面用PHP7新的API总结一下:/ {/ K% F" K8 O* C- T+ _$ v
7 J- P4 n" @, P' N: E) P6 H; J& u
一:CURD
& S% K) X# c( r3 a' l! }% X1 ~0 e5 U% u9 r3 A7 V
1:链接
' A/ d7 [# g  @/ ?! A7 N0 C, r& ?+ l% B: ]- H9 u, K
  1. <?php* G0 H# |% {( ]
  2. //链接mongodb8 |: R0 g# R& Z
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    8 Q  A" X+ p4 }1 G, i9 g/ }! ?
  4. root 用户;123:密码;如果没有密码则不写
复制代码

5 z. l5 s! B* S0 t. |$ [6 @
/ q  V# i7 l1 c2:查询) W/ i1 O) A& N$ A" K
1 X& b; I4 \5 e# {) Y
  1. <?php3 b/ x; R1 f3 p8 b; y
  2. - q% p2 g% I5 z7 ~
  3. //链接mongodb$ U1 i1 I' \- s  T" M
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & O9 ]; h+ n$ U$ E$ T
  5. # A8 |! T8 S, s( z
  6. //查询
    $ Z% u. z4 }/ V, M* ~/ {& P: O" y, o
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    ! P7 ?& \4 n. j& G3 R
  8. $options = [
    : E. Q& k. t) `1 m2 q
  9.    'projection' => ['_id' => 0], //不输出_id字段+ w  Z+ |% a: e' r9 D* f
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    6 \: Z, _3 [, R
  11. ];
    7 A$ z( w. m7 J7 k- @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求" H( v- n$ C. P( K
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    1 A5 n3 x( Z3 n/ b# j

  14. , u# c# w% O3 u' t  e( |) ]

  15. 2 [0 t1 e& \/ z6 M
  16. foreach ($list as $document) {% r* g5 H9 X% S0 q( }) ^5 W; D
  17.     print_r($document);
    7 }: L2 Y# ]# ]! i( _
  18. }
复制代码

# T/ `6 ]2 J4 X* [4 I0 v查询更多条件使用方法,参考第二节mongodb基本命令,查询2 F# Y( k8 \9 x3 ~* s7 y0 I* M$ |
9 S) j# H( x" \: }
3:添加
  I8 T$ E& s6 k) v8 z# y: j+ `# S# M$ c. v
  1. <?php
    ! \( \6 X7 }' M+ G
  2. $ a" q: }& s# M/ `2 W. ?; h
  3. //链接mongodb
    # I, S. o, j* W) I  [. c7 |+ j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');4 P7 M5 K0 y& H! l3 Y
  5. 8 f9 s* \5 g, i; t; R
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 @0 W" L9 f$ ?* P4 Y! F1 c
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 ~1 U' K+ @! z9 K# [, t% y
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    4 n' T6 ]; X* N2 X$ y
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);9 _+ E  _$ _& V1 {! l5 f" i. [2 j/ h; g
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

2 V6 K: V" O( W$ }7 ?5 X" v4:修改" c; l6 S, {4 g% N) w1 M4 W/ L

3 E& E0 N1 G. y
  1. <?php
    ( N& ~2 p1 V9 F" F9 U( \

  2. ( \+ _- T; w2 O/ C
  3. //链接mongodb
    2 u/ B, B$ m* ]% ^
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 `- Q5 q6 X: h

  5. * w( I8 g$ S) h9 w* \) t( w2 N  h
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行8 }& P' m/ C+ a- ~0 G- x+ y4 c0 P3 t
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ( \$ B% Q, e' @+ W
  8. $bulk->update(" a8 h4 t7 A7 T9 I$ v* ]! u
  9.         ['user_id' => 2],
    ( R( V8 v1 }4 W. h  d! Y$ `( Z0 `- q, @
  10.         ['$set'=>['real_name'=>'中国国']
    7 j9 Z5 }, [8 c1 A& s
  11. ]);
    " N* N4 ]! c( `4 E# b, y$ g3 W
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,( X- c1 w5 E* Z- U" f* }. z
  13. //1:字段不存在会添加一个字段;
    + @" Q- `* P- E& w- [8 W
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert, H1 v7 N8 B0 ~$ ^" h3 a/ O

  15. - z4 i6 [" w0 W' I3 u+ k" V3 Y
  16. ' O9 e. O, C* f- g, \
  17. //如果条件不存在不新增加,可以通过设置upsert$ g, ?6 d9 v* \: h1 l( D- }
  18. //db.collectionName.update(query, obj, upsert, multi);
      Y* u. P! l5 `+ `

  19.   p1 s, F: n1 r5 `* D6 N$ b
  20. $bulk->update(, T: n) q3 ^. S- K/ |6 I0 n+ J
  21.         ['user_id' => 5]," T% D2 b: h, e/ G" ^, a) j2 x
  22.         [* p  `9 [# N: C" v
  23.                 '$set'=>['fff'=>'中国国']" U3 X. c6 ^( K% c9 Z# w
  24.         ],
    - c* e! g" P: K1 N
  25.         ['multi' => true, 'upsert' => false]
    5 T, R: T! T* N1 [6 V! k
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    . `/ T/ P5 }3 d7 E
  27.         //upsert为 treu:表示不存在就新增! o8 x8 E3 S7 A
  28. );- p4 [- o$ P( w) _9 B! D! a
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

* `: V3 {% {# h) G* z4 y: c9 I: B, g
: N0 U. O/ F- s0 Aordered 设置% u$ Z" c2 s  M4 W. [& J

4 p" W9 L; C' G1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。/ k& Z/ ^+ C$ C. ~, S% o
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行# x/ k& ^/ a- o6 T' h0 n
" n$ f# N% g6 d  J6 K( |5 J
5:删除% c6 k8 T/ W5 u$ d0 e
5 A4 q7 b( N* A8 G- [9 a- _
  1. <?php
    : O% ~  m3 ]) O1 V

  2. 9 a& r* v, r' S) d: ^
  3. //链接mongodb
    7 J4 G+ O) b  q3 _  m2 W
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    . g  r4 n: f) Y
  5. . u2 d: P$ ^" _2 \! }* u
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行  x  h# h6 D+ D" l
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行/ x" p4 \9 J2 |+ j
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    ! i; @8 E9 P' n1 `% u7 ?
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合/ N/ o% N: t, e
  10. delete还可以通过limit设置不同删除方式" k- M% u8 Z  y4 W4 A9 R

  11. 7 Y) }3 l6 a! M/ [9 d
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据8 o( ?6 P0 G3 {8 m1 A, F
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

4 ~% g" Q. q. M/ ]9 \- _5 y/ A$ D
- v6 \9 Q2 `1 I, }% x9 ^6:捕获异常
  j0 I; b4 C- E* V! a) w% h9 m3 n% d* r
  1. MongoDB\Driver\Exception\AuthenticationException
    0 @, W5 s) D/ ~
  2. MongoDB\Driver\Exception\BulkWriteException7 Q, R7 |3 \$ U
  3. MongoDB\Driver\Exception\ConnectionException
    0 W& y/ P0 L' w
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    8 Z7 p9 c- v% z9 ~0 S( J$ h5 H
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    & R6 y% U) Q/ J8 A" {
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ) f4 J( P! t, p& w
  7. MongoDB\Driver\Exception\InvalidArgumentException
    0 D; h! v* d1 F) z/ A; ]
  8. MongoDB\Driver\Exception\LogicException
    , h5 {; |4 c; h
  9. MongoDB\Driver\Exception\RuntimeException0 N5 S) @* r6 d& X- y  Y
  10. MongoDB\Driver\Exception\SSLConnectionException
    * _- s6 X4 L' l7 a8 b& e
  11. MongoDB\Driver\Exception\UnexpectedValueException! x8 [% Y( _0 Q& m& \: b# N( w
  12. MongoDB\Driver\Exception\WriteException
复制代码

3 z! ?5 a. E' I& ]) l- j: L
/ _9 q  Z; M* W, E' i1 H1 j9 ]; B
游客,如果您要查看本帖隐藏内容请回复

5 c0 m; c$ y* p8 r点击查看全部
8 c: O( O% m" z
0 R/ v2 a- ]8 y0 g+ P- D- `8 @* v5 ]3 s$ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:05 , Processed in 0.100993 second(s), 20 queries .

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