管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
, H! n, o/ l7 x$ t2 `
: k9 q! |+ z. ~ V下面用PHP7新的API总结一下:+ b9 t2 i8 r( m
( U( l; N$ R% D* V一:CURD
6 @7 k" B D+ G. w
a9 m4 I F: O1 {" q1:链接, i8 d/ G& O5 j" y, o. C" p
0 g; q; L5 e/ B; n3 `
- <?php$ J9 f8 ?# q3 v( A( C9 _( l
- //链接mongodb
7 X: k( [. Y2 H0 B7 @1 q/ v2 A - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
* w& w2 K- e8 t6 [4 w+ R, s - root 用户;123:密码;如果没有密码则不写
复制代码 " R1 f' n4 X+ W: J4 t- h
2 {2 P/ t7 |" h: G/ t
2:查询
" O, b. k4 p T% `0 D9 ~# C8 O+ o( ?: N, u* ^
- <?php9 n) b" B9 J3 w, g
& g& O& I. N6 @2 a @- //链接mongodb
1 J9 r& B7 X4 W6 f, p5 A - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# `1 k- E+ N+ M; N' m; s- {. L+ u
, R# k, G& X2 b! r; s7 ]. L9 s# B0 h- //查询
3 h7 T6 O4 K- T- [$ y - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
* @) s" W, T( F& s8 v- l* t4 R - $options = [# w8 q& i% P$ I4 P
- 'projection' => ['_id' => 0], //不输出_id字段; r% U6 a( n0 [. C" T& _
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序5 d! A5 u; J% j/ a8 L5 Y2 m
- ];
5 @8 I% q; R, l5 N - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
; g+ [5 h a4 L: L+ ^' W: C - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合6 d d: I$ q6 U* p; }0 N
- 4 q9 ~1 ^! v2 [* N; w/ e! O
; ^0 U( d6 {0 J. n' R+ |$ a- foreach ($list as $document) {
; t9 {2 @( `$ E9 S2 k. P - print_r($document);
- D* g0 o7 m# F; r7 @ - }
复制代码
/ O( i1 L y$ @8 A6 `* `查询更多条件使用方法,参考第二节mongodb基本命令,查询' _/ |1 X" b; s( p
0 `; f3 }1 Q( ^# v {( E$ L
3:添加
( Y0 t4 ~, A' T7 W( c7 A9 \* V6 K. r d1 F* Q
- <?php
4 a. C2 m1 q* D& F. r2 Q9 B
0 i1 p f( B6 D+ D( K" W- //链接mongodb4 x/ ]5 g2 d. |
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- f' U& ^2 G) W' B6 w b
/ M: N4 u; H# T* R8 ?8 u4 @! R/ n/ T$ ^- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行; F0 ]' `1 ^) R# \1 K: G$ u" P
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
5 U7 I: \3 v% a, K. m1 d - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
+ s4 p, M G6 T5 a s, V- |0 e" G. } - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
v- A0 `6 C3 ^; G# X# w j- H r - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
7 F3 p- s) M* B9 s$ t" Z8 M4:修改
* l8 W9 Q" ?) S# l: N( T5 ^: U4 y! P
- <?php& g6 M( E6 x t; b2 k
- : W* I- E' y3 T4 {/ w9 V
- //链接mongodb) j* S5 {3 u7 g* f$ \' Z, ^' s5 u# }
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' ^+ r, s+ e) J1 L8 q' ^
- % t$ I/ v u, n. H0 G8 l, H
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行4 ~( Z0 a( W" D" Q6 x2 m8 I5 U
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 } K1 g z9 C0 d& L$ p: G9 G
- $bulk->update(4 s' x; b* l5 P' \
- ['user_id' => 2],, F. ]3 s5 o, i6 W" p! Z
- ['$set'=>['real_name'=>'中国国']
' }! {% `+ t5 k" { N - ]);
+ M9 f& @1 i# i0 W- p. d' c+ ` - //$set相当于mysql的 set,这里和mysql有两个不同的地方, m& q6 d( P7 M: c d- r3 b
- //1:字段不存在会添加一个字段;3 n7 p `+ P0 A+ ^* E& j* Z
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
( d& Z- S& V" Z7 B) j8 ~$ V
$ z" }' d$ Y" f) [6 h
" p/ I8 y+ Q; H/ }) W- //如果条件不存在不新增加,可以通过设置upsert8 V2 M/ n; [ x9 u' ]3 G5 e
- //db.collectionName.update(query, obj, upsert, multi);
# V$ H) E7 P0 z$ e - ! k d) ~+ v& ]2 v1 F g9 ~
- $bulk->update( b1 y1 a2 q2 R3 v4 w h
- ['user_id' => 5],$ m$ V/ C) }' {8 d
- [0 J Q! S9 F, c
- '$set'=>['fff'=>'中国国']
$ n T- h1 `& F/ c - ],
* ?& C$ \# {8 c& C7 b - ['multi' => true, 'upsert' => false]
8 A. `/ B. @ J: [6 m7 }, ^5 N; c - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条& O% ]$ C. N; @8 ?
- //upsert为 treu:表示不存在就新增
9 z9 ~$ k: t: i - );2 ]7 Y: g# D0 U+ b. X
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- R3 u7 x( ~# \& h, M+ p; }2 [2 v# `2 G9 y- s5 z
ordered 设置( K, b% r- m4 \' ?, @7 h* ~0 D
' W2 [6 ? R/ X9 F: |1 f7 n1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
; w o l% g( _0 m/ I; P5 r2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
& e& a( |+ f- `; F: x9 U; g% W: M$ T% ?( \
5:删除
6 b% K e) s& w# @
4 v$ M* p- l8 W ?- <?php7 Q0 v7 A1 ?- }+ A2 O. [' _
, q6 L4 P2 h* M$ i7 C) R) O, z, @- //链接mongodb# S! q+ T" X, x+ p6 ~
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
2 X6 h, z- r& M - ' K5 C* E) u# ^6 C$ q, k0 N; V/ J
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 G1 Q) B. B8 r4 i) `
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
. u4 j) G# K: G - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
# L2 L2 A1 j2 ] - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
/ c5 X' i2 e5 S& A$ z% [! S; L+ d - delete还可以通过limit设置不同删除方式9 W+ D7 J$ O. e) {8 e
- 6 X1 Z% X+ E7 \0 `
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
( @/ `0 h" c6 f( }/ U - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
5 h/ C* f- n: w& f3 p
& ]& V% ?5 U' f9 L% ]6:捕获异常
8 l% C0 i [# y, I; A* W
+ U8 y6 v" T1 }; N0 e- MongoDB\Driver\Exception\AuthenticationException: B7 @) a5 C7 Z2 V; T$ D
- MongoDB\Driver\Exception\BulkWriteException, h0 [) y9 J2 g8 [; A$ ?, p- R
- MongoDB\Driver\Exception\ConnectionException
" V! Z, L3 ~& O' Q* F! y - MongoDB\Driver\Exception\ConnectionTimeoutException, c) x& ?0 \! z4 m! P+ s, _
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
& O2 R5 M: l- h9 q( W4 _0 }6 G - MongoDB\Driver\Exception\ExecutionTimeoutException
4 c8 g% {" v4 p# D9 v2 M* ]2 V, D2 h - MongoDB\Driver\Exception\InvalidArgumentException
2 j y3 I# p/ U4 P - MongoDB\Driver\Exception\LogicException
6 k% v% }2 c' u, H$ f - MongoDB\Driver\Exception\RuntimeException2 A- P2 P9 n- O# j9 q
- MongoDB\Driver\Exception\SSLConnectionException
2 S. M& K* j( s. |9 s - MongoDB\Driver\Exception\UnexpectedValueException- t9 y7 `+ P1 o
- MongoDB\Driver\Exception\WriteException
复制代码 * V, G# _; Q. l% l( w0 b
+ l3 X+ |- N1 T8 ]
6 p4 v v9 s3 v, L, n点击查看全部
# g0 u) u% Z4 X+ g7 B8 y* J$ K( w7 S# u* c
4 X4 L- E6 M+ K/ A8 _( @2 Y |
|