管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。. m9 [: o" m& n4 z1 G5 v
+ u+ k+ t" G5 J+ F
下面用PHP7新的API总结一下:
, `; H3 o |* V, } ?$ Z( ]+ t9 ~' w2 g3 [3 x7 h9 L/ T
一:CURD
3 z& m( u! e( \1 } \9 U. l, b3 I! J& v/ n" ?6 q5 Y/ n
1:链接
2 P$ @" ^2 M5 T/ f* D% \% b. c' Z* j2 K4 N8 U. H, R& X
- <?php: ^/ B9 }& c, A( i: F
- //链接mongodb: s6 R6 z6 y1 b: [, }" `' T
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');" t7 W, s+ g7 J- ]
- root 用户;123:密码;如果没有密码则不写
复制代码
& C$ g5 D$ C6 d: V2 B. n- [2 @ E5 u
2:查询
! }( |- |; g7 ?2 W/ v
. r1 ~4 c; t( D' [2 R- <?php
) s; j6 a) a: |" c; g y4 j: z0 D - + p% R6 l$ V; }+ ~. r
- //链接mongodb
K, v& a- l/ R7 q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');3 A: L) d! D- Z* I* x6 z
- & s3 D2 M+ T8 u3 t' n* b
- //查询
# n3 F+ z3 d; E$ ~1 _( n( r( i! p - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
$ K# [, Y& M+ S5 C# F) R. Z1 B& i - $options = [
4 O( p) D# `# N6 D - 'projection' => ['_id' => 0], //不输出_id字段
T( ~. j) n* A* @, f - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
6 A4 R9 p6 U/ E1 ^3 c8 L) U - ];
$ a* L3 r4 ^2 Q: F - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
! x7 V% G& D p3 r5 G - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# F/ x/ N# v9 V$ ]6 L
; c" E, a( j0 m1 \6 n6 D3 P1 D- : h2 p1 f, [6 ~7 N/ I# a8 Y& l
- foreach ($list as $document) {3 O% l( t6 n$ d0 B/ z
- print_r($document); 0 ~- o+ l" O4 ]6 _( Y9 I, n$ L
- }
复制代码
. g9 V/ L J9 K9 V查询更多条件使用方法,参考第二节mongodb基本命令,查询; `# E9 C5 I! F0 x& z
0 }. v6 T; {2 T3:添加! ?3 T4 t" o+ a( @2 T- H
) | k8 F, _) h, x# A% \- <?php/ G. c8 \7 [+ ~6 @$ D/ i
- : k9 N) ?5 d* z3 m7 |
- //链接mongodb
( i6 t* P# R/ ?3 a: \ W/ B - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');/ }$ S1 f2 Q; z8 P' `0 a
% @" W _+ W' W2 J1 V- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( @- w% M; j$ ?0 X& \ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 Q Z' [; J1 `7 H% a5 t - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
) q! m: u5 l% e( h1 d - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);& o# C5 ~, |" C {; `) [8 y+ T; u
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 & y' _) [6 E& J5 `) O. u+ [
4:修改
) m# y$ w" u3 @1 T" q4 u; X
& r h- R0 b5 g" r; r- <?php# Z7 s6 o5 h! o
% B2 T2 W4 n2 K- K- //链接mongodb0 B+ u( U7 @+ H% M/ f6 c
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% o4 Y2 \& k4 y! E
+ P7 _* n, L8 ~ n# C! ]. z# i" {$ U- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, o% o0 q4 i# p - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
2 x H) H7 |+ A! ?3 r* K' p! g - $bulk->update(
" N7 C4 K* U1 \0 e1 { - ['user_id' => 2],$ z( h L. e; Z+ Z+ \
- ['$set'=>['real_name'=>'中国国']
/ q o7 y+ J* C d2 I - ]);
) ~) q+ n. X. X6 a! @) | - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
4 R+ Q' R7 G+ O% \9 a - //1:字段不存在会添加一个字段;
, X- Z* x" }" Y5 r" x9 j7 b1 a. x - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
; {; q5 u8 f- J! l# L - 3 ?, `; }$ {2 A
' C6 o% j* ~, ^% _# U- //如果条件不存在不新增加,可以通过设置upsert* `9 @/ c. W! P, D) p/ Z3 }% M
- //db.collectionName.update(query, obj, upsert, multi);# T0 I1 Z7 ~1 A, F y! _
- R& f* K5 u" I) y1 |6 w: L- $bulk->update(% [& u4 U4 K9 `* T
- ['user_id' => 5],
9 V. A. h# _" X$ [& P w - [9 o- V% U& J% n6 f" b6 W& j
- '$set'=>['fff'=>'中国国']
# z) b% e6 V" W3 T; i1 K! ` - ],. k, h$ R. ]; E. b
- ['multi' => true, 'upsert' => false]
# q6 P1 P# w6 @, R, W P - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
3 S( o0 q7 l) o - //upsert为 treu:表示不存在就新增9 B& f# c6 q& U" }
- );4 S3 }% `. Z* K0 G/ o. f- M
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 ' m) t1 A' O* B" |' _
0 \3 V4 D, k# k$ o3 aordered 设置
! ]1 l4 j: [1 W" J1 n) O- [% g. N p0 A, J
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
_* R" T1 Q7 h8 b. `2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
' ]4 D7 e5 T1 i' b8 i
7 M7 O2 X2 E- N' u& |5:删除, I6 G& }2 O7 V- B' a8 w
n: F/ c' Y) N
- <?php3 z) w0 {2 ~6 N- d+ \
- - p% s! ]" d1 j- M( k
- //链接mongodb/ b4 T) O3 r0 P& e( O$ I
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 v( w3 P8 A6 Y$ A0 T/ h* ]& }
9 g5 y* \- @- ~- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 D+ O* A- J1 J
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
% B- y0 N8 _, ]' Y3 y! j$ }' a - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
% c5 m8 t- Z; \3 M) }1 k - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
% v( K& P2 q" q f) i; a5 K - delete还可以通过limit设置不同删除方式
( Y7 d3 c3 t# O7 `, x# p- `! a4 J
) n( ?7 F; q3 D$ w0 ?- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
# z$ ~2 j% S) g3 \ - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 9 z1 {8 n) R3 Z) t/ m2 Y
8 k# R# O. b! N5 u9 q6:捕获异常
0 g4 q+ P) r C9 n
8 W- Q/ Q7 h# q/ C8 O- MongoDB\Driver\Exception\AuthenticationException
) z9 N: A1 T) b6 i; V* d - MongoDB\Driver\Exception\BulkWriteException
7 D6 p6 I) B" M6 D, d( } - MongoDB\Driver\Exception\ConnectionException
& Y3 d# i, F( N; u, q2 e" J - MongoDB\Driver\Exception\ConnectionTimeoutException$ T0 o9 h9 e- c4 c- b8 o
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
' s* B) e6 y) }" Y& W' V - MongoDB\Driver\Exception\ExecutionTimeoutException" s: w& P8 L# ]& B" ]. P
- MongoDB\Driver\Exception\InvalidArgumentException* y; d4 b/ Y* {% q' l
- MongoDB\Driver\Exception\LogicException
, n1 p6 w& y" q( t6 f' x6 E4 ]9 R - MongoDB\Driver\Exception\RuntimeException
+ w& I |; e( e! j$ Y - MongoDB\Driver\Exception\SSLConnectionException
" N+ P6 N4 Z% L+ v d0 \: L - MongoDB\Driver\Exception\UnexpectedValueException9 O7 X! a0 W5 N2 a6 G
- MongoDB\Driver\Exception\WriteException
复制代码
5 M2 @* N! s% v3 ~0 J- Z
: h5 V2 m. O0 D( z" _7 V: [1 A( ?( {% E3 H5 L: z
点击查看全部
9 c6 [5 \5 y: {3 _
3 C2 c' Y: ~! x' l# i# K, U( c0 S t
|
|