管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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 i0 d$ b q: v; O R
# u$ y/ d1 F% q& ]3 W' m% i( @
下面用PHP7新的API总结一下:
- r! d% [0 T1 w) ^# ~6 |+ g. D/ _7 ?' y$ h" H3 I
一:CURD
6 A; \7 q* m3 q% |
- G. U3 ~$ M2 i; J8 i( W1:链接" U% r4 t/ H7 {, L
) W3 r# F! V7 ^ X% r; _- <?php
( D5 _! p$ f, k8 i& J# r; y - //链接mongodb- E. p X. P( `# N
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');* }& J: F/ L& { l$ G' Q
- root 用户;123:密码;如果没有密码则不写
复制代码 ! E# |# R1 y) {. W
" K1 M( e; E; g2:查询
$ D; C6 S- Z: D! s2 v% I: s- h4 f3 R8 v2 g
- <?php
1 }( U4 c: A, m( `6 a8 M
/ v$ r3 m* k( r! N% t) ~- //链接mongodb3 d( ?* |. F0 [# J; |
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 O7 o' T& E- E5 |4 z8 w- w8 [; R - . k0 S: w/ \5 B; |# \
- //查询5 q" [& W# C ^9 K) Z/ E& _
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
9 }4 ~! X7 V8 H' q# W v - $options = [8 t2 N- P: ?3 r1 g: m
- 'projection' => ['_id' => 0], //不输出_id字段
* ]% R, x% j# p9 k - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
& |. a8 C2 C$ C - ];
/ f0 s2 ]8 N7 n N/ e7 X6 X - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
) e- g! q6 | E; _; A q2 l2 V @3 U - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合! j3 o5 b I# f6 o, S
- ; N+ C; H$ ]8 J# s7 |) }
8 X: q& _6 {" G- foreach ($list as $document) {
8 w+ o4 `4 T. L' L( [% v - print_r($document);
. l* [& s4 b) o; |6 r+ @ - }
复制代码
3 a$ [! p+ |4 ?; _5 ~& ~查询更多条件使用方法,参考第二节mongodb基本命令,查询
$ ~* \+ f- ?8 g+ T
/ R( }! T4 c: E6 E9 [3:添加8 u2 B7 q: F' X# B6 U
+ O9 A5 d1 q; E
- <?php
& K7 E+ c# W: h9 I# X
. e0 Z6 @1 X9 E& {/ T* o, X5 m- //链接mongodb
$ ]6 u: I7 n' v - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');" ?9 _* h9 [* n' s5 y Y2 q* K
% Z; M, W. k; x4 f# @, K5 C% B- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ A( z3 f0 Y4 O6 L2 V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行6 Z( c4 B3 K2 d1 }
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);, V% V! o& }& Y6 [2 o( H9 i1 j) b
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
% d" ^1 v$ W8 F - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
% v4 Y- G, d3 T. D' I4:修改7 S: V3 i7 V, e* e6 B
( X# W3 [! M1 @( l j- <?php# Q& v( L- c) }- {0 O, o9 w
: [1 n" c* k5 Z X, u4 y. {- //链接mongodb
j! M7 X5 E- \- t, J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 D- q* x! X. H- I* T% F - ( N/ N' V2 l% ^3 l$ ~
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
% y4 p8 g' C# M - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
* t+ P$ l' y/ G" B" J - $bulk->update(
' x0 i9 s$ B# Z% `2 c; h! [2 ` - ['user_id' => 2],% a; P: s6 L' R% ]+ w
- ['$set'=>['real_name'=>'中国国']1 j- I2 N0 G6 k( a
- ]);
8 b0 f3 P; c1 B/ z; H! L+ p. p - //$set相当于mysql的 set,这里和mysql有两个不同的地方,: q" Y5 F) Z0 w* i1 B
- //1:字段不存在会添加一个字段;
! ~3 n4 p. T& q/ c - //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ x9 ? l6 k% X" Y
3 [4 i/ n4 h# e* v
( s" V- r1 ~" P- //如果条件不存在不新增加,可以通过设置upsert
5 d# ^8 j% M* c0 b8 ]' v0 \ - //db.collectionName.update(query, obj, upsert, multi);5 E4 t- o0 m3 h
- c* n. q$ y0 E5 I5 G2 a7 y) f& w) v- $bulk->update(
) S$ W1 @) q5 Z1 f0 S7 h0 K - ['user_id' => 5],
* t W' X. l- ~ - [) ]- D9 f W- z
- '$set'=>['fff'=>'中国国']# d; S. a6 P" {% ?& Q
- ],5 x) z. s9 g# Q: j( x
- ['multi' => true, 'upsert' => false] ' I& k5 Q) t5 C3 n
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
" {& Q( c {& X6 }8 K - //upsert为 treu:表示不存在就新增
3 h: c) Z: g0 O - );/ w! b% O- x4 k) _' i+ B
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
% ^0 Y# E* @/ p2 |3 S6 y& Q/ k7 r. U6 }' T
ordered 设置
& G5 O- q/ {+ }; Y$ e8 t, x& M3 ~
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
) h: y9 R9 I5 z0 j" ?7 C2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
; p- w1 }0 Q8 ~) d4 Y7 l5 m6 U# ?8 Z }* E [: n# G0 t
5:删除1 G6 m. l& x5 i, w
* l% i/ |$ O. [
- <?php
' A7 c9 k! e$ N! E8 }4 l
3 J5 k; s" w$ i' |- //链接mongodb) ~' ^4 l: b6 J3 |. }
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
* h U4 F6 i, F, f) L
! {6 m* _) h) ]( a0 j/ T! z- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' `3 E* {1 t2 K' t3 y! F
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
' B& Z& _8 B7 u - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段6 D. k7 C7 ~5 G4 ?9 y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
4 K) z9 _$ L" Q+ F6 A6 ] - delete还可以通过limit设置不同删除方式
: { M$ V! L, ~/ z
8 s k# \4 i) B- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
n7 E2 j( a# j- t) l2 a - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
% F2 A# a6 ~) z$ }* G U4 w/ l6 V: V+ R2 \
6:捕获异常8 C* x& a O! F8 e& u7 }3 V, ]
$ e# W9 }8 w/ Z/ @; h- N
- MongoDB\Driver\Exception\AuthenticationException8 m1 c, |! I/ A' t7 u* h) g
- MongoDB\Driver\Exception\BulkWriteException3 `9 N5 ~6 G7 q7 j6 D$ ~. Y. d% h- f
- MongoDB\Driver\Exception\ConnectionException
3 @' r9 b5 n2 A0 O) a. B3 x6 Y - MongoDB\Driver\Exception\ConnectionTimeoutException; a) [# m5 D6 @9 e* S( R
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
0 ^" Z1 Y2 }7 m; [4 Y - MongoDB\Driver\Exception\ExecutionTimeoutException/ A) D- G1 N' J, i0 j9 w
- MongoDB\Driver\Exception\InvalidArgumentException5 w2 I; d# B E3 j4 g& N; A- R8 l
- MongoDB\Driver\Exception\LogicException0 \ [; {2 V8 a; }. S- O( }; {) m
- MongoDB\Driver\Exception\RuntimeException
$ P! S' s2 W% m* \, _0 c' H - MongoDB\Driver\Exception\SSLConnectionException
2 J; `$ s9 n6 C. u% g# E+ @ - MongoDB\Driver\Exception\UnexpectedValueException! @' o7 R4 o& l; O+ _* ~0 g
- MongoDB\Driver\Exception\WriteException
复制代码 ) V3 H0 Y3 q) {% H2 p. _
: f$ N; r+ j; V) X. x' o% Y# j: c' x
0 t& p8 A+ Q0 z) m! c! X
点击查看全部
8 ? Y2 k& z6 A. i8 ?+ C) G9 r; m" C! F. V/ x
- a1 W. N3 T* ~' `4 b" v
|
|