管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
. e' Z3 A& @( _* w/ _5 C# E& A6 P! H! {+ B. Q
下面用PHP7新的API总结一下:, L0 V6 W9 ]0 Y: d5 G/ h& `
$ I8 R" n F& C# H一:CURD5 W" Q% k0 T) z# x* A/ {
$ m+ p, `/ ]$ b
1:链接- l9 o; d. t3 l# D5 X0 A
) r2 ? {6 g( w4 t% S. l
- <?php
; X5 v, M, n' T - //链接mongodb4 t/ ?" X9 n6 y' }
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
+ U! D5 `2 a1 E& M - root 用户;123:密码;如果没有密码则不写
复制代码
! A( D7 O9 B1 m( `
0 E8 ^/ }& ^, |2:查询
& a+ l7 Y6 I) C1 l, P' e( S' Y W
8 X3 H! e4 h3 Q" ?- <?php% J+ C/ k( _/ a2 \5 B" m. M
. Z# j8 M7 H1 x- e9 [; @! k+ \( E+ ^- //链接mongodb5 O7 N( Z# o; n5 b3 T# t) H
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 I5 }! k$ W2 L# \: U; d) j$ I
* \9 w2 X0 F; s p- //查询
! A8 E( b, o; i- n; Z% Q - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
" a I% a( i9 Z" ~9 n - $options = [1 b7 i1 g) n. U3 V! Q7 F
- 'projection' => ['_id' => 0], //不输出_id字段
: j. c: _! e4 g2 \, U7 p. E8 e - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序) ]8 U R O1 U4 @$ H) ~3 L
- ];& ~/ B# A5 [9 Y6 y7 _1 ]
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
+ W: A2 I5 c8 O) e7 l$ R - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合& Z, }' ?% r: K0 B
' r: W6 ?1 o- [ }9 v6 k' J" b
0 j9 ?4 J/ R: }# o; |- foreach ($list as $document) {
$ `. T6 C% s3 X4 x - print_r($document); 0 D1 }) _. y+ l2 S% V( y
- }
复制代码 , L+ ^: R7 \' [3 R0 S! `
查询更多条件使用方法,参考第二节mongodb基本命令,查询
/ ?7 v8 B: J# ^/ O I( u) w$ J7 W s5 \1 h- l- c3 O; G: S& ~
3:添加; a& b9 Z! D& G7 t; {, s
/ _+ e, q8 q! s( w. O
- <?php" v) K5 R. y7 `" k/ Y6 Y
9 l" R3 L: Q) q. y; o0 y- //链接mongodb
& A: _% R6 t* E$ I7 y4 S- m - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
H9 q- }0 ?7 V$ q
7 m G4 J0 s1 b- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
6 |# l/ X( c5 A - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" b4 `; D) U* r2 x9 ^ i6 Z - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 b0 D) h5 t9 M
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
2 t0 ^$ I. M1 }& k! W7 e- r - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; e7 s& `- b1 V& }5 ^- z9 G; h4:修改
# [2 t5 z5 b# Z# `: d, _" Y; k' U+ U+ J
- <?php; K8 C: `( ^8 E6 F8 g: m* V
- % e+ F, x. M, q8 |; n: v3 L
- //链接mongodb
# K% r- `9 L0 A; D' s# j - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 N5 D1 x, y" v' b( _! m% |9 v
1 ^+ K% j6 b/ c& D) _5 }- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# [! {5 T+ `9 c5 l
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行- g9 P2 M1 j4 M
- $bulk->update(/ K3 ?9 y4 z- S V
- ['user_id' => 2],. Q3 |/ Y; R. ^
- ['$set'=>['real_name'=>'中国国']
& c0 ~; E2 V3 l T1 m7 h" ^- x - ]); ; m% x8 O' s+ l1 N% g: f0 ~
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ ~% u+ d0 V% Y* b
- //1:字段不存在会添加一个字段;
8 D+ M% `7 {0 ^5 r - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
5 C- ~7 L/ ~" r# F$ N - + p! h7 {6 H0 \
- 3 b% `# q( q8 Y2 E8 r9 \/ J' w2 F
- //如果条件不存在不新增加,可以通过设置upsert3 ^% u: [1 L( q u3 E8 o- z
- //db.collectionName.update(query, obj, upsert, multi);4 ]1 m5 _% d3 D. j5 s
- / H2 I t5 K+ m8 Q
- $bulk->update(
b0 Q" v% B, X4 u$ I' Y) W - ['user_id' => 5],
. o$ @1 d( r0 r' Z7 K# y) O - [& R% f! u0 [" J' v5 w1 Q
- '$set'=>['fff'=>'中国国']
) S! |2 d/ s1 N - ],5 z- @: n: P! T5 I" K: J; g$ a% ]
- ['multi' => true, 'upsert' => false] : @6 S; a/ e+ C e0 f4 c
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 u: V) W; d% l
- //upsert为 treu:表示不存在就新增7 ]1 ]. n8 m0 m, c8 U
- );
$ p! u1 a0 k7 n3 M1 H1 E' p) _5 p - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 $ w/ R! N* M" Y0 C! m
+ D1 Z8 g8 v$ s3 e+ _
ordered 设置- K0 c' q- R! g% y
% g: D* }8 u$ o9 s1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。& t3 k: V2 [- P
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行4 n" g$ \$ l, q: s- r% F
: x' h6 c9 c* C+ }: m5:删除6 F: |) x# T) A' x
& ^) [1 ]7 |5 |! x z
- <?php
7 o j( Y1 _& V# b8 G
, Y8 I* J7 O2 z! ]- //链接mongodb
9 W! k/ d! z$ [. C/ g# P: s - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 G; [2 U2 C* E5 q1 e
- % j4 |3 _2 m1 ]" \9 g+ v0 ?
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
& A2 u" B# C" v, k, Q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
6 M3 n8 Q! ]5 K% n" {8 v9 s - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
- L$ r: |9 Y8 N [. } - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
3 A) ~& m- J! T; @ - delete还可以通过limit设置不同删除方式! [) ?/ [7 e8 E j4 o- M
- 3 E+ o$ E0 b8 k' X
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
# E4 h! b4 ]1 e% V - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
$ ~+ C& F7 X9 v) p; A- f' ^" \- t4 A& N. W I6 T
6:捕获异常# [4 C7 R( G8 g5 E# h) j0 u5 D
0 A1 w2 K7 E" [( X
- MongoDB\Driver\Exception\AuthenticationException
% z8 G4 v) _7 @& Q$ K# T - MongoDB\Driver\Exception\BulkWriteException
: h# G5 A, v7 h# |/ H( g: }2 z - MongoDB\Driver\Exception\ConnectionException: ]* g2 W8 T7 G6 g8 s: s! J9 x
- MongoDB\Driver\Exception\ConnectionTimeoutException
3 g. _" J+ V4 ~6 }9 [ - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口" Z8 K) b* p# r: q+ y+ H8 n* k; L- G
- MongoDB\Driver\Exception\ExecutionTimeoutException% i5 s6 G: @; Z
- MongoDB\Driver\Exception\InvalidArgumentException
0 i- p7 {' Z: s) u6 Y& i) D- k% w - MongoDB\Driver\Exception\LogicException' F8 G3 P c% w6 @
- MongoDB\Driver\Exception\RuntimeException) X, ^9 J) n7 {- E
- MongoDB\Driver\Exception\SSLConnectionException
n3 x! j7 x% M - MongoDB\Driver\Exception\UnexpectedValueException g4 n& X2 u6 U
- MongoDB\Driver\Exception\WriteException
复制代码
) \+ h/ e {& M( W2 n8 i
. ~. E, |+ R& m) `1 M$ D3 X
" k4 @; k6 H* Q0 o0 R, G点击查看全部+ |5 k: p& A5 I8 [
$ L) x( o* `- B
2 I2 i! K0 ^& O0 I
|
|