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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15362|回复: 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不支持以前的写法。* c& D/ [8 ~- k! [  E

2 v( f) r% n7 w8 c下面用PHP7新的API总结一下:' e  F& Q8 ?5 R
' a. R  \) C3 O& i. \7 N5 z* _
一:CURD
3 x3 \5 T1 _& R7 n7 U2 ^) a% k) k! K; m5 K+ ~% N2 ]" k
1:链接
& A, l2 ]' g) K  p6 k1 }8 _8 [7 U8 {
  1. <?php0 C; T  x8 |' q/ w* f7 l
  2. //链接mongodb
    4 l' i* C4 T# o, O$ C% ]
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');2 ~5 o. J0 Z. L, f! k
  4. root 用户;123:密码;如果没有密码则不写
复制代码

% D0 ?7 }. C5 g* P5 G; i4 D3 [
1 U, e/ ^4 G& J' J) _$ b" e2:查询1 v; B: G8 w/ }9 {

# J8 E) e- j: h. f. U
  1. <?php
    3 K% c2 M+ F4 h7 I

  2. - n  N; X* l: d
  3. //链接mongodb/ T. D; K" Z$ j/ z$ e% q# |
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    : r7 ^& m: h5 h" N# Q! e8 Z3 V3 e5 P

  5.   E" z- @+ z6 m/ ~) T" t8 R' Q
  6. //查询
    0 z! \5 e) C/ w. L0 J$ w
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    6 o2 ^9 r( K( ?' \, O
  8. $options = [
    0 M3 F8 n* h: h; b
  9.    'projection' => ['_id' => 0], //不输出_id字段
    7 ~4 b$ C% q" G1 @- \2 x
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    3 S- q. ]$ F* d+ s/ Z, H) c
  11. ];
    5 s$ O! A! N; ]& @
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求7 d: O! c. h: P; ~$ y+ {. o. F- ^
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    ; I8 V, {' G$ Y( q4 T
  14. 1 ]( f5 V' G" x7 \
  15. - f% r3 K" @& X- i0 L* [
  16. foreach ($list as $document) {8 ~9 e% A8 I  L
  17.     print_r($document); % r5 x$ H# ?  v% @( m
  18. }
复制代码

1 F! J" g8 i& N  N- R; T9 c* x查询更多条件使用方法,参考第二节mongodb基本命令,查询# h+ f0 j8 P9 o" u2 B1 j" r

' q: R. o: \# e$ m2 J3:添加1 @5 F9 k1 q! E$ l! z( f: `2 l% R

4 x, T# l/ v! f! z$ o
  1. <?php
    7 K) N6 h. l9 O
  2. 1 J8 n$ {! }8 _3 B5 j7 N
  3. //链接mongodb( s, H: m8 E3 l8 U* ~7 ~
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 W0 @( u* q) l

  5. 5 F" T2 O( g/ z! T
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) t5 g) X3 B/ t8 }3 i' a/ C
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    6 M' c+ }: r. Z$ [* y
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);2 ^/ |, D. j; I( ~, P  ~$ q, }
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    $ w9 K; x4 L( z/ u$ v# ^  @
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ C( Y! s( F7 s" {3 E$ B6 F
4:修改7 B1 O! Z/ `  q- V% I. [2 x

, e$ t( f8 m. [( a- {
  1. <?php5 x7 a2 K7 }! @4 W4 `2 v

  2. ( C; G9 h) W# k3 a
  3. //链接mongodb
    ! `' i0 c7 r5 P7 n- u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. v2 a) `  `/ N

  5. , R0 G- c  v' c  c8 @+ Y8 Z
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    4 ~; q- O8 [3 d) c+ z$ Q8 t8 M
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行0 m$ U3 s( `9 z6 D: \. o& ]5 ~# x" ^
  8. $bulk->update($ c7 Z3 ?: h* J2 Z
  9.         ['user_id' => 2],
    * _& P! e" Z" b3 A8 N
  10.         ['$set'=>['real_name'=>'中国国']
    : X; Q+ J: s, i' _8 f; c
  11. ]); ' P$ X6 s; L( X7 J6 n% I- x
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,8 o, |$ Q5 N+ c0 A- f1 A' ?
  13. //1:字段不存在会添加一个字段;
    $ F$ y0 \' V/ h0 v* n$ m
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert& p3 a$ y& e. Y' J6 F

  15. $ J: t' G. b9 r6 q: s" m9 _8 ?* \

  16. 8 @4 A9 L7 ~$ g! c5 y$ P3 B
  17. //如果条件不存在不新增加,可以通过设置upsert' a; n4 Q+ `9 E, x$ S" @# {
  18. //db.collectionName.update(query, obj, upsert, multi);9 G, U( T1 k  N9 t* j1 s: M

  19. $ [5 y- {7 f& J* J# W
  20. $bulk->update(
    7 ]2 H2 s& W/ z5 W2 Y
  21.         ['user_id' => 5],
    2 d6 K$ B4 r- E3 W7 Z7 c
  22.         [
    ; g0 k& Y# C' j3 b$ i7 u& h  u9 \1 t7 x
  23.                 '$set'=>['fff'=>'中国国']. |% |6 q8 Y2 `7 l) f8 i- I
  24.         ],
    - l0 q8 ~7 M9 b% V5 M  f
  25.         ['multi' => true, 'upsert' => false]
    " O0 M( `& ?9 Z8 Y) j. Z/ B
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    * Y% S/ f1 F& C* z! R! E
  27.         //upsert为 treu:表示不存在就新增
    6 m3 M/ j- w6 p8 R4 H
  28. );
    * D( F4 G; C4 D! L7 _
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

& i1 k7 |2 x4 c7 c9 H7 u
! u' O4 Z: i. s, X2 [! E( kordered 设置* A) A, C5 ~4 c1 M: |
; O9 B6 D; z9 c- C; G
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 q+ J# x& k, i, b$ [2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! M' f' U* f5 Z" ?  K% C
6 a8 |; o# ~! X
5:删除0 B, X2 M6 Z& C( [
) _3 e; ~  L! @4 z
  1. <?php% H, u; m+ z' a9 h% t
  2. 3 m' T3 t+ M: k  ~3 R0 c
  3. //链接mongodb
    8 ]- ~: s7 U9 B; D, h; c
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 E2 F0 S( A. O8 B

  5. 1 c1 F/ Q3 Y- c2 W* r9 W1 c+ g8 z) a
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, B+ j" B3 w) W4 `& L8 Q/ A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ ^$ a& _  Z! ]9 ^( ?: C
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段4 @6 J) `' n6 y
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    : z5 b1 |+ }0 O
  10. delete还可以通过limit设置不同删除方式# D. r- j# S# [8 X

  11. 9 C5 {' P9 m1 t+ u+ [5 @
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    " s. K; O) i5 S
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
+ b3 D. k1 R) i& |2 H

' @: z& w8 }7 }5 E$ n6:捕获异常% _: x1 z0 [$ _/ b: ^

9 t. c; m$ ]0 Y
  1. MongoDB\Driver\Exception\AuthenticationException$ p) H. D6 b' j
  2. MongoDB\Driver\Exception\BulkWriteException
    - b1 I) ~6 t9 {7 S
  3. MongoDB\Driver\Exception\ConnectionException2 Y$ [, ^3 h" t$ ]4 w
  4. MongoDB\Driver\Exception\ConnectionTimeoutException. \9 |9 ]  S' k( w
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    + ?# K3 k; I; o% Y
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    8 I4 S( ~0 w) ?6 ^9 g
  7. MongoDB\Driver\Exception\InvalidArgumentException/ v  j7 p* T3 E" R3 r4 t
  8. MongoDB\Driver\Exception\LogicException+ x: C" F! w: S( {, h
  9. MongoDB\Driver\Exception\RuntimeException( k1 L& s! \; F0 d3 _
  10. MongoDB\Driver\Exception\SSLConnectionException
    * L' X9 ]4 b8 e$ A: u0 L
  11. MongoDB\Driver\Exception\UnexpectedValueException& R. Z( w! \9 |2 }+ Z, O
  12. MongoDB\Driver\Exception\WriteException
复制代码
6 F: P& i) K& n

) B/ }' G7 _+ s# i& r
游客,如果您要查看本帖隐藏内容请回复
1 B4 B& a- v3 L
点击查看全部
8 v- H- }6 {" S; p) P7 m8 @/ q: T# _9 U1 M! G/ O

5 e7 i$ F, P8 z2 z: K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 12:33 , Processed in 0.054535 second(s), 19 queries .

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