管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
4 A4 G8 A) o; S! b0 R5 ^
6 J6 ~# q0 F& o# m( X下面用PHP7新的API总结一下:
0 n6 }% b5 v$ M' [1 s& ~
, S% b8 d9 m( Q% T) C5 k2 q一:CURD: Z* x# S6 }1 {1 S. g: }
% u: w! [) s% }& L0 n1:链接
) l( c" J C0 \0 s/ T7 C" V: k! c2 c9 R% u% {( A
- <?php# Z5 g/ ?. N/ L4 V; k
- //链接mongodb
2 E+ c! [/ Q7 R# _1 B I - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
2 b, \" e" h7 X' O - root 用户;123:密码;如果没有密码则不写
复制代码
+ t6 o; \9 O m3 f- j& }! c
m( c7 o2 l' r( t2:查询. m0 \7 N. p5 B# v) y6 Y( P! I
7 q, o$ p; _! n- <?php9 v9 U" J* A6 k& J Q9 c8 n3 u0 n" c+ L
- ; P9 q3 N5 [0 X* M% v! D0 P- L( d9 Y
- //链接mongodb
/ H: D6 ^8 ?1 ]- ^+ A - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
$ \" U5 m, @0 x9 }
6 f5 Q6 G$ C. Z/ ~0 \( A- //查询
( c' a8 G/ K9 x% l - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于07 K! N5 k8 S" k
- $options = [. l7 {. t6 e4 e0 w
- 'projection' => ['_id' => 0], //不输出_id字段
& D( b" {, n/ W" ] - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
6 K' A# M: B6 |; r( j9 a/ U - ];
1 }8 d0 E1 e# p9 Y7 e - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
; G2 I; S6 S4 b0 Q9 i5 m - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合! m3 W9 K' N9 O$ I2 M* [
" _- [- j. U% W( j" Q! j- 1 d. q+ B1 H# G" M+ T. |: ?
- foreach ($list as $document) {9 z/ }1 R% C0 S3 C: @* L6 G1 j
- print_r($document);
' b/ Z1 h, t' a* a) M4 s6 V0 { - }
复制代码
$ o# [- T' U( m# q查询更多条件使用方法,参考第二节mongodb基本命令,查询/ s& s/ \; ?# D/ l7 |( y
. Z0 O3 O& ? G' s; ?3:添加
- D3 [$ b: o8 I4 H) d3 a5 F
7 o% T0 `! l& W6 w/ Y; [$ T2 x- <?php
5 G$ }6 S' _. t6 S. E
, r1 s9 [5 h' c% i: @- //链接mongodb
* U& P9 I- }6 I, ^( W& q' T0 Z& I - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# b4 w' ~/ w+ ]0 |- \. z6 _ - 5 w7 H' k/ t, c7 ^& k8 a- n1 y
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% N) T/ U, T# N) t
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" }6 o! o5 K7 c8 O7 m4 ^ - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
& b! O2 k9 r7 E' j. J, a Y6 l - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);2 G& \) b8 Z) a6 T* W* J& f* i: C
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# i+ ]4 v0 n( Z. G3 h2 e. y4:修改: r- D% z6 s* G
% F- W" f/ _! k7 {
- <?php5 { b- O v+ Y% l/ L4 Z* f- j
- 3 [" M0 A4 I3 ?! Q0 H. E6 b
- //链接mongodb
" \2 p8 o) a9 G! G. o8 ~ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ k. b3 H! u% S' e) p
- ( m* O; A( E4 k2 F( ?9 |% \
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行! ~3 P" o5 X* x, Z( S
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
' ?% n6 `# a: t/ `, ]+ q" u6 q0 V! C - $bulk->update(
5 s2 [, U+ F5 c3 S, S' d - ['user_id' => 2],
8 O6 }& l" O- J K - ['$set'=>['real_name'=>'中国国']
' _1 B q; [3 ~2 y - ]);
% T: B* C! ~' D: V - //$set相当于mysql的 set,这里和mysql有两个不同的地方,- J& d# M, g5 y# T/ \. y
- //1:字段不存在会添加一个字段;" C! m. E$ G2 R; f; X/ K
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert4 U/ v1 o6 f$ T5 M& i
" ]1 \1 x0 _3 m t: x: }4 ]9 S
$ v* I3 M% j3 ~7 ^5 E# R4 o- //如果条件不存在不新增加,可以通过设置upsert
6 u/ E7 P" x' i4 R% a - //db.collectionName.update(query, obj, upsert, multi);
4 v( J I0 F5 l4 M5 j; Z - 9 W' _5 L& f! P- k1 R
- $bulk->update(
$ N2 X8 A2 Y' H) y5 J - ['user_id' => 5],% B J6 h, S: {! |9 p& z, E. h
- [7 E$ h3 Z4 u2 }& k j2 S) `8 m/ }
- '$set'=>['fff'=>'中国国']
4 `7 V6 G& M4 q4 `* O& }1 w - ],
5 [ \' F: ?( Z - ['multi' => true, 'upsert' => false] ; X+ x# `3 d: g! s: _
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 G' I& r& s9 e+ `
- //upsert为 treu:表示不存在就新增* \. \% y5 t3 O* T
- );
3 |7 [7 N1 ]" M- r% ~# q - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 # ]9 ~6 P" J# q2 i8 I' b% Z! E) x: v
" X! T- A' R) M" Z8 Eordered 设置+ q4 ]; y$ C0 q3 ?/ G( J. k- W
( }3 T( y1 }% O! ]1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
& Z, ?& e5 i( ]- k+ O2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 T* K O& C7 j6 Y: H# j' d
( W# } x1 s" ]& r& H! w
5:删除
6 L$ ]# e4 a5 r7 T n& y5 P! k- N
) W3 m3 S2 C: z- <?php
" M$ e# S- U* T1 S+ q d/ l - % [2 W1 W3 m' T+ y; F* R* j: |
- //链接mongodb/ a4 m. B2 C4 t) I% T: ?3 i+ m3 X9 Z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& `9 [" c9 T: `9 [$ Y" N9 S - $ `* U9 q( t* Q+ x% f( b. C
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
8 n. H/ V. { `0 X% \! w - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, y u/ h t6 _( v% P5 n
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
- p- F C0 n+ g1 K( E8 v! I - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合, j- _8 {. W. b& `6 |
- delete还可以通过limit设置不同删除方式
; V% ]% m( }$ m; p5 I- Y i/ a3 U - & Z, H# N& f5 h8 `% R8 P8 l
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
0 n6 L# q3 u$ s+ |$ T! j - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ M3 a, |* M& i$ u& f# U3 N3 N
* q; ^/ k" N+ H; `, O, g+ ~6:捕获异常; y; X. {3 e3 D; H; q$ T7 I/ K
8 c: G8 I* v2 f
- MongoDB\Driver\Exception\AuthenticationException" C/ @' s! G1 S6 c
- MongoDB\Driver\Exception\BulkWriteException
% ^" l+ h1 F9 u - MongoDB\Driver\Exception\ConnectionException
! b. i8 j: f* U2 H: y4 [ - MongoDB\Driver\Exception\ConnectionTimeoutException0 G3 ? k! v$ P
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口) l+ y2 c# i: c' x0 T) f5 Y# @
- MongoDB\Driver\Exception\ExecutionTimeoutException5 V" O y9 h! q. P6 e
- MongoDB\Driver\Exception\InvalidArgumentException
* b( J8 a9 q n/ T& q8 j9 D - MongoDB\Driver\Exception\LogicException7 H' D8 M/ O1 a% K+ h3 j+ P& e1 ~
- MongoDB\Driver\Exception\RuntimeException- p, |+ z2 R/ A5 I8 a" f
- MongoDB\Driver\Exception\SSLConnectionException, \- | u4 u5 {
- MongoDB\Driver\Exception\UnexpectedValueException
: T% @) D/ G: r/ U7 x - MongoDB\Driver\Exception\WriteException
复制代码 $ x) ]$ l# Y* P- L5 K8 D
' w0 D+ q# u0 p: E. k4 B
& ?8 q8 K; c3 k7 b/ I4 ]; C
点击查看全部, u. Q, h9 b6 v' t9 O
" Z& w$ c g! I- a% F5 c" o& I T" w/ e6 q9 _0 y
|
|