管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
9 y. ]. Y% E6 C" F/ i1 _8 l; _ L
下面用PHP7新的API总结一下:
/ n. Y( ~: p1 U/ }2 L3 n( d
2 ^7 E0 r, W$ q7 `5 q' H一:CURD: |! `2 O" \4 G6 y- }
5 v4 `, Q4 Q* q8 J& @, j1:链接; s8 o# g# m |8 e5 c2 `7 x4 m
! G9 e8 M! P% N7 M( j B
- <?php+ o( M! `; E( o9 g$ y2 Q9 _/ C# k2 n, \
- //链接mongodb
* y" V1 g$ ]" e2 ?8 Z$ m& a - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');" [) ~9 ]6 @) n% ^/ k8 J# x. R1 u" e
- root 用户;123:密码;如果没有密码则不写
复制代码
5 L. A! n4 O( y; p0 `: e& E: d- y- W# _* k( S6 W" g/ ]" _( u( P3 F
2:查询
" U: F5 p3 z, y8 i7 \3 s
2 }( F5 E j3 m, ?8 H( `7 v/ T8 I- <?php
, K, C, {1 w0 K - + b5 G- O" K% l3 T
- //链接mongodb: K" V( r- Y/ U7 K) d
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! c, {' ]6 Q; J3 f$ T% @/ w6 m
- * T" j3 p, l' Z( r$ n
- //查询; M2 w7 e; `: ], z
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0; f: W1 t5 z; d: g
- $options = [' I0 l8 M Y; X& y$ m' _% v
- 'projection' => ['_id' => 0], //不输出_id字段
, _) C# b8 v/ E8 H - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
" m! i: P+ z2 ^ - ];0 l' Q T, P/ y- S3 t
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求/ }7 p+ U* A. q7 z
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
8 U# ?, d! ]- e1 h+ X1 m - & _3 d" [% R- O
- " K+ \2 i' ~8 Y, w
- foreach ($list as $document) {
9 |. Q4 D: V5 E" s - print_r($document);
" O* ? u3 s- E9 h, o5 m5 e - }
复制代码 ( b7 U! m( K9 I' }- R
查询更多条件使用方法,参考第二节mongodb基本命令,查询
- O( ~/ i9 v1 j. e7 H! y# Z; Z( o l7 R4 j0 n1 {
3:添加
& W8 m2 ^* v" j: r
, p5 X8 u7 c( J: ?9 O- U, |( |& [- <?php$ [& d6 C/ l7 e1 }5 _
- ( O4 Z4 m9 [% u) s. g
- //链接mongodb
" `+ {$ N8 q4 D! Z; [ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! c( m3 B. Y3 N y
! \; u4 |9 i- k- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( h. M% Z: f- C9 O$ [* \& E8 H
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! _% e) D/ `% C6 u( M7 j
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]); t$ U! _; n! d Y
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
2 I1 ]; e: B+ @* ~3 { - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 6 Q& X9 a. F/ P2 Q* K0 |( d8 K
4:修改3 B0 `! [4 t M# Z+ k
( K4 l) {) c0 d' Y, Q9 J
- <?php2 R. M6 ^7 }& N
$ ^' O" p% o/ w6 A- //链接mongodb- v1 `8 ~. s7 d' C
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 @4 d1 C8 G) ~
- ' X1 I A$ e. \2 y, |
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行* u) c5 z4 I6 u0 V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* P/ R. I3 _6 s. X5 s - $bulk->update(3 j( }6 ~* ?/ x W: i* D. m
- ['user_id' => 2],6 O# G, `* _3 W7 \6 B/ Q
- ['$set'=>['real_name'=>'中国国']
2 Y9 N: { z w& t( N z - ]); 0 t5 ~4 x h, i& y+ H) \2 u* g A
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
0 P. K# G+ x2 R* y% d& T2 M% l - //1:字段不存在会添加一个字段;) g, m2 d: c, @; P
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
& a4 t" W9 J( c& v' Y
% Q, g* s M* M: p
. C$ Y7 B# O* C% W) M+ J, w9 \$ D- //如果条件不存在不新增加,可以通过设置upsert3 Y' P; v1 i6 T& q. n& f! ]) I1 J
- //db.collectionName.update(query, obj, upsert, multi);9 T; x+ r/ f ~! b
- 2 g8 o5 \4 Y+ _7 B$ V* c: N. i
- $bulk->update(
8 j# S. d4 `* X1 m5 s& X9 g - ['user_id' => 5],
0 Y) |9 o& R8 E; C2 w& u4 d8 X& ]# k - [1 [, h+ Q, ]9 e7 s& ~
- '$set'=>['fff'=>'中国国']: S% Q! D; j+ Z+ i; b0 b. V0 B
- ],& v7 Z5 {& |2 a+ k
- ['multi' => true, 'upsert' => false]
; n U3 E) q2 n& W - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
e+ Z3 J. ?) x8 b- E - //upsert为 treu:表示不存在就新增! }5 ]$ B9 ?) j6 }, M" \3 m
- );
" G0 L$ Z" N( e& d; X - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
; z3 b- K9 ?" [" c+ b
2 i5 U/ o5 G( y1 p2 ]) k" Pordered 设置, ~, b" p& e5 Y$ q% ^7 x
9 E& }' X0 [1 |1 r& R1 i1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。# c W/ e [6 F: r
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行+ Q1 A( c) }5 I6 @' I- X8 F, o% B) j
1 C4 B6 u, M- i: d2 U( G5:删除, W* {7 c7 K7 y) l0 V+ s
6 v9 ^! a8 `; F- <?php
& {% O" ~5 t4 T) R7 Y
$ E! u$ O# ^$ c4 r" @1 G- //链接mongodb
3 ^6 h" S7 w2 N' A/ A( D - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
7 |9 n+ ]8 A! N4 e - + M% }( w. A- l( D7 R$ X P8 H
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, Y1 ?. j7 V: H( c" V2 M0 \9 J2 ? - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 N: B2 S2 A$ K7 T' ~( G$ Z
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段, X; u$ ^, J. \% ~- ^8 a
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
& B% t% z6 H- [2 v N5 ^ - delete还可以通过limit设置不同删除方式
4 z) x5 p; Z1 [ w3 A. I( {3 f; g - 3 w+ u7 w$ M& p1 w" Y
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据 M6 p, k, d! q9 \% _3 C+ n. l3 k; f
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 " i5 k5 i* V& @ i' M" {
: K# B. R& i `0 u" c% t6:捕获异常
" N; l% P" W2 p8 W$ c
1 Y4 W, ~" h# ^% a3 w# W' y" N- MongoDB\Driver\Exception\AuthenticationException( a: _. J/ ?3 h& X; G
- MongoDB\Driver\Exception\BulkWriteException
6 C% U9 U. e& s2 l2 v" F - MongoDB\Driver\Exception\ConnectionException$ l6 n$ l) Q+ Z. i) d4 e; c+ G
- MongoDB\Driver\Exception\ConnectionTimeoutException. [' U+ ^8 @. n; ?6 }! c6 n
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
* T, h. ~% b2 T. L- v! X - MongoDB\Driver\Exception\ExecutionTimeoutException$ X5 U1 E1 h, a) N* E0 q+ u2 t
- MongoDB\Driver\Exception\InvalidArgumentException
]+ [4 T; ` C1 H - MongoDB\Driver\Exception\LogicException0 b1 D" D+ {, h+ R
- MongoDB\Driver\Exception\RuntimeException; i: Z, H0 e5 n$ S. |0 w
- MongoDB\Driver\Exception\SSLConnectionException' X N, @: q: q
- MongoDB\Driver\Exception\UnexpectedValueException& s9 N& c* T1 e- r6 S2 `4 ~. |% C
- MongoDB\Driver\Exception\WriteException
复制代码
9 L4 e, J; i8 f: |* X
" O8 @: W1 C! c; T
' N& ?1 y. k f3 F+ r: a点击查看全部
) c6 R% r5 y+ J7 Z
" d1 [7 h1 D( o* R
; H3 F+ _% J- l5 r |
|