管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
4 F4 m2 H# ~: f
i( u& M5 I$ o8 ]: n& a l' s下面用PHP7新的API总结一下:9 Y: M, M1 X) e) h
( L. O- w' N+ B( x1 J: @
一:CURD
( ]8 [) M+ ^1 x5 @4 o5 [* b9 N/ P. ~
1:链接
) Q& K4 G5 a( D: M" ]! v( J* B; R; W$ e' U- f
- <?php4 R {/ O, Z: o3 U$ r! s
- //链接mongodb
7 X, G+ { r/ X" T' F; I% U$ N - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
! G7 o+ k; I+ \7 Z; R* y5 H! y, n - root 用户;123:密码;如果没有密码则不写
复制代码
3 H: E0 K( t3 \* `& |
& l" E) }7 M3 P3 v3 Y% l O2:查询; c; J/ _3 v3 v7 F i; A
u0 m; G i9 k) P
- <?php
3 ?$ X9 A0 u' r
?% e( n3 s- x- //链接mongodb
3 h" x0 R7 X* I$ K9 {% o - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- o- w) B, a5 O" |5 ~$ u" P
: q* |9 v: ?% ?7 b( G* y# {: B; o# s- //查询% X7 w& s1 l$ A3 w1 `* N' S8 l
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
8 b U2 s3 G v% q& N+ b - $options = [
. a# l6 P/ m3 h8 C - 'projection' => ['_id' => 0], //不输出_id字段
. y* _, M1 [! d, t8 f' R6 S+ A - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序( A- s+ A2 `& Y! e1 S( N& ]
- ];, F. Q1 G) T2 h) W
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
3 |$ {8 V3 @1 N - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# a2 |( Q! m! _7 u: Q
, L0 `7 v8 K! f) A1 D/ u5 K- & C5 J* l1 k5 j9 O
- foreach ($list as $document) {$ \: J1 b( K5 Z1 r$ g, h
- print_r($document); 2 @9 P3 ^; Y: w3 r
- }
复制代码 : \$ _: Q: \2 g7 E
查询更多条件使用方法,参考第二节mongodb基本命令,查询( j" s# K# H/ t/ c% b/ u$ N; u# T
$ n( z0 T' Y( x( @/ |: x- O2 B
3:添加
+ {: g: V0 V$ X! B( m2 ]$ g+ B8 s$ j* T
- <?php! Z, z! M, Z% \
5 w/ Y9 L8 A6 J( Y: `8 U, u2 j, x. z- //链接mongodb
' C, W6 w: ~6 \) \1 f - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! H O+ Q# V) j! r
7 O; V& M9 U4 o5 p `- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
: e+ \9 S* b9 O5 D1 R+ P! E - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
`4 c4 @) F$ S5 _2 {1 _+ W - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
% \ }; k) x0 ]! [ - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
/ c. _8 Y) Y7 R# W1 S( B0 B - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 - A9 i8 j! m n+ s/ l
4:修改& F/ H" | Y2 V i* n+ l
% U( t! N! {% W6 G
- <?php
1 M& Q9 ^9 f8 S) x3 x
4 u2 ?2 \6 U+ |- //链接mongodb
8 c8 Y( n/ z: z# E - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); j8 n# x9 p% G! ?( _& O$ M
- 8 O) I, A$ M6 g* a
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
) e% m: v8 i& W& h5 S+ K+ H9 r - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
+ f/ z# w3 T0 `! \. m0 R* X - $bulk->update(0 E' \4 I; m9 E5 Z/ b, P
- ['user_id' => 2],$ a0 s- p0 ?; K9 ?$ `* Q
- ['$set'=>['real_name'=>'中国国']! x, I5 D% ~8 w& q2 ~
- ]); " p( y1 R. t" G q9 h
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
- {5 T m! v4 I) i) ] - //1:字段不存在会添加一个字段;* q" D9 b% W( i! x
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
) J' r6 w) e, n6 g; p1 K - 6 a* {) [( L2 E4 Z
- 1 v1 F8 M- P7 i4 H
- //如果条件不存在不新增加,可以通过设置upsert
5 \6 W/ ~. A& o( X% f' @) b - //db.collectionName.update(query, obj, upsert, multi);) {' G' h" Q* h5 ~
- & g8 W1 u o( j5 P0 h( E
- $bulk->update(
+ V+ Y! f$ ?' u) H& g: P - ['user_id' => 5],
8 Z# t, `1 x% F' G5 i - [0 f0 d$ b9 M# p6 K4 J5 e8 M
- '$set'=>['fff'=>'中国国']
# J e' H5 ?9 y4 P/ r! |* w - ],
3 n# A9 Z6 m! p7 ^5 K5 K - ['multi' => true, 'upsert' => false] 5 W) b k/ r- }& v
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
w5 B& X7 |& X6 W# o* | A - //upsert为 treu:表示不存在就新增. m. W- i$ D$ R) H
- );
1 A. j# _4 n6 W3 _2 Y2 X9 F7 U - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 8 }; ~5 Y2 i$ V& g4 x
" x8 k% e `; p4 E; ~' N
ordered 设置
7 M( `5 V" V8 i/ M$ m& q) u& r' z
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 L6 {4 j9 w! S4 B/ F: a) C
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行2 u2 x4 d' Y, c
4 T: X& S: R$ F; V+ k' C5:删除
2 v, E" m$ X8 ~4 q! [
9 l$ w7 P$ O0 M+ e. ~- <?php
- y$ I- N3 X- o% f4 O1 W" O
. x$ A* Z6 `# d, N0 Z& c( o- //链接mongodb! j. v: v( w5 y8 J
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
5 @* z* x3 K& Z/ u# {$ k! y
: i* O# b t$ {' g- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; V; Z9 q }% N4 U+ d - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ b: ~' g; Q3 K; Y3 S% a
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
% b; p7 }6 w f) X% H% r% q* _ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
$ { w$ j- F( G; d# v; h8 Q - delete还可以通过limit设置不同删除方式
4 H! l' U/ I; Y. v8 Q1 d2 h
% S3 n2 L3 n. t# A: O; w/ C4 w l- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据% H4 E+ ~7 Z0 G3 S H2 E w
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 2 r3 e1 m! E7 o' g! P l" L9 H( c
2 a* L" U( s% f0 C, S
6:捕获异常
' s; P' D: ~+ h9 N& K; F, h% g/ ?9 N7 q7 M
- MongoDB\Driver\Exception\AuthenticationException% ~0 _! ?2 Y1 u$ n; h: @
- MongoDB\Driver\Exception\BulkWriteException; i; \0 }) I) C) y7 ?
- MongoDB\Driver\Exception\ConnectionException
6 P0 Y' j7 [5 Y6 Z9 c: o - MongoDB\Driver\Exception\ConnectionTimeoutException3 Z8 L1 O3 G2 j
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口! L* k2 g$ C/ S: {6 X* k( I
- MongoDB\Driver\Exception\ExecutionTimeoutException
) [2 J, L5 P9 `' v: A; q9 A - MongoDB\Driver\Exception\InvalidArgumentException
1 o) t. }+ X6 l0 s- G$ W% V - MongoDB\Driver\Exception\LogicException
' ^% L: T+ ?1 @6 t, F* _- w - MongoDB\Driver\Exception\RuntimeException4 w. q( ?. d: F% B9 E5 z
- MongoDB\Driver\Exception\SSLConnectionException8 M O# B1 D, Q5 W: ~% k8 n( L
- MongoDB\Driver\Exception\UnexpectedValueException- w) _6 t4 Z3 o) c l
- MongoDB\Driver\Exception\WriteException
复制代码 $ [8 B8 Z- h& o3 o% Y1 a
4 P( s; F) K* K- z) q2 [+ M( K0 g% s, A4 h4 @& [+ @
点击查看全部* g+ Q& T' }. V$ i
; }* ^% Q6 A; b3 v/ k5 w1 C1 m" j. A# }$ U* u
|
|