管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
" v9 v8 h9 Z N7 g& V/ T6 ]* g! I3 N0 C% O. ? I
下面用PHP7新的API总结一下:, G+ r- K4 n3 s3 T1 n
& J: B$ W& d! `9 N+ Q( w
一:CURD
4 V: U# }2 l* F4 |9 b/ ~2 [
- j; k) y' T" c& C- z1:链接, q: l& R+ K, `% x+ K! g
c ~& v( z" M0 y& G
- <?php
5 x# V1 O+ Y& `) h$ t6 E - //链接mongodb
2 U& U1 O/ Y; J- }( _' ~ - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
+ ]0 \1 o- H! k7 e - root 用户;123:密码;如果没有密码则不写
复制代码
0 ?6 {- s6 [/ C4 e8 q
* h% ?! q4 Q |) [; m2:查询
: n/ q: h/ ~ ~6 {; Q+ i! L" G# w
" i4 S% J" `6 }$ Z0 J9 {: o- <?php4 S$ C; e0 i& q0 w- [( |; R0 b
- 8 b+ Z; ?& `. q# O+ j1 m8 S, ~
- //链接mongodb- {' b. w* `% J, @) x$ i4 n$ O) Q
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, E/ @5 |8 P$ u" a8 @
" s( L5 m4 @: |' s5 Y' C: L- //查询
9 p. w" b3 Q4 ~# E9 ?& h, C - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
: J" e/ u+ J5 ]' e# O& X - $options = [; c( T6 g# A1 q: z/ i/ Q
- 'projection' => ['_id' => 0], //不输出_id字段1 u+ ~! G5 h% t6 u6 t8 `& f& I7 t: `
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序% a" d8 `# e& X
- ];
7 Z" M/ m7 a3 s' o - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
/ ~9 Z) r8 d$ h3 N w0 F3 \ - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合: a$ B3 a; r) l! }6 S
) s9 q. F- d5 k ]% \& P
# B& z" e4 p/ u2 ~; ]# Z: p& g! T- foreach ($list as $document) {6 R! L } f9 z
- print_r($document);
& U6 |% ~6 M; K' Z; {0 G - }
复制代码 2 b$ X7 ]7 x& Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询
8 o2 o3 G1 e' s" H, \% E: K
; q8 U2 m4 Z% x/ b! u; D3:添加
( ]" Q/ V( x7 e5 G
; v5 q g7 f: z: s- <?php
0 u9 a0 ~( U5 Q$ U9 h& z5 h3 c" C6 O
* D( @! ]' z- i( v0 A- //链接mongodb
# m n- |8 ^. w2 o. Q1 _1 t - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
& C7 r1 Y0 j1 J" p5 w( O, t0 H6 I) L - % J: ]6 e+ T6 C
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 ~ Z6 F* z/ O0 [8 | q' i1 k - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
; {: y$ s! k7 h - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
/ k" |. T) l; s+ U7 h# H - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);5 k$ o- s) O: d
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- i! ]- I0 X& I& l4:修改
4 P, h7 _ `, a( |, D' j) W. k: ~$ H2 d$ V+ U' c' I
- <?php$ g! t) t, S! j. }* M( f
) e+ y: Y( N8 r, b& [) R; f- //链接mongodb
* G! P8 l C: H9 t2 I* [ H5 s0 \, f/ ^ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) G+ r( h, X: S3 H- `
9 A$ V5 B- ^$ Q: _# e- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 q, S% G0 [6 v' l0 P
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 H2 x; E8 m, {$ @( G# m3 G' \
- $bulk->update(9 t! V3 R# C2 B; o8 s! W% n4 \
- ['user_id' => 2],3 ?) K% o1 _! S7 g' ]# k# m
- ['$set'=>['real_name'=>'中国国']
+ q0 l, P' @5 ~" p# H$ o; c$ u - ]); " T" d; S% W$ A# W+ k3 V' m
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
) @, K v9 G& ?. J - //1:字段不存在会添加一个字段;, e# v5 G* q4 ?3 I% K
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert1 c$ u# L3 Q1 R6 i; N4 e' y/ E
/ `: y4 e0 X7 C0 _( e
- p Q- l! W p" q* B- //如果条件不存在不新增加,可以通过设置upsert
. U! m. M; j6 u: ` - //db.collectionName.update(query, obj, upsert, multi);. \6 _+ D; f. }" v7 Y
$ [- o3 t& ?+ q f- $bulk->update(
5 \7 T6 n i5 J) O% o - ['user_id' => 5],5 A6 q2 r7 g9 _. t' N+ X5 P; X1 g
- [$ D1 p7 ?7 s; a2 [
- '$set'=>['fff'=>'中国国']
( V, d- ~ l9 ]" k - ],; M1 T& C5 l' P' t
- ['multi' => true, 'upsert' => false] ; t U2 Q2 m2 a6 E4 J W% B
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条) |' e E3 h, }2 f& t) ~
- //upsert为 treu:表示不存在就新增
- W) L1 u4 s2 W; X - );
9 C4 Q4 E- [/ N: x2 X5 N2 b7 G - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
8 Q2 E) N$ l) `5 x3 @/ F
# ?! T T* ~! k" v* W( Dordered 设置) U1 W3 `2 z0 a- A# K6 ^
5 S3 U. e7 r+ t" P# B3 T! h1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。" ?9 K* U3 g$ G ^
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
8 N* N& x1 D4 S
( B' v/ k1 ^4 D, s1 S @5:删除
: ]. u) f9 q( v! k4 y) U, F- v& e+ j {$ O
- <?php
" T7 o0 {' u' }
! n& k- @) A) I5 W0 \- //链接mongodb+ V# y5 p) H/ K5 m# b6 K
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# R( \0 r) `1 ?
- F5 O; u, C9 z2 F9 x. C
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 J: M) Q' a* E0 V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行1 M( j3 ?& O" r
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段- Z+ h6 g, f9 O# g; _* J$ t( N$ O
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
9 C; `4 v0 V; L- d+ J! i - delete还可以通过limit设置不同删除方式1 X2 u! S- G3 o! a! ~9 z# v. H
- / [. j% A6 v0 U: S6 Y+ N
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
" M* G9 L0 V) B2 t2 ?# x" z5 o; k% s - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 / i2 R% W% L. G, q
& B3 r! V1 o$ _. ^8 W5 S
6:捕获异常; b- V3 x8 E/ A9 U0 N
" T) `, ^( q3 O- MongoDB\Driver\Exception\AuthenticationException% P" U+ b/ Q5 J) ?; U: a2 g1 B% q0 A
- MongoDB\Driver\Exception\BulkWriteException+ P7 C8 A% }5 w6 @4 G% c0 b9 T; h) g; D4 e
- MongoDB\Driver\Exception\ConnectionException" Z: Q& u" p$ `! o$ a5 f
- MongoDB\Driver\Exception\ConnectionTimeoutException
( D |1 M4 z& z( N0 [; r - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
9 H: T/ k' T$ n - MongoDB\Driver\Exception\ExecutionTimeoutException
2 c4 _4 |" p1 ~7 U - MongoDB\Driver\Exception\InvalidArgumentException' X7 N8 B6 d3 K5 v7 ^+ s: l% d
- MongoDB\Driver\Exception\LogicException
7 }: G( P/ Y" B) m6 n4 S - MongoDB\Driver\Exception\RuntimeException5 k2 {% L- r6 g6 w: x
- MongoDB\Driver\Exception\SSLConnectionException2 s2 n5 a* | N+ Y; x. C: q+ W/ ?
- MongoDB\Driver\Exception\UnexpectedValueException2 j0 H& e" ~" ?. H& g$ T
- MongoDB\Driver\Exception\WriteException
复制代码 1 F2 W& ~* F: A5 C" Y% z
9 O" o7 Y" V2 H; M, {$ S3 ]% o: \/ [1 }: U0 b/ p: X
点击查看全部# F5 x0 h, V+ v( c% `4 f
4 H/ f5 k9 z) r6 ?* F% Z- D
+ {$ k" w/ Z8 e) s# q |
|