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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14460|回复: 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不支持以前的写法。
" G5 R! s& l* O
2 B5 K  M; J1 q& G下面用PHP7新的API总结一下:
& m; X$ X$ v$ C4 R9 a2 n. L5 Z6 h
; u4 J( ~0 _; _1 ]& }6 c一:CURD
/ I3 j2 F1 p7 N( c3 r/ ]7 P7 J$ W% c4 n$ \* s* a. K% i
1:链接+ v* O. G0 W) p& y+ i3 U% d9 W
! q7 }3 l9 J! s. W+ E
  1. <?php) J4 C+ \' A+ S/ E) ^" r1 ?8 X* ?
  2. //链接mongodb: p2 [: T+ o: y. l1 G/ X. r& R
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');! G( J; l8 P3 d
  4. root 用户;123:密码;如果没有密码则不写
复制代码

# R# P5 w8 v5 m- W9 h& l' |4 B/ g  e
% y4 G8 B+ t8 U# c2:查询
3 {; b% m" q+ t( f
2 l: Y+ k  ?2 z* S3 d: V5 ^! [
  1. <?php
    . A, F! Z9 h2 w$ D6 W
  2. ! V' Y. g5 A: x- Z. }# t
  3. //链接mongodb
    ; e1 T0 l8 ]0 v4 X1 t9 M
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    % M  p2 B) X/ `& R' O& |) z6 }

  5. + j. m9 x" r: Z
  6. //查询
    5 Q: ?3 _. I2 q; s/ a
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    2 a6 s$ p: @& b2 N
  8. $options = [
    1 s% @1 _! s1 L5 ?0 H/ C$ |& q
  9.    'projection' => ['_id' => 0], //不输出_id字段' `3 F4 b  a; @; U' W) {3 u
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    ; u+ y' e: n9 v; D. g6 }
  11. ];1 d  R/ T6 C: y9 }
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求" n; W5 c5 _3 }5 S% D+ z/ k2 h4 h& N4 Y
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* _% R4 t! W% M% m
  14. ' x$ I+ f7 l' E! R/ F+ Y
  15. % b, B, `( n1 l8 s8 i9 _
  16. foreach ($list as $document) {
    ( D/ s* g' g: u% O
  17.     print_r($document); ( I  e! f) k6 Y" R7 R/ Y
  18. }
复制代码
  v5 z6 }% [5 y* D
查询更多条件使用方法,参考第二节mongodb基本命令,查询
% d- ?& o$ ~, R) r$ @) q& v0 g9 B! U. i6 F% j$ t  ]# t
3:添加# F$ a1 c0 g& ]6 E5 y- r
+ a' k0 N" C. [9 y
  1. <?php
    ; ?/ M  [' T% Q
  2. : Y0 T6 A& Y/ c8 b* ^* l# H
  3. //链接mongodb
    % b/ n2 ^7 y1 V
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" y3 G& e3 s" M- O4 }' N9 z

  5. 6 |( N: r- _! V, R4 v; n+ ~# L* u
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    / @4 ?% y! N5 J# {  O- x  q
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    4 p% u8 Q7 {, B, T7 f/ @
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
    % k; Z3 A  f3 w  r' _) N" {2 Y
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);6 E: f8 p0 [4 n% l$ w, C) u! n3 I  C
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

, K% z; a, s6 C  ~$ x4:修改
# C: {4 p5 R' p7 i4 U+ _: J
! z. n! y1 }% |8 W3 W; ]/ `- B4 }
  1. <?php9 L$ L' F0 D* n* H4 n

  2. - \6 e/ }$ `" c5 ~* e7 e  E4 q
  3. //链接mongodb' K) V, ^! I! M$ O7 e
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');* c" E' }7 ~9 k, L7 ^

  5. + ]: _# T* ?, A! K1 Y4 W( j) x
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    " V' n0 x& L: g! k, I8 J) W2 O
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 \/ p5 u& L, ~0 j. z' C
  8. $bulk->update(  V9 c0 D1 v, @+ ^% d
  9.         ['user_id' => 2],* n+ h/ O4 O7 ~2 T7 y( j+ S
  10.         ['$set'=>['real_name'=>'中国国']
    5 a- o. Q& S. m5 y3 x- \
  11. ]);
    6 ~2 n. I7 g- }5 i' C: }- G
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    $ b2 d0 M( }) M+ I/ ~* f
  13. //1:字段不存在会添加一个字段;
    % D8 ~* D* H2 g1 f0 ~% i
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert
    - A% w. r' L2 S2 U  X* @; U- c# c2 H. U% N/ {

  15. 1 i8 u3 I. f: m, O5 n

  16. , q) M1 H, y# \* r
  17. //如果条件不存在不新增加,可以通过设置upsert( Y0 `: }* [$ \0 b+ {6 Z& y. i8 A
  18. //db.collectionName.update(query, obj, upsert, multi);, _1 W# t* d: V# n; A" v9 {
  19. $ B; T) Y! N' w1 n4 P7 p
  20. $bulk->update(5 v1 N4 u! w: }/ }( F* w" X9 M
  21.         ['user_id' => 5],2 E/ I- z  l) b+ [% y9 d& o4 ?
  22.         [% i: D8 G3 S# y- _$ \/ }3 X6 J. Z
  23.                 '$set'=>['fff'=>'中国国']1 c! U4 ?; J+ m# H3 Q9 P
  24.         ],
    / c" q2 S& u8 e" J$ L
  25.         ['multi' => true, 'upsert' => false] - a* H! i) _3 _5 H
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    . D& w9 F# z$ G' N8 q! _: h. _4 q
  27.         //upsert为 treu:表示不存在就新增
    5 c% U6 ?3 l# t3 u- R/ h6 Y$ j* P
  28. );' e! X; C% v( b& Z' \' @
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

: P4 D' d6 g* d" y
; _' Z8 S& @+ o0 [ordered 设置4 W: _$ d' K2 O2 l3 H! U* ~

/ H, o3 }! Q% A& a- p% n) y1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。. r3 u: X" t; N
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行& f& W4 T, w0 D% E

( p5 b: G& a2 G8 W0 h( a5:删除5 \5 t* u; ]. ?* L" |
6 X) Q+ n6 O/ A6 s
  1. <?php
    6 `- c+ n6 ^3 J0 r

  2. - z8 M. S; T$ b& c* C- L
  3. //链接mongodb- n8 _- N6 C& d5 u  S
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');  |6 }; W( g5 l5 Z& q# Z4 K$ W
  5. ) b* I4 m* J& T! N2 n0 s
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 _2 s  O3 }. A
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行2 x6 r4 G2 M8 ~: G, U
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
    & a5 H6 h& T* N8 y8 F
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合8 M9 m& ]0 w6 C
  10. delete还可以通过limit设置不同删除方式5 A4 u( P+ s5 L) t
  11. 5 f2 W8 Y  E" |( H
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据
    1 Y) B: I8 o1 v
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
" J% o- T! |4 K7 ?4 w0 H

9 a0 [) Y8 |/ K0 J# v! F6:捕获异常
1 m/ t# o, _3 g4 ~, m# Q* O4 b5 S: f2 M7 p* g3 W
  1. MongoDB\Driver\Exception\AuthenticationException
    + d0 b5 e# Z' {- C- C
  2. MongoDB\Driver\Exception\BulkWriteException! O9 |4 c0 R0 S; e( K( u/ b1 {% j
  3. MongoDB\Driver\Exception\ConnectionException7 e/ s5 ?; `7 V  h! T2 V( [* v
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    4 G, g! k* |1 E0 D4 `
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    # ^; ^. s2 [. h# X0 ?- }8 P
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    ! A2 s2 Q; |" e
  7. MongoDB\Driver\Exception\InvalidArgumentException+ t4 a- R3 _0 C+ B2 [+ v
  8. MongoDB\Driver\Exception\LogicException
    : ~# g6 N* }) \1 N9 C$ G* ^
  9. MongoDB\Driver\Exception\RuntimeException3 l2 E" ?5 G0 S4 J) Q
  10. MongoDB\Driver\Exception\SSLConnectionException
    ) F7 w3 D* s5 n7 y* ^' m; v
  11. MongoDB\Driver\Exception\UnexpectedValueException, f, I" [* V, `* N
  12. MongoDB\Driver\Exception\WriteException
复制代码
  T: H0 U2 `4 }1 }* Q( C

5 a) C! U# j% Z* _( O. P. P7 Z
游客,如果您要查看本帖隐藏内容请回复
. W/ C; s5 T) m
点击查看全部
& k$ [/ w6 g% g- }6 A/ u4 Y7 q* C, y. T8 q) J  y
% L+ Y" N& p  F  ]/ @% W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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