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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14737|回复: 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不支持以前的写法。0 D" a, `+ H7 P' x$ J  E

; ^  M7 r: Q8 U3 B下面用PHP7新的API总结一下:
6 R/ }+ m2 [: n1 ?# r! ~
' e3 X) g: W$ f% n/ J一:CURD
2 b3 i$ w5 `1 h1 P! a. P) w  e; j9 X1 n
1:链接
- s! A! b3 D  t+ n9 G: p4 l4 i1 Z5 n! O2 P* q7 e  [
  1. <?php
    # V9 G. b( I% F: k
  2. //链接mongodb( K, Q8 E3 V3 m5 ^
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
      k3 q" k4 v7 x$ X% i' e+ B1 W
  4. root 用户;123:密码;如果没有密码则不写
复制代码

( h) W  l1 ^3 \  X+ h" P* J5 N* U, K6 Z4 Z
2:查询' Q2 w5 P9 J! u' C4 _
* k, f7 ]3 j" q: j- e1 D# @
  1. <?php8 s& [1 F9 m; P5 T7 N. j; Q) Q4 l2 {
  2. ! e7 `4 m( y$ \; c- \
  3. //链接mongodb
    ) F" ]* w  {2 w7 H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    & R* D! H- f8 M! M4 G" O
  5. 0 r6 _/ v7 I) g% Q0 S
  6. //查询
    9 `2 M4 ]' z1 L' q& d
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    3 b. y- o$ k% t9 \  r
  8. $options = [
    ) q9 b+ a/ k' m! g
  9.    'projection' => ['_id' => 0], //不输出_id字段
    , Q. c; P0 T% ~  J0 l
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序6 i- b8 B% Z  c
  11. ];7 a# @+ J# _8 ^8 M, @& H
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    2 N8 M( a* m7 L& t, I$ b' r5 M1 q7 }) b
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
    * S0 I5 L0 S- Z$ Q1 P- P- N. g5 v

  14. % O' C- \$ O3 i* k# I8 G
  15. ! D6 M8 p  D4 E" B& ]) R
  16. foreach ($list as $document) {
    & ]3 d% F1 f: ]: W+ p  `) m
  17.     print_r($document);
    / P+ `: ~2 o/ }! C
  18. }
复制代码

! \! V5 {; K8 B* h' x8 f查询更多条件使用方法,参考第二节mongodb基本命令,查询
; M% N$ _4 Y" I+ Z7 N! e  N6 D# w& s" L/ e# S0 w: i
3:添加$ t$ F! V; b5 u- V
9 d6 @+ Q) P" T* A
  1. <?php
    5 s) V' J/ p' x3 z* J5 v5 R
  2. ! u( V' J, r% Q4 @
  3. //链接mongodb6 j4 y( k9 x. ^! A4 ?& q. [$ s( \
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ]7 _0 C! z; z3 y, G' K' T# S

  5. ; e2 M9 l8 ?0 a) [7 B& f( O
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ c3 T; c  N- M3 `6 k8 d/ p
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行$ W# J: `2 J; q  C7 ~, d/ u
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);  C: v/ z/ X1 v, E9 ?
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
    + [" R  g/ x( e5 o. C& s/ ~3 ?) i
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
  m. ]" n- m4 U5 u8 `- V2 [
4:修改- f4 G% e6 _% O* y3 S- z

+ b1 ~4 @  h# O) s" X+ x
  1. <?php  [, c, B/ ?( @* s0 k) t

  2. " ^0 r  h' U6 D
  3. //链接mongodb
    * P/ U" U! c: {# i/ H
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 i' G% o9 i' _

  5. ; _' w5 b$ c* }5 @# E& q% k/ y
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    , p9 n3 L  f# |5 d0 ?
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    5 ]/ D! s7 F+ Z  D3 K! T
  8. $bulk->update(0 i; m6 v8 p0 @# C9 ?
  9.         ['user_id' => 2],
    ' l" N6 g) \* {- i4 T' a
  10.         ['$set'=>['real_name'=>'中国国']# D; A( `+ {- H5 K& \% @
  11. ]); 2 d6 L; f1 q1 x- P* f+ L9 p
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    8 t( z+ j% v( a0 T7 t/ y* o3 c
  13. //1:字段不存在会添加一个字段;
    : X6 D" T7 z1 X8 f# N) T
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert. Q, x& s; j3 U! Y2 F! r' M

  15. ! {; A2 D& D; n/ G8 S  C
  16. * R6 T6 K. R, W, q8 X7 d
  17. //如果条件不存在不新增加,可以通过设置upsert
    # \, [  Z- b( j: l
  18. //db.collectionName.update(query, obj, upsert, multi);9 f6 m0 z0 s9 f0 p; K# ^

  19. ( b+ e# N6 x: s6 f/ Y
  20. $bulk->update(
    $ C! c% g0 a, y* I$ w- y! C7 m
  21.         ['user_id' => 5],& @0 S  _. f  K; J  V  |0 ~, j
  22.         [
    ) y7 {& S: X/ \! Y& J4 O* T
  23.                 '$set'=>['fff'=>'中国国']  D) T" J/ {8 h4 k
  24.         ],
    . e% ~9 m( \5 I9 }
  25.         ['multi' => true, 'upsert' => false]
    % c; k& D  E% j0 `( ]- `8 G9 d
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条' W. E; F, g6 Y; N1 e( V8 b
  27.         //upsert为 treu:表示不存在就新增3 s& Z5 I! F' i& Z/ B- a% a
  28. );- P1 s. X9 b' E; b$ @/ [
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, [/ ]7 A0 r8 }0 ~- N
6 d$ q3 P0 U9 ~, S0 n% c) X' c- I, O$ Nordered 设置3 T8 X6 a8 B% w; z8 b( m/ R6 h. V" K

' _2 P' i- |2 u3 X1 W: K8 }1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
: n$ ^2 _) ^4 h6 U, G" u8 i8 a' |2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
, Y7 _4 a# p# K: Q( w, L3 s
2 R, ?& H5 z% e1 R. Z  c. z5:删除
  k" [9 S; f6 G! Q2 N) }% U. j, Z$ @, g# _; [( U
  1. <?php/ h- z# L7 E3 v! G2 H

  2. ) @5 F' K; F. f. W7 ]9 g& R
  3. //链接mongodb! e4 q1 A' }  c% y- H* A4 A
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    0 ^5 A+ _4 c+ z2 Q+ r! R

  5. * T* h) p# |. I' n7 R1 D' c, ?/ W& m
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行2 F* x. V) T0 O; c) w2 P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    * \! v& f4 x$ s5 _. A; |
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段  }1 {3 T3 ~+ i; ?0 E
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ! t7 R3 q# J9 u9 O* i
  10. delete还可以通过limit设置不同删除方式$ b0 \+ K. |5 E
  11. ! f9 J$ ~' }1 x
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据+ C9 h' ~9 e- |" p
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
% |0 ], [1 e2 X- J
3 N9 H3 T) V4 {4 ?& S
6:捕获异常% [3 E7 P6 g- _5 \9 N# ]- E

# ^9 `2 O5 S# F) Q5 h4 s7 L
  1. MongoDB\Driver\Exception\AuthenticationException6 B0 F, a$ {; L- t, c* ]! M
  2. MongoDB\Driver\Exception\BulkWriteException
    ( m/ U# j+ ]' M# W
  3. MongoDB\Driver\Exception\ConnectionException! o3 F0 ~+ K" X
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    : r+ l4 X$ Z. k5 X$ H) o3 `
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! Q4 A* X+ P8 D6 b5 L
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ; d* n' n- L" V8 x8 n
  7. MongoDB\Driver\Exception\InvalidArgumentException! \1 a7 m& X$ F- T
  8. MongoDB\Driver\Exception\LogicException
    1 T) m0 @1 v* \6 G* \. q1 F2 t
  9. MongoDB\Driver\Exception\RuntimeException6 N0 ?& s6 n/ X; L& ~- k$ a
  10. MongoDB\Driver\Exception\SSLConnectionException
    , x/ I7 _. z( ~; L/ O5 W8 o* P
  11. MongoDB\Driver\Exception\UnexpectedValueException, b, _( \9 D( Z" q1 X' T. u
  12. MongoDB\Driver\Exception\WriteException
复制代码
& j9 K5 c+ |1 i' h2 V9 p& }9 q
8 t6 h. ]/ |9 u. @& C& \! s
游客,如果您要查看本帖隐藏内容请回复

2 W; `  Y6 p4 ^' @! F9 g2 _点击查看全部
* ^; q3 t; |0 K$ `) E) A+ R8 y% O
0 C! M; c5 K! v6 F* @& C
% j" M+ P% j) m/ [8 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:36 , Processed in 0.053272 second(s), 20 queries .

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