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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9891|回复: 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不支持以前的写法。
& V$ M/ p: ]- R9 n( a% g3 @
6 r5 b' c9 x% c/ P  v7 V5 `下面用PHP7新的API总结一下:& e7 v2 A! ^* S' h! y/ t

' r: _8 [  `2 c( n1 K) i& _2 n* q一:CURD6 b  x5 ~/ l2 h
4 K* G( p2 P$ `/ Q' |3 a9 |$ X4 O
1:链接* p4 D, C# Z6 [

( D* f, r; O  C4 _
  1. <?php
    ( N- H. Z: P9 V- E8 e
  2. //链接mongodb
    4 A3 o$ }. ]3 e. g
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
      T7 ^3 J4 R! [* N0 [
  4. root 用户;123:密码;如果没有密码则不写
复制代码

0 l% W9 P5 C: ?
: ~$ x% S* C- I7 i0 I5 f2:查询+ J" R+ o* t% m% _8 y5 k

0 y1 l8 R% l2 A& C" w5 D, J8 W
  1. <?php$ t1 O4 Q9 z' n$ o; X  o( T

  2. 8 q! u4 _# [1 d6 m1 `. @0 t
  3. //链接mongodb
    5 V. d9 g* |; D! ?% P
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 i7 v- N. ~: n2 }7 `/ Y
  5. 4 q6 d. V( [7 B/ I6 m2 T% [4 A
  6. //查询
    $ s$ x( q& x9 x; U
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 v0 `8 s" f& `2 b3 {
  8. $options = [5 N, C! W( G7 \! H0 [0 Y6 K
  9.    'projection' => ['_id' => 0], //不输出_id字段
    6 Q& r, K7 F8 n  t* \5 [- ?
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序4 T2 T# E2 l2 u% R3 _
  11. ];
    9 ^- H, ~$ G' l9 R3 b/ Y6 P
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求- j  c. `$ N6 {6 O* o
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* Z9 t0 m# \- _9 q/ [, C4 K

  14. $ {4 k7 E% x6 @7 g" Q0 n- D, n
  15. 4 p" p: T5 z/ ^) e
  16. foreach ($list as $document) {
    $ b/ r. I2 S: Y3 R6 l
  17.     print_r($document); , ]0 }' F; ~1 I
  18. }
复制代码
; v3 c& m% K3 u" e1 M+ K1 s
查询更多条件使用方法,参考第二节mongodb基本命令,查询+ T# ~) I7 s& ?- G* B

2 o6 B6 `# j/ ~) x7 T, q% L3:添加. W" W1 m: |) V! R/ Z1 K" ~
3 B3 F7 a6 e3 J; R. R% U
  1. <?php
    ' q5 Q) }) ]' ?: r1 L, T6 G

  2. 8 M9 t1 q& i) o5 t
  3. //链接mongodb. n. h$ @: p5 Q' J: e+ t- Z
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 D! G' `! |3 \) Z+ U* V4 r, l+ P

  5. 8 {) b+ P8 \, T) g1 U4 f; w* {
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ z6 i4 J9 L, |) o5 ^2 O. L# I% M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + U7 |; l; K6 w% s& l0 K
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    $ e* a- x; O5 W% B
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
      d1 O. G: A7 H* s2 x4 Q
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

/ Q3 L# Z9 R% P. f# d4:修改2 Y6 a/ u, e+ Y: v- ]' T

+ _/ h- c3 b* R9 B! j
  1. <?php6 C& g# x3 l! N5 h

  2. 2 Y+ d  ?  F: r* }; ~/ i7 o
  3. //链接mongodb
    ) q- I! f5 {- R+ o- B. S( j
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : Q: @- _& C' a4 k( W

  5. 9 \, e5 K0 M! `; }) [
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ; i9 q* P0 P: h
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* s8 Z+ g( g. F  I) v  l7 w
  8. $bulk->update(
    * [# o9 s( f/ ~4 e" f& x( n6 b6 X( t" x
  9.         ['user_id' => 2],
    * D0 F3 g9 r4 |1 `
  10.         ['$set'=>['real_name'=>'中国国']7 N$ U+ D1 O! x5 o
  11. ]);
    ! I8 x& k. ]! d  p" [7 c% a# Z
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方," y- k9 r4 Q, z. ?
  13. //1:字段不存在会添加一个字段;
    : z' V* X3 @! [  B
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert* \( v' |0 J) j+ }/ q
  15. $ T, T7 x) ]/ E5 \% u

  16.   Y5 Y7 Y9 m4 P0 }) p
  17. //如果条件不存在不新增加,可以通过设置upsert
    : [) o5 y! s1 e( |
  18. //db.collectionName.update(query, obj, upsert, multi);6 x/ [2 b' }0 c) N* f9 A
  19. , ]9 q+ p+ i, b& D: b
  20. $bulk->update(4 {/ b3 d4 h5 f
  21.         ['user_id' => 5],
    ; n/ g: v5 x- g) }* G+ @
  22.         [
    ) U- Q% M; o: {8 ^8 Q; u4 I
  23.                 '$set'=>['fff'=>'中国国']) }/ L" o; C5 p1 r5 d5 u  k3 w
  24.         ],, j2 S( W, o7 x; U( P6 e8 L
  25.         ['multi' => true, 'upsert' => false] # }+ }# T4 O6 B
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条/ @. n0 j4 `3 k1 G' v& S
  27.         //upsert为 treu:表示不存在就新增, b7 x2 ^% t6 g3 i
  28. );: t$ U. Y, ]" D$ |) z. ~
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, D0 x$ h6 S) B, T! w' y
2 A# r/ A2 W* a  V) ?* `/ z& X
ordered 设置5 I* a1 ]8 o' e2 p: d$ H
$ O; C  M4 H+ b+ H- |8 b
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: q3 `5 u8 [. Q4 E9 z
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
, P4 q! m" Q+ n* n0 h' N! f% {( ?& f/ N, \3 f, P  y8 u- o
5:删除
& D" T  ]5 f- S0 j. C+ t
1 ~1 q: k: z  L) b
  1. <?php5 {2 \0 Y: L0 E) @& O* ~
  2. 3 D3 r7 c/ Q$ H2 j
  3. //链接mongodb
    - T$ p; q% @4 H8 K7 v
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; b4 p7 j% k- _. [
  5. 2 W& |, _- a9 z3 Z' J8 E
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) [7 c, [8 y% o/ f! z- q9 b$ w: P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( R0 y1 i+ l0 [% k. O
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段) T+ `2 f- |( _' K
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    * b/ U( ^7 ^; C, T' N* b
  10. delete还可以通过limit设置不同删除方式
    9 f+ V5 @; l& q: V6 J; G
  11. 2 l" U: Q9 ^1 e, e4 @4 T! |
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    9 i) E; B  [7 Y2 d
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
1 Q$ W& g& ]6 c# C& P/ e& L# d! b( z
. K  m2 A& Q1 v2 l$ w; P# l
6:捕获异常+ R1 U# h1 a% Z! F7 _: }! ^5 a

: T8 w' w8 r4 l9 f7 q2 h( L
  1. MongoDB\Driver\Exception\AuthenticationException
    3 K% Q; ]) q8 ]5 x6 C3 Z
  2. MongoDB\Driver\Exception\BulkWriteException5 Q$ D# I" v% h' o' X
  3. MongoDB\Driver\Exception\ConnectionException9 X# h8 ?* r8 D  |! ]
  4. MongoDB\Driver\Exception\ConnectionTimeoutException2 y7 F; g% a% ]  {" P% t4 U  B% e
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口: A  E% k% J4 R
  6. MongoDB\Driver\Exception\ExecutionTimeoutException  {4 Y8 i, F- h! I! l
  7. MongoDB\Driver\Exception\InvalidArgumentException8 y$ i. k( b8 i0 T" R
  8. MongoDB\Driver\Exception\LogicException9 V/ d+ I; q# a" J+ \
  9. MongoDB\Driver\Exception\RuntimeException4 O' ^: C% b0 W4 x& y
  10. MongoDB\Driver\Exception\SSLConnectionException
    1 d2 n+ `" u4 M
  11. MongoDB\Driver\Exception\UnexpectedValueException
    2 j5 U" Y; F* R; k1 v3 t
  12. MongoDB\Driver\Exception\WriteException
复制代码
9 p8 Q2 A+ j# x1 X
/ v. t' k+ M0 C; M# p7 P& {
游客,如果您要查看本帖隐藏内容请回复

; o* D( k% o. _; a2 g点击查看全部$ ^- }8 H4 j& Z
+ {* i' y2 N5 D5 @/ b
) Y4 ^4 j7 [0 g0 J+ u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 09:33 , Processed in 0.138177 second(s), 20 queries .

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