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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9890|回复: 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不支持以前的写法。
, _. S; P8 u3 ]" y( g. J1 G* n) ~, m& u
下面用PHP7新的API总结一下:
3 ]& L5 q# C1 U: U: Q  y/ a! j; E- E: ~6 o
一:CURD9 b1 J/ G+ i5 g: R; y
8 i3 A9 l3 x! M5 F) S' i  f
1:链接2 R3 R' a8 y, A4 ^0 I# {. }2 @% s2 E
9 n1 R7 V2 ?& ]4 a/ G3 }% t) P. ]; u
  1. <?php. N$ ~9 c- x6 d! r
  2. //链接mongodb
    9 |5 Y9 C; K8 ]( ]1 s2 b% F4 p
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');/ s6 l9 n- U" z) Q. g8 g
  4. root 用户;123:密码;如果没有密码则不写
复制代码
% \+ Y7 T- m1 L; o" e0 o

# J4 A, d7 P+ E- B) J9 L2 ]& ?2:查询
$ @2 }$ u. X: I* R# i  G6 K! r9 ~0 P  z! V. S6 T+ P5 w
  1. <?php
    ( ?: r1 `2 g8 @. p) B) r( u1 \
  2. & A( B  @6 d9 I" h3 R/ c
  3. //链接mongodb
    1 N) h5 B/ D  x& s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    2 F$ f/ u! d. b5 Z
  5. : k6 l6 B1 l, [7 Q+ ]% p$ X
  6. //查询0 G5 x$ v5 o! L1 h  n" n1 L
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0% i/ D! y' _  X6 w6 R" Z* |
  8. $options = [7 N( w0 z4 H- |7 }. ^  X4 ]
  9.    'projection' => ['_id' => 0], //不输出_id字段
    * C$ W' u0 B" P+ b6 M% d
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- n( P9 m; U+ r
  11. ];
    4 ~4 N. {4 b2 G4 J7 a
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 M* j8 K, a; U% `+ n  q0 S- B
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # f! I5 E$ _$ z. `3 @
  14. ' U" q- s+ I% K) U9 _

  15. ) Q1 `0 K. Z3 d
  16. foreach ($list as $document) {
    ' R5 D8 o: \6 n! Z5 D7 Y) H3 j! d; `
  17.     print_r($document); $ ^5 s& @: F# D) N0 I" E% g
  18. }
复制代码

5 Y! E4 x% H$ n查询更多条件使用方法,参考第二节mongodb基本命令,查询
0 }7 K: B' t* ]
" y7 ]! A) o  m2 ?9 z& N% U- H3:添加
7 C8 l& G+ X, g# [7 n: R4 r3 T0 y5 o0 T% M: ^) l$ B' Z3 |3 z3 W, z. z
  1. <?php
    ! l5 ]: H% L, [9 T8 P, n

  2. : f4 {# A% M* `4 b5 R& J% d  y
  3. //链接mongodb
    0 m) p; \2 p( c6 I
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    3 O$ C) S: q) L+ ]/ F% L

  5. % x, a& B. ^2 K4 n1 c2 p7 `) c
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 }! r4 E5 Y" {0 Y' M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    1 t# Z* e' N+ c" J3 @7 d: E( @
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    # Z4 q" @7 f% O+ T+ a$ _
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    # W. |  {5 b  Q; ?9 x( Z9 B
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
  j# z! N0 P4 e' ?! X
4:修改
* S0 E4 k! B: M+ J& i( A
4 Y, [0 @& k+ d' L" Y$ r
  1. <?php
    % L) R0 V& e  j- m+ }

  2. # j+ P6 ~- C0 D$ \6 U4 f
  3. //链接mongodb
    6 J2 n9 k: U# Z; V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 ?1 `  w& f/ D# m5 [  U2 ?
  5. % m( k5 x, d) u3 ~5 a/ r
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( D& U5 `/ ]" I0 R
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 D. M4 P6 a8 o% v/ x% s# f8 B
  8. $bulk->update(
    ; `: u( V/ B' l/ E- y! w
  9.         ['user_id' => 2],
    8 u: A* u" v) M+ {7 u- [
  10.         ['$set'=>['real_name'=>'中国国']
    1 z, h8 o2 u2 a
  11. ]); $ M" F1 i7 P5 a) l
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 Y2 y- Q4 N9 x: |9 f) u1 @  `
  13. //1:字段不存在会添加一个字段;
    1 G# N1 c5 Y( h4 N; p
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert$ |; z( I2 c: w/ O  O: C6 n

  15. . I6 b* b" y1 V, X2 H. Z0 I
  16. " g/ Z, U; h$ s9 N; _$ ~9 ?
  17. //如果条件不存在不新增加,可以通过设置upsert( w# u+ k) y" C9 z5 H0 M" q
  18. //db.collectionName.update(query, obj, upsert, multi);- _7 B0 j- ~" H, Y# W0 a+ Y8 o6 ^

  19. 8 Y9 |" }5 h6 |# r  Z
  20. $bulk->update(; @% @* L- ?. v5 ~2 Y( J+ ^% b
  21.         ['user_id' => 5],& w# P  X3 s$ f1 `
  22.         [. a- ]6 [" C0 {! _* D& t
  23.                 '$set'=>['fff'=>'中国国']& i- Z: t6 {; B/ a) o
  24.         ],# O) z2 ]* z8 l" N! k/ o
  25.         ['multi' => true, 'upsert' => false] : t- d9 p7 I9 q. F9 z6 f
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' q: c  w# t7 p' }
  27.         //upsert为 treu:表示不存在就新增: [) u; s9 j1 ?% Y. ?% h
  28. );: k& s- x$ ?* k
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

# G5 ~7 Y6 T2 _* y
+ F" Q. P2 L8 ], Z7 x" G* Bordered 设置: w0 \7 Y4 Y( F1 A$ N8 u

6 G- A# g" c: g" R1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。' G0 Y1 }3 y  i4 s4 U8 A. I% G
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& Y& ~4 N* q1 v/ l: s) C
8 \$ v: e' g6 v& H- {0 j2 b
5:删除  e  R! d' b, M. m4 }
/ f% N# f$ a  k
  1. <?php
    ! d* f8 l( g2 D- ?8 L

  2. 7 q+ K5 c9 \$ e+ E/ c6 e
  3. //链接mongodb& d7 F$ k1 U/ w& Z0 G+ B
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 m* ?6 m; R* ^

  5. ! t9 k$ g) ^7 r1 g/ y0 x( V5 V
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 r3 G$ M- [/ g* h( o0 f3 f! V
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    # j* }8 x  I5 [' v+ ~% A
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    . m# S3 |, w, Y5 ]
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合2 w" K# ~) |; X4 m6 V
  10. delete还可以通过limit设置不同删除方式
    4 S$ B- r: I3 y- e
  11. # K( o  z3 q- Z* ]; R0 M
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据+ y. g' A- e2 b* v" p" k1 V! g  g
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
- M6 @+ ^3 v7 m# c2 ?  l9 h

5 V4 R- C- Q/ k7 r6:捕获异常9 j% D2 g. E: U* P' R. ?9 h1 f

) z: S0 |3 i4 F. @
  1. MongoDB\Driver\Exception\AuthenticationException
    7 V, {2 D$ C# r/ g6 O: h& J
  2. MongoDB\Driver\Exception\BulkWriteException1 h3 D4 O. Q! }8 C4 O5 N
  3. MongoDB\Driver\Exception\ConnectionException
    5 f% l+ h1 p8 {4 Y
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    - S: T' u* o* E5 y) {# y: o: m7 R0 v
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    9 X1 Q3 E' t- M
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    - G5 S' F* [  b+ b; a" k8 x0 \9 j6 B
  7. MongoDB\Driver\Exception\InvalidArgumentException
    , R! j: u5 [6 _% U& o
  8. MongoDB\Driver\Exception\LogicException
    * e) J  J6 ^6 d; D- |2 `& ?
  9. MongoDB\Driver\Exception\RuntimeException4 T2 c* |+ |  \; S# L
  10. MongoDB\Driver\Exception\SSLConnectionException& D8 k5 L7 Y8 |1 g
  11. MongoDB\Driver\Exception\UnexpectedValueException& T- K5 F/ @3 b) R7 V3 ]4 o+ T
  12. MongoDB\Driver\Exception\WriteException
复制代码

7 j2 Y! X! E" L  O% ?, u* \$ t8 o* F7 ]8 x- ~  F" d4 P. I' l0 \
游客,如果您要查看本帖隐藏内容请回复

% r% l7 h! ~% |& z2 d! F8 b8 k( j点击查看全部6 s2 o; }1 `  U+ A( i) Z1 i8 p

+ k4 J5 {, q+ y/ l2 [5 j* s8 I+ H
5 D5 K# Z2 h3 A& P/ K+ w/ i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 09:01 , Processed in 0.105218 second(s), 21 queries .

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