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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14345|回复: 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不支持以前的写法。) W0 o' Y  b0 {+ w! y: {. {

/ W, v3 _* ~- s1 T7 [9 O( |下面用PHP7新的API总结一下:
3 l2 \  V/ i; ~9 B6 Z; S$ d' }# I( U, z; I. r
一:CURD
% U! |# ^5 l% X) c9 \4 ]# B' T3 ?
# i1 F" Q8 u- H1:链接+ @; P# h0 K- J+ D# {

; W+ k+ J8 k+ |. Z% w
  1. <?php
    . v: W, B& g# `7 a, p
  2. //链接mongodb
    " n( s/ w/ l5 T8 @2 G
  3. $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');' {% M; k% G0 E
  4. root 用户;123:密码;如果没有密码则不写
复制代码
* N7 ^( w, z/ D! E7 o0 O( u
7 p1 W4 p! \* z9 n) g" _0 Z( N
2:查询
$ m- _/ l" o2 {5 C- k
- S' \0 @! m- u6 W5 w
  1. <?php) D& h) M  c9 r* }
  2. 8 z% K$ P" U* x7 N/ D6 d2 w6 d! w2 `1 F
  3. //链接mongodb
    4 W! o5 O( E/ R6 l2 m
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    ( [9 G  X& F4 R
  5. 5 u4 l3 v3 N6 E4 A
  6. //查询
    / }( o' e2 N, |
  7. $filter =  ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
    . B0 ^0 E6 |! Y+ Z) L0 D3 v5 h* b
  8. $options = [
    6 E5 I! t- _( h" Z3 g) V$ `* q! Y" W
  9.    'projection' => ['_id' => 0], //不输出_id字段' T. I8 _5 @% D+ X. k8 J
  10.    'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
    ' v3 x/ g8 W# o" K7 ]3 L0 _
  11. ];
    * x  m9 c8 m7 D) b2 e2 A
  12. $query = new MongoDB\Driver\Query($filter, $options); //查询请求
    2 M( T6 |" ?- _& Z
  13. $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合' }' {% s6 [; ?/ H/ [

  14. : n. n/ W5 i9 z# N* g4 K3 B
  15. & }  X; T- d& A; S" W) d8 p6 e
  16. foreach ($list as $document) {5 g9 F, b% p: F' E. H8 M
  17.     print_r($document); ' M- j! q) \1 p/ l, N8 `/ Z! {* L$ S
  18. }
复制代码
# g+ p/ U& m$ P
查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ U* x, o8 Y: J" c, q" ^$ l. m% ~( _4 |! |0 J
3:添加- c4 e3 p& E" o( k' f4 g( y

" E/ y1 F8 x; |) o. y
  1. <?php& E; Y/ O6 A. W/ F5 |
  2. 0 y+ D& ]4 M7 H" R" `$ O- r% u$ G
  3. //链接mongodb' D* |$ s) [: a% {- S, m! o9 x6 Y
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: C4 h3 S- v9 a9 a

  5. ) o% w3 I. y' t3 `1 L
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    # A  A. D; O- n
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行. b; {+ @% ]2 @% |+ z) h5 N
  8. $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& ?5 ^. j! o1 H8 d* v+ k; E
  9. $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);1 e* x& m/ O# b  I0 e& y5 a! n
  10. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
1 _9 Q2 z9 z# g. D4 g- ], p) _
4:修改
2 A! A. ^) A6 x3 o+ r+ l6 d# f6 Z, L6 P
  1. <?php
    # P' }: i( p/ r9 M
  2. . ~/ `& C/ m6 A/ w7 o
  3. //链接mongodb
    ; i3 W/ L- o2 K/ u
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
    1 n( \! R  s: D3 D

  5. ( p: U' G3 ^( e* _; A
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    3 w5 i/ m2 n  ~7 E5 R, _# J
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
    ; d1 g3 x% ^* F4 y. ?; h
  8. $bulk->update(
    ( o7 t) h" C- c4 @: l5 P
  9.         ['user_id' => 2],
    ; ~9 o/ p3 n6 h' A8 w5 A
  10.         ['$set'=>['real_name'=>'中国国']
    7 m3 F  s& x) }6 c; L; O" x1 R
  11. ]); , A( n0 f: K3 T
  12. //$set相当于mysql的 set,这里和mysql有两个不同的地方,
    6 v( F& u, S8 @! p; {
  13. //1:字段不存在会添加一个字段;; Z% n/ P. z. _; \3 Z- E
  14. //2:mongodb默认如果条件不成立,新增加数据,相当于insert2 K- h2 m9 I/ I* Y! W4 X
  15. 1 O8 G- l! k) H& r; z; X0 ~
  16. % Y6 m9 A* Q. D3 @% A
  17. //如果条件不存在不新增加,可以通过设置upsert
    - W/ N; P+ {# B  B4 ^7 H
  18. //db.collectionName.update(query, obj, upsert, multi);
    6 X, N# n* V# W
  19. 3 X1 Q# `2 e6 J9 |: W% T2 _
  20. $bulk->update(
    3 X4 a$ Q. Q% q* x5 I6 g8 j, p
  21.         ['user_id' => 5],
    ' k2 _1 C5 P- T" L
  22.         [
    , q" m7 s) \$ R9 d3 N
  23.                 '$set'=>['fff'=>'中国国']
    ) J( ]) e$ [  i/ G
  24.         ],
    3 Y. l9 z) h7 ^: z) A5 _/ B6 {+ n# P
  25.         ['multi' => true, 'upsert' => false] ) n+ ?  T# K+ Y$ }4 c# a5 J
  26.         //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
    9 ^. A. `' k9 E3 P3 h
  27.         //upsert为 treu:表示不存在就新增+ s2 {. h$ I' }6 A# y# ~" |
  28. );. b. ^8 R) p  Q
  29. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码

3 C6 c' U+ ~& e) z( y2 Y& `  B
1 l+ C" q9 r" K; N9 z6 mordered 设置
. h7 U; p9 h9 l/ U2 b9 P) i1 J* K6 w) \4 S. d$ _4 ~( k* `, Z
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。7 ]4 E+ B/ ~7 y! e! R
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行' _- t* s: @8 i* G3 ?0 U
" R+ W" r* F0 _" ^
5:删除
3 v( S2 F, ^6 w) n0 r% p4 `4 X1 m% m& o8 o* r( J
  1. <?php5 D$ f+ r+ A8 w+ u" `3 t
  2. 8 x# U( b. ]8 h  W1 }: t
  3. //链接mongodb
    5 Z: [: ?4 ~2 m5 h% o  l- k
  4. $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) \$ P( W  `2 ?2 f

  5. / r" a3 H" n8 c3 W2 s  g# W
  6. $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
    ! h$ y3 r/ q7 }3 S$ W* Z+ P
  7. //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! [- j+ z& |/ R$ G: g% `3 u
  8. $bulk->delete(['user_id'=>5]);//删除user_id为5的字段* U- x* T" z( [' H& \. E% D
  9. $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
    ! j  d! d6 D0 W# Y1 ?
  10. delete还可以通过limit设置不同删除方式8 Q; d* U" G* f

  11. + h* }  y& R7 A& f. U; t, _
  12. $bulk->delete(['user_id' => 1], ['limit' => 1]);   // limit 为 1 时,删除第一条匹配数据& v" l8 x+ v/ y- Z( J, [
  13. $bulk->delete(['user_id' => 2], ['limit' => 0]);   // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码

- F3 g7 d6 q+ L. i
. V1 |; \" j0 ]" ]8 D6:捕获异常
- ?' N- _) F# z" g+ C8 F% y$ e+ X1 u
  1. MongoDB\Driver\Exception\AuthenticationException
    % _# w+ l9 d0 x) _4 [
  2. MongoDB\Driver\Exception\BulkWriteException
    ' v) K# U% n3 y% N- S# h
  3. MongoDB\Driver\Exception\ConnectionException
    ! o+ m  N9 L3 ]& b6 n8 x, ^5 b
  4. MongoDB\Driver\Exception\ConnectionTimeoutException
    % _" d  {* L9 e# [5 A% v3 w
  5. MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
    8 t; E$ g* o; j& \1 I
  6. MongoDB\Driver\Exception\ExecutionTimeoutException
    5 L& g0 l6 \& A& ~9 s
  7. MongoDB\Driver\Exception\InvalidArgumentException6 f- X- u. h( J) J1 }: `) Y/ D' t
  8. MongoDB\Driver\Exception\LogicException. H0 N' A1 ]: J, j* X2 }
  9. MongoDB\Driver\Exception\RuntimeException) A+ ^" Z- U& Q7 F0 ]9 C7 k
  10. MongoDB\Driver\Exception\SSLConnectionException/ r; R0 s7 {; B/ F5 E, N3 V# G8 Q
  11. MongoDB\Driver\Exception\UnexpectedValueException
    & h7 [8 T" }5 |  q
  12. MongoDB\Driver\Exception\WriteException
复制代码
$ g% U. b4 u& V0 Y) ~0 p

$ g  R/ [7 h: B3 Q5 C
游客,如果您要查看本帖隐藏内容请回复

# N8 X) v) ~' t# p5 T& j, X点击查看全部3 P+ u8 g3 g7 q4 o# J( q
: N! `& J! G% |" Z% O- T) o

' K% P, z/ s+ `/ }5 l2 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:01 , Processed in 0.053801 second(s), 20 queries .

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