管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。8 J- K0 c8 e+ J; [! d3 U( f
8 l5 C ~% D: N( P7 t6 p下面用PHP7新的API总结一下:
6 @1 y" U# A+ n5 }) Z3 v9 [
/ T$ b9 M& @5 W3 k8 S( f9 Y. `一:CURD1 C8 i3 x/ C9 i( r. B! K
" f; J. d9 K! A* q8 V U$ g
1:链接
" o' Z/ I8 z. w" ?0 p9 R5 O/ [5 Y, J% @& N# U5 a* G% j! O: @% ]! H$ U
- <?php
. [% {* M8 q( f. u - //链接mongodb+ T U* R6 A& N0 p+ F
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
% B, ?6 @/ Z9 A' X( W- G - root 用户;123:密码;如果没有密码则不写
复制代码
- f% k; x2 H; N' z9 C
( M: g3 O" P- N( o' e, h2 ^2:查询
9 Q) P7 U+ p! ~# X P8 Z* y2 ~. |1 G5 c0 n( {
- <?php- \, R; Z8 U% C; n* }
4 X) \- ` t8 Z0 q% l& \- //链接mongodb8 M7 T: `9 h5 w
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');1 F$ ~, y4 i X# J' Y# d
# }% u H! o# G& i- //查询
. [3 y) V1 A/ V: X+ e - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于07 F4 Q+ @( ]% n" i
- $options = [
* i( f/ e' v8 E, L) M8 n- e# l - 'projection' => ['_id' => 0], //不输出_id字段
` ~- D5 J N# |& E2 @' }8 x - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
& d# I Q) ^$ t9 w. m. `3 |* {7 K - ];1 F% E, Y/ t& A; |: r8 W) A9 L
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
# b9 Q9 j% V7 o( d% J - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
/ r. Y4 x1 M/ H& S5 T - 3 i6 ?, ^1 r: k T; \
- $ Y# B3 x2 E$ r- u
- foreach ($list as $document) {
5 f! C. l2 }. E1 |5 R/ A& ] - print_r($document);
4 u" D/ c; q& z( Z/ I2 S9 L - }
复制代码
2 O9 v9 H& O5 r* e" }" R- I查询更多条件使用方法,参考第二节mongodb基本命令,查询" U- Q7 u9 ^" R( H4 C
! W/ E7 L# \0 Y* M; O3:添加
3 G7 w+ p# A6 W4 r& E7 W% Q( ?$ `" x( m' B5 B3 o7 c, C
- <?php, h$ \$ T) n6 O1 q, n
- ) T" |% z7 n8 ]; Q& l: R
- //链接mongodb
, `. X; q! {% s - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' [8 ]* V: t4 z- A) F% P - 0 y1 N! I4 L0 \: I. h+ M5 Z3 {; Q
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
! L6 @- H: k+ C - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行3 d9 ?/ n! K' e+ V
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);8 P8 m/ ^& Z( r* G
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);. ?" H/ r0 [* f- c$ r6 X
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 5 i- e9 d% v4 K d# \
4:修改
j3 I; t3 v+ m, B Q/ Q% k: e" F! ^% [/ ^
- <?php X! u L+ T0 m- X' @0 q& C: e
! f6 }, |; y5 c0 d7 g- //链接mongodb( j( K( T8 }, Q4 `4 Y# S
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' @0 E5 e, _) K* ~: b
: E( p/ M, Q2 c, P7 p5 S/ Z. L- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行" b4 r: O9 d6 y$ }1 w- l& U
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' w+ ^" |4 p, N2 y8 Y
- $bulk->update(
4 H+ E4 z8 r. D - ['user_id' => 2],
; L% G7 L' d5 N0 D - ['$set'=>['real_name'=>'中国国']- e" ^* l; R; S/ g7 O2 c! K
- ]); ) U4 d8 o9 y7 V0 P. b
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,1 G* b# t7 f( F( }9 R) Y/ x, s
- //1:字段不存在会添加一个字段;' |) g$ ]9 f4 s% l+ z: E
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert* @! C; R4 B3 s8 o
% V- N0 X; [* b( L: n" C& X) f
) `. Q1 |4 q) m, J: C# Y, e- //如果条件不存在不新增加,可以通过设置upsert
$ m- z k) s; \' U - //db.collectionName.update(query, obj, upsert, multi);& y) b9 l; i1 P8 [- m' k
: i7 ?9 v" K0 v- $bulk->update(
" B1 m' A; W* j+ o |! K - ['user_id' => 5],
& V; w' I( n* _& _ - [
* n r. N+ H" t - '$set'=>['fff'=>'中国国']7 C/ W/ X1 o& S" M9 @$ d- p4 [! y
- ],0 r1 r+ O& U- l2 ~: M0 Z: B
- ['multi' => true, 'upsert' => false]
/ N7 O6 B7 g' j0 |8 p) _ - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
& b9 c4 H4 _3 V0 Y; X% A - //upsert为 treu:表示不存在就新增 V4 X% l- c8 R" p4 L
- );
/ Z% C3 b$ G+ C' u - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 5 t* v- f: l- i8 w6 a7 y0 [
. R( O b$ @7 Sordered 设置
4 _ F7 W# a. \4 b% a7 _' F r. X) C# R4 l7 a
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! Q3 ]& k; g' o! H: b$ p$ F
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行! i& R$ o. S, h! `9 n- H
" R5 W, n @2 l8 U* }9 H' R5:删除
9 ?/ r6 q) A( E% i- I# b
7 J1 _- A1 w# E- <?php# |- _" h, D; G6 @% ?/ [, \
& ?" J) l' r+ R/ l& v. I% l- //链接mongodb( ?% v& p" E7 D+ Y& O) b
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" B: j& f$ U( K8 c4 F [5 x, ~. `
! [9 W7 b, p# w; ^* `& x: w$ B- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行7 Y2 c" [4 ?. Q3 M
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( B& `$ H% |) A) z) e0 K - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段! {- p7 R( u+ d. L5 c9 d
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
) C, E8 A; |7 S - delete还可以通过limit设置不同删除方式
+ X9 f* q# n: W' f) y# F9 F
6 R( \& e% D. x5 u! z( E- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据5 b1 _# X R0 v2 c
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
6 y7 A& d C2 ?, U2 D; m1 b- C$ ~
; R% S- _) W' n5 e6:捕获异常
! h Q8 b* z& q' e( H( |6 ?+ U# t( R/ n! O
- MongoDB\Driver\Exception\AuthenticationException
8 _. N' U+ u9 N+ C) F1 L8 E5 } - MongoDB\Driver\Exception\BulkWriteException" x+ K+ C7 ?/ _7 } C! E
- MongoDB\Driver\Exception\ConnectionException
* M, q$ z' f& J - MongoDB\Driver\Exception\ConnectionTimeoutException
, v/ o. p# U+ ^9 }5 B. t - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
4 K- g: O; J8 s* r" ?& K- J( K7 i - MongoDB\Driver\Exception\ExecutionTimeoutException
( t4 S9 S. x) w9 |( O* j - MongoDB\Driver\Exception\InvalidArgumentException
, V' D7 x: l4 X6 ^ - MongoDB\Driver\Exception\LogicException
5 u, T' {1 o5 Q" W* L - MongoDB\Driver\Exception\RuntimeException4 c$ Y1 @# |/ ?+ I) J! f
- MongoDB\Driver\Exception\SSLConnectionException
" C( o! v7 \2 k1 ^) s3 r x - MongoDB\Driver\Exception\UnexpectedValueException. f# |8 r R& n
- MongoDB\Driver\Exception\WriteException
复制代码 2 ]# F. }5 b3 T% Y, \# m9 _: o
0 ^( V, }$ ~* _4 w2 _3 M3 h! R
1 E, r6 ^, x& @: A$ r! i
点击查看全部' t7 |- S+ Q4 |, I& }3 b' o
# k9 b8 w T3 U, c& @3 Z
9 r3 H4 |* ~' k2 f5 }
|
|