管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
: l9 X: I' t1 j( @6 y1 v+ l
0 g$ r8 Z t1 \5 C3 X4 O下面用PHP7新的API总结一下:
/ c: P J) l6 H# K6 }& @1 K! Z! q1 P
一:CURD4 `% `& B% k$ A5 L- }, }8 ~
" @- H' ~2 g9 l1 q1:链接/ }4 x, A3 A4 d+ ]5 C+ B$ E
$ r; E# X6 z9 ^/ { A- <?php: l. J/ _/ T7 O7 H# }; Y& P# a
- //链接mongodb, _2 J& J' _5 O" a( z6 }
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
Y3 h* Z1 u, Q. R# M' B1 u' w6 Y - root 用户;123:密码;如果没有密码则不写
复制代码 8 N( s3 @( c' ?# J5 B6 J
6 m j3 e5 b7 M4 j. h3 p0 e2:查询
2 A; b( A" o7 s8 ~1 g% q+ B. |! r* R4 l8 h0 ~% T
- <?php( f- D7 N& H' t0 y
- 4 {, C2 c8 Z9 k' C
- //链接mongodb
& d5 p& T" L6 ?# L' h+ o3 q - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" ?% B z- [8 e% T2 z! Q6 d7 r( h - 8 [8 k* g6 B0 c* y0 K- q* i9 _
- //查询
- q* \* W7 f$ L# s7 l9 Y - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
1 w/ E0 J$ [& N - $options = [" d, z) R9 A* I4 j: S5 i- p/ o2 F# o
- 'projection' => ['_id' => 0], //不输出_id字段1 [4 x! T# _) y, I, T# ?+ G0 |
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序4 \! W7 g) F; Q4 z& r; u
- ];
; I+ J, |8 f' \5 H - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
. S+ K$ U" w) ~) Q& `1 J, L' R- P5 m - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
6 v7 ` A: ], s4 B+ R
) S" T5 p3 v: [+ f; M
) x4 u4 \ x. Y7 \1 {- foreach ($list as $document) {, O) _* j) e9 C2 ~
- print_r($document);
7 p' m! f2 J0 P/ U' [4 r% s( ~; @ - }
复制代码 ! @8 S! l% v/ {- V' e! n
查询更多条件使用方法,参考第二节mongodb基本命令,查询
. E0 q* J4 b8 Z# U: |7 K9 q% d6 `9 t" D7 f6 d& d- B
3:添加
9 G4 T S4 }+ P, X+ l* J8 G! |# r+ V7 a# L! b# s6 k
- <?php, \) K7 H8 s8 r" T# n% W
% L: E7 l0 \% A0 J# g; s5 q" a. a' B- //链接mongodb& w3 Y* D. D* Q, e& h3 ]
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');$ R1 \; O* R# o! e. S% U
M' q2 Y. O2 \- ~- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
+ ~* G: G! V0 q8 i) Y( q/ Z; J - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 |; v, y0 `# k4 Z+ k G - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);& v5 S$ b' [+ ^! m" f+ H
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]); J" t5 D6 e3 Y4 `
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
$ q0 J9 g6 Q n3 o" c' q4:修改
+ P( Z9 U! t4 q( C: u3 f
( P o- j6 O7 i8 @, N; z2 M- <?php: W" _, l& E/ V( |) i, o/ b
- 3 V" ?4 A- S; Q4 b
- //链接mongodb+ T0 N( `: Z; q6 f9 b
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');+ i2 `4 v5 C* M) z
- 1 G& r, R$ @( r
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行3 j2 g: Q3 f. C$ P3 b- t
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行" B) K3 c H/ q
- $bulk->update(
' e! p6 [% |3 O# t. D - ['user_id' => 2],
1 D. u% l7 J0 m6 o - ['$set'=>['real_name'=>'中国国']% S6 ^0 y2 L3 N
- ]); 3 _4 i- a9 u# B3 g) [
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,4 B1 a }6 j( g: o; G$ Y' _
- //1:字段不存在会添加一个字段;7 y) g8 p$ b) W9 }8 N, ?0 Y; |0 b
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert; c0 W5 S3 g$ T6 I
- 3 O6 k/ C" O6 I- m: _7 J
- * u% y& h! ]. c: v
- //如果条件不存在不新增加,可以通过设置upsert
! H, c/ K5 K4 a2 P+ g. s, ` - //db.collectionName.update(query, obj, upsert, multi);8 Z5 S& ^; ?* D" K
- / x! Q9 J' K# ?" Q( W9 g% y& \
- $bulk->update(
0 C% L- p2 Y; s+ R$ \8 w4 b - ['user_id' => 5],
4 a5 A0 l1 I8 U% T) F$ O$ v1 r4 u - [* b- v6 U9 b7 P: d
- '$set'=>['fff'=>'中国国']
& \1 T, E& \- ^' @" y. r$ x5 A& C - ],
2 {+ V4 ^/ B, F1 C4 H - ['multi' => true, 'upsert' => false]
, v8 N" I9 _/ L' m2 D& t" B% D/ d4 T - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
0 h J( X% U) R! A- N7 q( s - //upsert为 treu:表示不存在就新增, G$ ?0 g0 e/ U
- );
' w& b) Q' e" n - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
6 N" P7 y- h: |0 H: _" s$ a/ f! B t; m: X# F& w1 Q4 F
ordered 设置9 V h4 T. ^/ Y) \" O
k& G" l" b4 E3 B3 k+ @1 l
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。, e3 V0 g3 [: V( o' t
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行/ N% j. b0 I: S% ?1 M* W& g6 |
/ X; ^5 R/ J' M( v
5:删除
+ i& W$ W, B( h2 R; x7 w' Z6 j J/ L) t/ s" G
- <?php) X2 M! Y1 Q& S7 V$ R
- , v/ u; A, G. _. u$ _
- //链接mongodb. @0 F% S" {$ n& i ]
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');. F9 a- g k% [
- S9 \1 C; }- l8 F' b- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
$ ]4 R* o0 U' J; i' F: K4 k - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
' x4 z8 {, G& E; {% l% T( I - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
) B4 r$ k* t1 m; ^3 l - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合 g$ e( I$ n3 X I4 U9 m4 |" G5 [
- delete还可以通过limit设置不同删除方式
3 u5 [5 X6 e2 a& z- [. X# x - 1 ?9 C8 n* I0 u& f& J
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据1 F* A5 X6 e% _, s
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ U8 i9 K8 e# ^4 u( N0 ?$ Z8 X9 R- R4 R: k, {; n4 s
6:捕获异常
) f. s& \6 N7 ~7 } u
0 R7 V- h+ p8 q8 x$ o- MongoDB\Driver\Exception\AuthenticationException( A: ?- }4 {. @" h! I
- MongoDB\Driver\Exception\BulkWriteException: @; }/ R$ v5 j9 }6 W
- MongoDB\Driver\Exception\ConnectionException, x" F. c8 \) i8 r
- MongoDB\Driver\Exception\ConnectionTimeoutException. u; ^2 Z* @2 P/ |4 {6 U/ K
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
0 F; {6 ~" n5 I1 l$ s - MongoDB\Driver\Exception\ExecutionTimeoutException
1 y4 _1 W2 k7 u4 m - MongoDB\Driver\Exception\InvalidArgumentException
7 ~& j5 F: U& k. ? - MongoDB\Driver\Exception\LogicException
# d' v8 |8 a# b0 w9 Z - MongoDB\Driver\Exception\RuntimeException
6 \2 T1 ^6 e7 Y6 M- K! i - MongoDB\Driver\Exception\SSLConnectionException
5 K; V3 ^: m; v% ] - MongoDB\Driver\Exception\UnexpectedValueException
" T! A' B1 C* u' a) x- U! F - MongoDB\Driver\Exception\WriteException
复制代码
5 R, r# l9 Y1 M; y) _) W) U% ^, y' ^5 c a
/ W4 c. r" z- z点击查看全部
2 C; k& x8 Y7 F: q- u2 g" _/ w9 b
3 {; q0 g0 M( O) Q" H4 V
- p& ^( @5 k3 h: X! D! p9 N |
|