管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。3 `9 T. n, z ]% X) C4 }! h
+ V- O8 j* e A* b. v
下面用PHP7新的API总结一下:
8 X( C( E5 c$ M9 g% T% ^2 v: q2 L3 N! \3 F" v
一:CURD |. N, z0 }6 z/ T7 z5 i6 h+ Y
/ |- e0 j, i0 L6 S9 g! C4 k1:链接
& B/ u7 r6 F8 r$ u8 N; @ U. \8 Y; Q
8 Z E7 M5 O o Y, }. d- <?php9 Z3 Q9 J% N) ]5 |
- //链接mongodb" u+ q0 l1 g+ r5 U1 A2 T- K
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');0 D! \/ B" Z3 C; N9 O
- root 用户;123:密码;如果没有密码则不写
复制代码
0 z2 M1 K5 ?0 I2 A1 X
3 n, ~' N* F" R: n2:查询
/ y0 s5 M$ z( u# f8 K9 x& L+ f+ w" }- f% Z. f
- <?php
" K4 `$ N1 l- H - 9 W/ e9 U7 l( |) O# ~3 N
- //链接mongodb" O3 w, G g# Z+ r$ r3 [; T
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; U- y3 M9 j( s. @: t
- I0 n: B( h, y0 J( s+ {1 T+ h
- //查询
6 c( i: h5 B' G2 B+ u% a: q0 a - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于03 L9 R8 I# }% b3 ]5 L, [
- $options = [8 \( v7 I {; O9 P+ ^6 }8 o
- 'projection' => ['_id' => 0], //不输出_id字段6 L0 R* [# \8 B0 _
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
5 O6 h5 F2 w! U# [ - ];
" }. K0 n# C. r( y Y0 S; B2 D - $query = new MongoDB\Driver\Query($filter, $options); //查询请求0 W: W( m. ?9 p+ s, m
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
& U# p1 K& w1 {8 _$ N% W" G/ P - & \) P& D3 S! S' N
+ ~& @) R$ c; K5 u- foreach ($list as $document) {1 C3 I' x/ \, h" Y* U8 Z7 b6 R3 A
- print_r($document); . `6 I, W6 l2 d: A
- }
复制代码
% B: r5 [' M+ C7 K5 \6 w查询更多条件使用方法,参考第二节mongodb基本命令,查询
" y5 w6 s4 v" d6 j9 B, J4 Y
, y& w( X) D) h, p) Z3:添加
$ X- f; c$ S# \) ?; X0 B3 I4 S& \3 t2 h T* e. s/ l; K
- <?php, Y! n) g8 l9 D" l
- * g3 _* J/ b: @9 C
- //链接mongodb" j+ k$ {4 a3 S* n* d& g
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');2 ~( ^: R+ s7 R- a& F1 X% y
$ d. ]( [7 h" }0 u( _. T- ^: i- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行9 Z L9 ]$ j% @; i5 c$ j e- U
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行+ l4 j& k7 b: v- x9 \
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
3 _! z& P4 ]) F - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);) u6 \' k9 \ `+ f9 H9 a
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 9 q% a$ `8 B: R: N. y' s0 T2 u' H( p
4:修改2 q5 T$ Z/ c2 m
% r# e3 [! r" |, l- <?php5 ^/ D. {/ S( c+ }9 |; a* L9 z
- & T( }; ]" s1 ^! ^9 T& r' r
- //链接mongodb/ h0 M4 Q/ U g9 s4 X6 ?( n8 M* B
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');0 @) i7 l1 D1 {
! J2 [6 X2 p7 V8 O- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' S6 U# {6 ]6 z3 f! n2 x( I - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
0 h$ K+ s: ?2 J- ]4 s7 g7 U - $bulk->update(
) X& B) E6 X, `- D7 c - ['user_id' => 2],
2 f/ t, n `1 Z |: e - ['$set'=>['real_name'=>'中国国']
) M3 p3 ?' S8 [ - ]);
: M1 {7 I* W; _( y' i, ^0 j( e+ R+ P5 H - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
4 _' N9 I% |/ d) V3 c7 _4 P - //1:字段不存在会添加一个字段;- Y$ |/ M9 Q! A# y( `
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
; I/ V: m' p$ w
3 A- @; [% l0 J% s' |- [) u- 9 j/ t6 j! w; Z4 |' P) v8 G0 Z
- //如果条件不存在不新增加,可以通过设置upsert* r. t; N! k" A
- //db.collectionName.update(query, obj, upsert, multi);
! p: o( u; {* {) q2 z8 ^ - % C [3 l/ s6 F3 w! W9 m
- $bulk->update(
" O* ^0 d( v" ` ` - ['user_id' => 5],) A9 V0 j4 U8 Z
- [, E3 X# ^) ^, e# X
- '$set'=>['fff'=>'中国国']) I2 R, {; u0 n/ n" I
- ],3 W; p! g- C' u8 A( Q
- ['multi' => true, 'upsert' => false]
# g6 d ?$ ]! P1 J$ ] - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 p5 s9 |# e/ M0 Q" ]* D
- //upsert为 treu:表示不存在就新增
" B! Z5 D4 S, U0 p! p - );
, l7 \( t# {* Y - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
8 y- `9 I" n9 }. ~, G0 M; q
' W7 m/ j7 k, k2 m5 z2 q8 y3 K! f0 Kordered 设置
) y/ m5 {* D# ~
/ M2 o( Y$ W- c- X' P1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。! ~- d' h) R0 m
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
* e5 b& T0 k) n" Y& U% q) W& T1 Y% U0 O; T4 s0 `4 y
5:删除. D/ s1 u9 L% j- }
' V0 Z% {8 H" p+ T& q7 ~7 d# j
- <?php9 x; O6 Y" G0 `$ s+ ?. U
- 0 ~1 H. w5 u, D0 c c
- //链接mongodb
* q, |& [6 g' | - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
; V& a* _, m( Z' M6 J - + v. o% l) Q: G0 I& E% d
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行$ X6 o8 n% ~, x# ?: d2 l7 j5 A
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行9 O4 t) D5 [0 Y, |( ]; U
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段3 \ O- Q/ K0 a! P3 ?, X7 b
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
0 [! A! F1 s+ {! l' a( N3 g" D$ I. S% a - delete还可以通过limit设置不同删除方式6 F) }8 X- x& Z+ k
- - `* Y$ p. D/ H! @, Z- S
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) I' k& E" R' @ Q
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 3 ^" X6 \2 M# B! t, [
* _, F2 i" R8 g$ z9 ~" m6:捕获异常
! Z2 h, \! ? k6 k$ T. L5 E7 t' L$ w+ u) W
- MongoDB\Driver\Exception\AuthenticationException! x4 \% g+ x1 r! a, k
- MongoDB\Driver\Exception\BulkWriteException
, s1 M$ j x" H \3 n- {$ ~! ~ - MongoDB\Driver\Exception\ConnectionException8 T4 s/ X& R1 b+ E# d7 ?% Q: c
- MongoDB\Driver\Exception\ConnectionTimeoutException
5 X- P3 K+ h# B! r- q4 g+ H, p5 L - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
/ s6 n; S; p, a8 i# X6 a" T/ ~; h - MongoDB\Driver\Exception\ExecutionTimeoutException
: w' R% w+ Y, Y& Z' _+ Q3 S) X - MongoDB\Driver\Exception\InvalidArgumentException
6 s q4 f3 M4 X% J - MongoDB\Driver\Exception\LogicException7 \; s! N V, h1 E2 I& E
- MongoDB\Driver\Exception\RuntimeException
- T! k+ w$ B+ g+ y9 X9 D G; b - MongoDB\Driver\Exception\SSLConnectionException
" w( r Z$ R# J0 _) h! p - MongoDB\Driver\Exception\UnexpectedValueException
) G& R1 a" G- x- }8 E$ E - MongoDB\Driver\Exception\WriteException
复制代码 3 Q1 q5 P, j7 e% X( z8 K
* Q, C ~* v; {( {6 A" A( M$ T: H) V
点击查看全部
( \' ?" u9 C/ l) j0 ~
[4 t+ Z0 ~9 L( m& D# f- w: D% h; z- C1 L+ P" p3 L4 {; K# a
|
|