管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。( R. x$ W' n- }# j2 y: [% k( g) Z3 g
) E) {. \* |6 h0 r' s0 W
下面用PHP7新的API总结一下:
0 V3 C; n7 C8 p$ j! S |1 Y& h5 }% q$ F1 s& t* |9 {/ U
一:CURD
) h- W S$ ^7 C6 [
, c% v1 q! ~! c. g' ^3 H1:链接) l$ R- E# y9 D8 a& C% o/ L
$ w0 w) ^1 A# S: T2 K/ b
- <?php
2 `( j; r9 L( f' E0 T - //链接mongodb/ `% w _. S6 G c( q3 }
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
: s2 v9 Y/ m# q# X6 S7 G% Q - root 用户;123:密码;如果没有密码则不写
复制代码
( d3 T8 Z. u/ K, Z, i5 a/ [ K! h" R$ v! r
2:查询
" R. \2 n, }8 Z4 \# F7 G, [$ H# k0 h( [3 o; g; I
- <?php
/ t1 f$ k/ M: J5 X( V6 y b! R - 4 [% ], w- X# D" X5 t( M
- //链接mongodb2 g6 H; z, T$ I. [2 [4 z. j! }3 r
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
7 z, D0 K, P O, N9 p _4 [0 [# n - ( o( \2 ?. z5 h
- //查询+ c4 V. F6 E1 S3 o5 E
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" A/ T/ L# |$ ?4 d
- $options = [& w4 j2 {" \) @7 M
- 'projection' => ['_id' => 0], //不输出_id字段
! H6 V; b. u- x l; }, I" ~$ D0 c - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
: P, z1 y6 g* ^$ M - ];
' F, M. b% m8 \, ~ \% ^+ t - $query = new MongoDB\Driver\Query($filter, $options); //查询请求
5 Y* U! k# d9 q" E8 ? - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合; y4 A* Y- ~/ _1 v' Y* q. V
- 1 ^0 Y6 M) z5 w. X/ }. ]
- ( c i- L; Y' f2 d
- foreach ($list as $document) {
' o2 v: p1 v( b6 R) \0 a - print_r($document);
# B3 Z# p5 ?0 W; U - }
复制代码 ) j, v. g3 V9 y3 q( K2 o! b) M
查询更多条件使用方法,参考第二节mongodb基本命令,查询
8 Z/ ]4 i( x+ e! S, u6 F4 ] m% ?4 f4 U
3:添加# D/ X: [. m# I z8 A
+ b( R. N% N2 M/ \
- <?php# S# ?! p i. |7 K6 Q8 G
" y0 v; @. u! e5 a+ z' s$ V7 `- //链接mongodb5 X5 v+ p. ]& ~3 S' R9 r
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
- J1 l3 q9 Z, o - : b) y8 M, G+ F4 L
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, q# v% `+ g. v9 ~# l - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 [( h. y0 O4 c: } [/ ~$ V
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
( x8 p3 b! V0 P0 M, T I9 y/ M8 x3 { - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);( D& d2 I- i& s, N4 u' K2 N( K
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" G8 K/ q! B( t* e3 |6 X \/ G4:修改/ A. H8 y$ s. u: r, g
" S6 b( V# G' M2 w
- <?php( ?: J- c" m: k* I2 [0 L
- $ }# S }4 r, ^" G
- //链接mongodb( d% W) v' U9 K6 Y' T( @
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');7 B0 K4 R, k6 R7 n/ ?! p, M" y0 [
- U$ A$ v0 d6 K
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
) g) Z' {# x- }: J4 O; b" r - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行, a$ u; h2 w& j4 \5 l* J
- $bulk->update(/ {% V7 u! v3 s
- ['user_id' => 2],6 R L( X0 O" A- p1 z
- ['$set'=>['real_name'=>'中国国']7 x A6 k9 `; o1 D
- ]); 3 V% ?1 ~+ Q2 x
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,# v4 E) d% A! o) E2 \" t" ^
- //1:字段不存在会添加一个字段;
5 [" M) r" r2 Q0 E0 f- L - //2:mongodb默认如果条件不成立,新增加数据,相当于insert5 i" j9 y% I$ P' j1 P7 G
! s! h: w5 ^$ I0 h- 8 t8 D! i8 n) p, b+ j
- //如果条件不存在不新增加,可以通过设置upsert% ~. u: M9 @) O) ~: ^5 G
- //db.collectionName.update(query, obj, upsert, multi);! A7 u! g5 o+ e& D- ]1 z! q" i" M
; a6 H+ n) s1 w, D) ^4 I- w( ~- $bulk->update( K/ A* [0 U$ T" t4 j- d, y0 B
- ['user_id' => 5],* }- Y! l, @. Z( A! Q' k
- [
5 Y* t" |4 {7 C# N' Z - '$set'=>['fff'=>'中国国']* m' n; d' Y/ K% n5 k! o" T% ^0 f
- ],
; y* ~ W) u7 |1 C3 ` - ['multi' => true, 'upsert' => false]
$ Y3 y0 O* v' i, U6 u3 [6 g0 g - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条- E2 a$ f7 m% F9 ^1 L+ s4 ]
- //upsert为 treu:表示不存在就新增
- j/ c( U0 g0 \2 i2 P" @, w - );
) J1 Y6 k: J4 E( v1 l( N5 y% C2 _ - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
" R9 @ b( r4 R7 `3 U% p( H$ E- E9 w7 \
ordered 设置
" M" y g( l$ r. R; l. u4 E, A v! Z3 _
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
% o' `7 k, `, d# f4 c2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行9 n; x% V$ p) @! }4 e
! y- O3 W. Y( A) `) h; P5:删除- c1 C% ?! s% t: N9 r, s/ ~( t7 ~. g
A. `. i) w- G3 F" ]- l! ~- i
- <?php
/ w7 i) d# S) c! V" d6 w5 H - 5 I/ K7 W" c, t4 Q) c- `7 I
- //链接mongodb
5 I5 m6 o% `' k) e$ l( f - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) s) R G/ d5 |1 u' H2 p+ n' o
- * [5 t3 `+ e0 c- k, t
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
' ?! q+ {, c7 y0 `/ A4 U - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! |, b: r' E+ }' A+ {5 j8 S - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段& M9 E3 z& E/ u! }0 {
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合- m5 V! Y* E& ?. Y! h3 J, X6 n
- delete还可以通过limit设置不同删除方式0 M8 b9 t2 ^2 j- M9 N
+ y, y3 Q! H" N$ ^5 T% `, k. u: P- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
9 r1 Z0 d. n) @- e - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
/ Y) v( c* D4 C( d
) b O1 z( m: k. }5 l6:捕获异常
7 W; K4 K& ~6 d/ ]* `3 J9 S7 k; o
8 `+ R- [# h, G: I7 k8 `' c' B- MongoDB\Driver\Exception\AuthenticationException
$ u% @; Z' Z/ k) |' d( w- \9 K - MongoDB\Driver\Exception\BulkWriteException
# @/ `: g3 H4 m* l2 S - MongoDB\Driver\Exception\ConnectionException
6 w4 D- z5 B: e7 k3 r - MongoDB\Driver\Exception\ConnectionTimeoutException, ]5 F" R7 i1 }3 U
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口; B3 o0 K6 I% r$ B8 S0 J
- MongoDB\Driver\Exception\ExecutionTimeoutException# D+ ^) Z' u! i, l& m
- MongoDB\Driver\Exception\InvalidArgumentException, t7 ~+ X$ R' U: n; x
- MongoDB\Driver\Exception\LogicException9 q% C! M* v0 U8 {+ p$ O U1 t4 _4 s
- MongoDB\Driver\Exception\RuntimeException% X' W) b" I! V7 _9 i* H ?
- MongoDB\Driver\Exception\SSLConnectionException
6 O- F3 B1 f* w' U z - MongoDB\Driver\Exception\UnexpectedValueException
" }- q7 Z) c/ s. z) R9 B- | - MongoDB\Driver\Exception\WriteException
复制代码 8 c3 B0 m4 T) r+ V# K1 s
8 A: R9 ?3 u% j$ s( C6 V2 }
3 ?# o' U @/ W: I: R点击查看全部6 ]" M- d2 H$ Y& O5 s! s
+ m% Q. ]( P- x" _# U
/ I' ]+ I2 q0 N: B |
|