管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
: P9 p3 D4 V r3 p; K0 K6 _8 }+ a. O N
下面用PHP7新的API总结一下:
! Z5 C" G W3 G; K6 b, s- P" `' u/ M2 \# c
一:CURD
- ~( a/ _! S6 i3 r8 @- w0 ^; g; ^* d3 s% j
1:链接
( \7 C; [: H. A) x
; |. ]1 O* E9 d! Q- <?php
5 D$ {+ p- }# l* \5 y* a6 _ - //链接mongodb
0 x3 g& c& z* s; J- g - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017'); @* f7 J, F; X+ {/ S/ M& o
- root 用户;123:密码;如果没有密码则不写
复制代码 $ G# R( y9 |( q# A
9 ~; J: d/ w" ]0 m# F; K
2:查询
: T. ]; f) x* q4 e/ h1 J1 Q: S/ D& l. k* i* ^" q& `# X9 E! h
- <?php- h: V6 A/ }# s0 ^
- 2 M& R6 L' ~8 ]6 r# m" N/ N
- //链接mongodb
8 p+ a" X1 _6 D& e) R5 i - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* |* E. N. k7 G4 v! @
/ K- `. Y* t6 c( f, F- //查询
$ y8 U5 T& D" |, H - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
$ B) f6 Y3 F# M9 P0 p u% | - $options = [9 N5 }, ~1 }8 z0 ~+ m i3 w
- 'projection' => ['_id' => 0], //不输出_id字段
" j& _ p* K% V, m$ d7 ` - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
3 \/ i6 j I9 ] O' ?# r6 \6 D0 s( _ - ];4 E0 Z8 b, `% S1 X; S2 c
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求4 S9 {5 N+ H, U
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
# q* T) S, X0 W' E# V' c$ |7 ^. ], k - 5 k4 u6 s' q: a! l# a" m6 m- D
+ b$ u6 `7 P- s! K- foreach ($list as $document) {
( ?8 Y) a; K0 s - print_r($document); 9 |3 I1 d+ N6 m2 u# m
- }
复制代码
9 n( w: k+ S( ~6 t6 {查询更多条件使用方法,参考第二节mongodb基本命令,查询0 n9 Y$ Y# G/ v# M
8 N6 K5 j# Q% f3:添加0 @( a2 E8 O1 K. Q' {
4 a% \8 @' W1 j4 @+ b- <?php
( f5 d' j* d5 Y) C1 H( n/ n* W - ) w& P! A K+ S% m! B
- //链接mongodb* B D6 d) b3 P6 E$ E( [! t% G
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 e) h- P4 _3 ~1 R" W/ c - 1 y3 H% s% c; \" [- j
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 s C5 D, ^7 j
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! S) Q: G2 E, @! I7 }. ] - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
2 N: g4 Z9 o U* @' [* |; z - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);: l; ~" A' k/ q# d0 \0 q
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
. T5 b! m) a6 x4 R4 q4:修改3 }: f: }0 i/ ~5 i5 {
) t! M- U3 N8 O: k- <?php
# r% f: J6 B2 B
4 l! m: Z8 J' v7 j- Y: M3 ^- //链接mongodb
# q7 j3 A# L1 G7 p; S - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* `+ T& {' M, Z1 Q - . C& x# L9 S5 t5 H3 \% l, Y
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
( z6 P( `8 z3 f5 }/ M - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行* P1 v; z7 M% [" o4 w% O
- $bulk->update(
$ C. q K5 M* b6 t7 F - ['user_id' => 2],. X! L7 o4 S# F2 W' n; {; R
- ['$set'=>['real_name'=>'中国国']
+ E {9 z* w% w - ]); " I q% h& r+ g& H" z
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
5 a% P& @4 d1 u - //1:字段不存在会添加一个字段;
. C* h3 X1 W- Y - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
. r9 F+ L3 x4 V1 j - $ X3 @# k' o/ ]4 s" X) V
- " T# O2 S% U9 U
- //如果条件不存在不新增加,可以通过设置upsert8 ~" _" u( r, e _( ?7 n7 V! M
- //db.collectionName.update(query, obj, upsert, multi);
4 G) W8 e7 X+ D+ S- X; z - * w. x: f) M. P
- $bulk->update(
& D9 _" ~6 w. G( f: Z5 b" w - ['user_id' => 5],
$ p+ l6 p9 o4 \" d* _ - [9 M3 r( W4 J! a. ]' b( g5 `
- '$set'=>['fff'=>'中国国']
) L5 R. {0 u+ r+ s2 M; O0 t [4 _ - ],
/ }% b; Y) H( o; s5 U - ['multi' => true, 'upsert' => false] - y( m# J9 [6 m, m# x- r
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条0 m% ]' x1 \! F' L* s
- //upsert为 treu:表示不存在就新增 {" s- \" n9 c* D% i( o4 k" }
- );% r+ H& \0 T0 ~- w6 P# Z
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . y, h* v* C3 D/ u6 }* r( A
! b! ^' D( i/ E1 l3 qordered 设置 B1 O$ T8 k; k n0 L% x; n/ O( q
7 M" u+ g2 {$ Y; w3 {+ E9 A9 b' T- v* l
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
1 i* `% t6 Y! X9 \2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
7 x* |: y) R6 c# s$ F( G7 v' Q/ k/ n, F- M# S/ `, g T ]2 H( i
5:删除" C) F0 b2 `/ u, L, p: s" X
* B4 x. C) a" t' y1 M- <?php' a" L8 Q$ M1 }
- 6 }) Q n0 E* L' Q7 ^
- //链接mongodb& U& R0 [/ j8 W8 f& o4 A* b" [
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');9 T7 a& B8 U; f/ r! q. g. N8 j* a
% J7 K+ p' i ^$ ]$ q- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
% q$ o- G% k7 J8 R0 {3 x/ U - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
8 A0 G4 b: G: \. g) f - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段; M: U) a2 ]5 w/ O" P
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) l! D! Z- v& t& U
- delete还可以通过limit设置不同删除方式. [% ?- K6 ^' H" U2 k i5 `
9 s8 N* ~- ]4 K, t8 p' j- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
0 c D5 h* b/ z2 E - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
9 B# `) P# d' L- m6 k: {# |# m' ] z7 z6 X5 e# l2 G! B3 b
6:捕获异常; m/ D2 }$ U1 k+ O& D# b
# u% _% ^# r# i
- MongoDB\Driver\Exception\AuthenticationException
. A( \8 V1 e% y. u$ z: K7 |% k% U1 @ - MongoDB\Driver\Exception\BulkWriteException
/ p0 I; X' I h" j+ B9 n& R - MongoDB\Driver\Exception\ConnectionException
- e* O* H5 W+ }" V: p. X+ a# n - MongoDB\Driver\Exception\ConnectionTimeoutException; R; r5 m- J! w' J4 U$ k; M3 D4 M8 R
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口2 l; G9 C; ^9 p ^3 ?& g& e1 a
- MongoDB\Driver\Exception\ExecutionTimeoutException
+ m! c+ O R) C5 v) C1 f" ]2 L - MongoDB\Driver\Exception\InvalidArgumentException
% I" m4 R6 E0 c; f! K) M/ j - MongoDB\Driver\Exception\LogicException
4 v' _! b; D: C: |6 j6 e+ o - MongoDB\Driver\Exception\RuntimeException
" @9 E5 t, T& K( L: B4 \ - MongoDB\Driver\Exception\SSLConnectionException: n# _8 q4 t0 Y I8 l: A
- MongoDB\Driver\Exception\UnexpectedValueException
6 Y4 _* E/ g! e U! n8 | - MongoDB\Driver\Exception\WriteException
复制代码
! U6 n% o0 E* x9 V! S" y
) ^5 U. ~5 a4 A, z
7 l% }* ~, P1 w$ I% { j; z8 v点击查看全部
# D6 A7 y2 c1 D+ C
2 y, [: A4 u7 k: x: A: b \! @6 `) Z# D2 ^
|
|