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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14462|回复: 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不支持以前的写法。
$ |6 p5 f# S/ v* L0 S' e1 Y: J3 o! ?% d+ s! ]
下面用PHP7新的API总结一下:/ ~$ R- x5 m: f
; ~. Z7 r6 j8 ]0 r
一:CURD4 t6 Z! f( e( ~  \7 A" Z
0 P, ]$ Q0 t& y  A, G# H$ F6 E- G! s' c
1:链接5 b: |( \# k% `4 Z  _+ S: q
& v/ {$ B' E2 ~' B" t
  1. <?php$ b  n- |1 j9 \- `, f* S) a0 X# R
  2. //链接mongodb- ]$ z3 U& G$ _
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
    ' k. W0 ?" O8 F8 p8 C% i! \2 q
  4. root 用户;123:密码;如果没有密码则不写
复制代码
- S+ Y- \  C; L; c/ I- H- I

! c6 @- Z! P! T; ~$ ~) @4 _2:查询- {9 h9 M( O( v0 g: N- g
) a3 n7 {$ t5 N# b! y8 y
  1. <?php
    $ J5 h7 _/ Z9 u9 N. `; l2 Y5 Z" H! ?

  2. 4 A5 R" Y2 A( l) V- i; s+ _
  3. //链接mongodb
    4 Q) e. ~, G5 e7 `: t* x2 r2 [
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 I1 t$ A- t* w: G4 \

  5. 8 W  w& i0 O# r4 [* ]5 g: H- v
  6. //查询
    # V. ~( {( k5 y3 g9 J5 ^0 G' S  [
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    9 E0 w! w7 Y6 [8 P* {+ N
  8. $options = [
      d. l( Z. K& W6 i# w$ {$ E
  9.    'projection' => ['_id' => 0], //不输出_id字段' A# O" F" z) l( `* Z9 K: x
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序0 [0 x( L* Q1 q2 t* G# O! J
  11. ];
    1 G; O8 a( L5 q% Q6 w0 @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求1 n4 S$ q, l: k! h0 d
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    # w6 L) ]; {# B. z( ~; p
  14. * d: M. f, S/ u+ y7 B
  15. $ r" C+ g6 @2 p0 ?' U  @
  16. foreach ($list as $document) {
    % ^* n9 v" U% v
  17.     print_r($document); 2 N2 {* |  C/ y- u/ z' r' `
  18. }
复制代码
5 \6 I7 P8 k: t7 B' R; g- X6 B
查询更多条件使用方法,参考第二节mongodb基本命令,查询0 I& a9 c8 {' J* S0 q
) f$ }8 w/ A3 K- i0 R
3:添加
& q; v% B  G# W
% y9 k; p3 m3 q6 h: \1 C4 b' M$ e
  1. <?php
    4 `% l* L6 n& z

  2. , p/ X3 J) R5 b( `' S. v( A  L
  3. //链接mongodb
    2 ]- D! ^5 @+ s
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% A4 t7 [* |) C1 \5 _+ j1 c; _

  5. - y6 f- W! o6 q( s
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行- i" c8 V. o) e8 S  n& R- Y' o
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    % O. e- S3 U9 V7 }3 w+ f5 @; B
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);* u) T8 H4 X; c3 s/ j# A$ ~
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);4 B6 _5 Z6 A% m4 a) x
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. ]- ?2 D5 A6 h
4:修改
0 j, n3 x' h# D+ ]. j
3 E" A4 h5 p( I7 B9 _
  1. <?php  U" t# U* M" k# I; m
  2. + J& o# U8 c" M$ }- ^" e% z
  3. //链接mongodb0 M. T' Z* x4 U. t5 \" \
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% m+ _# S- E7 C+ L
  5. $ t. ?5 S' s. O- A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行1 B2 n" |0 v- S/ A# b
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    + ^1 e" j- C, w4 l9 z. O! b3 R* j3 x
  8. $bulk->update(# o$ y$ }: K% m; C# n: b
  9.         ['user_id' => 2],
    + Y9 K# Q- `- z: D; Q
  10.         ['$set'=>['real_name'=>'中国国']2 V* Z( k+ o3 t( I& f) ]
  11. ]);
    8 |. P6 c; N  X; P: _8 R4 C  y. o
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    ( ~8 e! ]4 v* C* c- m
  13. //1:字段不存在会添加一个字段;: x, {8 E2 x/ m/ k& ^
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert; i$ E( V9 B$ o+ k: V
  15. 9 y2 N5 y8 e- B" z
  16. 1 q* y% e( s5 r; q
  17. //如果条件不存在不新增加,可以通过设置upsert
    ' k  k1 q: I3 k# J
  18. //db.collectionName.update(query, obj, upsert, multi);; F' k# v% b/ Y
  19. " F( r* f" P0 I
  20. $bulk->update(2 H9 ^( v1 K1 S3 w
  21.         ['user_id' => 5],. T$ y  X: W; K
  22.         [, q9 @: {# u! Z% V
  23.                 '$set'=>['fff'=>'中国国']
    - n* h2 {' Z( v+ P
  24.         ],
      I; D( \6 @4 q3 C7 w
  25.         ['multi' => true, 'upsert' => false] ) L8 N) B$ _/ _* {# {
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条4 `/ ~* v* g: B( }) a
  27.         //upsert为 treu:表示不存在就新增# a! s6 i" ?& T. n8 z
  28. );$ ?. s" b8 v3 q/ @/ {
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
4 K/ ^* _: d( r, ]6 p& J

5 L+ y' S3 P" Z: W8 Z- C# \ordered 设置
5 w6 T5 U) v! I: H; [, s* a, b1 w: V7 u. E6 z& @
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
$ a! }+ |4 [4 d3 z1 S3 I( ?2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
# h4 c$ K! w6 X2 S; [; [9 t# W5 F2 {# m* i
5:删除
: X$ s3 z# C+ l7 ?$ M7 z; H- P9 A; d. y/ ]
  1. <?php
    4 x. [1 ?  J0 n5 ~5 @( i: K
  2. , O% H7 t9 j& c, C0 y
  3. //链接mongodb( L. M+ o9 A5 s$ }
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');8 q1 n+ S  y) J
  5. 2 N8 m- G- u$ z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
      H' B- A! r6 g! w& D
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    9 ^4 V) K- B! c% S
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    9 n/ q2 t! E. p4 h- x2 V) h
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    9 M' k$ ^/ T* M
  10. delete还可以通过limit设置不同删除方式
    9 @: {) g! h# t6 P' ~& h2 ]

  11. $ _& G* W1 m/ ~
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    - g  k8 A- K3 m' W2 g- ^
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

- A$ J1 b( M+ a. p0 [" j  n6 V6 l$ Y( d. _) U
6:捕获异常
+ g% i- v/ ]! u8 \/ w6 P' x- j# \" a* {. V, P  V1 v. a8 G- }
  1. MongoDB\Driver\Exception\AuthenticationException
    . H# u9 D6 P; c! J9 W# C
  2. MongoDB\Driver\Exception\BulkWriteException/ |) c8 r/ G" R
  3. MongoDB\Driver\Exception\ConnectionException
    + \" M- v* H3 T* Q( C
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    ! r& r. ~. z+ w& f
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! _6 y4 o3 Q" _! j
  6. MongoDB\Driver\Exception\ExecutionTimeoutException4 Q0 s  ]  U: p) @
  7. MongoDB\Driver\Exception\InvalidArgumentException
    6 G! X7 _( k! v: U) L5 E
  8. MongoDB\Driver\Exception\LogicException, J* Z) K; P: B1 d% J2 D
  9. MongoDB\Driver\Exception\RuntimeException1 G6 q$ a6 n; _6 K5 C
  10. MongoDB\Driver\Exception\SSLConnectionException
    $ D6 q& w1 `% f. G
  11. MongoDB\Driver\Exception\UnexpectedValueException1 `( d3 E" V" v' \) ?* U
  12. MongoDB\Driver\Exception\WriteException
复制代码
$ h% R( J; u* k6 F& h
2 D9 y7 ?, L# N* }9 u
游客,如果您要查看本帖隐藏内容请回复
! L/ t! @5 J0 _1 R9 m
点击查看全部. K" H3 g! `/ g8 T. e, h
& ?* C+ L5 K; e* p) \* u
0 k' S5 h0 v' d( `# d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:46 , Processed in 0.053319 second(s), 20 queries .

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