管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
% l/ j+ n5 l/ U# P/ W2 ~& J
' u- j% |# q, s3 s; s; ?. B下面用PHP7新的API总结一下:
# r7 V3 L0 P7 d5 `; Q
! t9 f; w2 }8 F$ p一:CURD+ G6 p. k$ ]9 p i8 J9 F
; }* K4 H& [' G1:链接
" m9 h" y1 {% e" D* G9 o
4 Z; d6 r3 e! p5 Z4 _* Z- <?php' A, y8 ]+ R% U# ^1 N% h# T) C
- //链接mongodb
9 [7 {. P! Y: X9 S. W+ ]# P - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
6 a8 J7 l; V$ `2 ]9 C$ o& y - root 用户;123:密码;如果没有密码则不写
复制代码 2 z1 t) _; @5 x! F& Y+ f
- K1 h; L3 \1 L4 X z e
2:查询' P, {0 A3 v4 H
! l+ a' t( s# h9 d6 g2 m- <?php3 O }, p$ T7 i0 x5 P7 R/ k8 y
# ^9 w# ^. l! M- //链接mongodb6 \& y) d! r4 z% v8 n% E5 Z
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');6 d! D. D7 R; {
$ l4 u" ~. t! u, x( V: s7 w- //查询
( R3 u9 v) V9 S% b6 u8 s" T4 | J- d - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
3 r) N! p' q7 O - $options = [5 e+ D& i& g- @9 O0 B
- 'projection' => ['_id' => 0], //不输出_id字段5 K; x9 l Q1 A) ~- f! m; K
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
s( o% G0 a( F/ Q. b! y - ];( C1 i/ V: G8 B+ b" o
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
) [" R, ]8 ?- J$ p - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
5 Z2 |. u( x0 z0 y! s2 [ - $ D, O% J1 A6 y9 d" L2 S6 z
8 Q* N. j8 j+ T2 x/ d; F6 T- foreach ($list as $document) {
/ d" A$ X5 G% O) I5 ^7 { - print_r($document); 7 g% m3 u0 K( x) b* f' s
- }
复制代码 & y4 v3 S' Z H, z
查询更多条件使用方法,参考第二节mongodb基本命令,查询, R U3 t6 F, Z! h( _$ V8 L
- F( \' a3 i% p3 r- S3:添加
8 k: {0 @5 l$ a4 [2 P
8 c& U. F7 P8 G5 S: l+ x+ Y- <?php; E, G5 u: l* q) x8 Z
- 0 X. ` a: o6 S( q2 s
- //链接mongodb/ F5 C/ J4 m% W# b9 X, o
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 b# b& `/ }9 d# b+ c9 R+ x
% Y" z& @; d3 `1 \& |. s6 X- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
6 X1 h# l# Y' D- x4 ` - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行( g, l# G8 l, J
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);# D- u f8 @2 o0 ]- B9 W
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
; R! X b9 K; K$ k* c& l3 v - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 ; Q7 b% y ]9 T. T& m% d: o7 d
4:修改
# W' I! z' f4 Z" x' V# z. W/ E. z( Q+ u+ s' c. J
- <?php
B% m' a; A6 @: U
% J3 J( l& q" |" U+ p2 e: P- //链接mongodb' p+ L( W4 W8 Q4 t5 r8 U" S
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
9 k6 ?% s6 U* K# v/ O, R8 X. p1 U# K - O$ F8 }+ }( X! A6 U
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
0 R0 F* E6 q7 N# G0 u8 M6 q/ q - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
( i1 b" z9 L' ~. ^9 _" ]( i$ u& O - $bulk->update(4 u7 o6 [; O, h; r: o
- ['user_id' => 2],3 b% X5 T+ U9 I0 m
- ['$set'=>['real_name'=>'中国国']
" M @- H3 y1 M X0 \' E0 o: n - ]);
- ]) k/ ^: g- e) S5 C7 L: L - //$set相当于mysql的 set,这里和mysql有两个不同的地方,! N8 S$ \3 W: T
- //1:字段不存在会添加一个字段;& s- I5 X& Y! D f) Z e- f
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
# l6 X5 P+ s: |/ |3 Z5 ] - 1 f ^* Z* Z% y
6 Z. c' R% i; O5 S- W' _- //如果条件不存在不新增加,可以通过设置upsert. w7 ]- M" \% W- d' I
- //db.collectionName.update(query, obj, upsert, multi);
6 k; [4 ]; g+ H! n: d6 L& v - , c8 w2 p& C% A4 @/ ~% | w
- $bulk->update(" u: `* \5 W1 K% w
- ['user_id' => 5],
* K1 @ S K {. f4 e - [3 f9 |! j3 J) D9 E4 x9 ]: c. |
- '$set'=>['fff'=>'中国国']
$ o9 n# Z, j% k# l3 g - ]," b4 G! T0 V8 t2 K( _/ h4 F; C' Q+ [
- ['multi' => true, 'upsert' => false] 9 @$ x: w* _+ i7 X- p S
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
9 M- b9 w p; s q4 H7 u - //upsert为 treu:表示不存在就新增$ P# i& G* N! o/ [/ M4 h
- );# U; Y4 M! u& f! j
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
2 [& P* Z7 }/ g& l$ H {$ Z, w: ^( H" u7 O. ?+ u n
ordered 设置8 N. {- q7 F$ f1 p; G9 u0 c) Q
3 p& }1 P! }/ ^- j* c5 w9 B
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。- v% o, [4 f9 K7 f& `- J8 S4 O
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
9 w: `, } j, `7 \ f2 S) o+ ~( ?1 w, |" K3 M F8 N- N
5:删除/ `4 ?& [. K; f
( ?. |+ E8 N0 O4 y. ^& \+ i- <?php
- h' {0 x$ r% r( w7 ~9 W$ e - : D4 u; b% r: [& y; s
- //链接mongodb/ w7 F9 f( D' K3 e0 M
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 ?3 ~# z! `+ Y. t - " ^; \- e0 W; E4 @0 o: a+ W
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
/ k1 D3 ~# h: k i% q( @2 ] - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行% a% U) W. G1 S' s, V5 T
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
8 P5 A" L0 }) Z Z - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
8 ] u6 W9 ?* M; X8 |' D - delete还可以通过limit设置不同删除方式
" H' Y" s" C; `! E. X1 o/ Z2 i6 a* h - " w [& B2 r& u0 I4 Q9 l
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据3 N% p% b2 s& l7 M/ g$ _
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
1 w: I3 X) r; F) @4 B n4 k! K, d, W) b+ y6 ~( R6 Q
6:捕获异常
1 y9 s) U: a( L* d7 e" G3 O3 a5 y! O
- MongoDB\Driver\Exception\AuthenticationException
' P: v$ n B# c5 D9 h* Y6 r* Y$ ^8 w0 z - MongoDB\Driver\Exception\BulkWriteException
: a( a6 i" @5 ^" I& i x - MongoDB\Driver\Exception\ConnectionException/ ]" p- a6 S7 G& v! |9 d
- MongoDB\Driver\Exception\ConnectionTimeoutException* u5 C: C/ ?1 V' k5 Y( ]
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
# e. I. Q' L- G8 U3 X. U. N - MongoDB\Driver\Exception\ExecutionTimeoutException
. z& g+ v) Y( t/ { - MongoDB\Driver\Exception\InvalidArgumentException ~9 |' {7 ?; Q7 y0 Y: t
- MongoDB\Driver\Exception\LogicException
; [7 n. \# d+ ]" [5 i& ?1 h" E - MongoDB\Driver\Exception\RuntimeException
/ q3 D- j Q5 |' R5 R - MongoDB\Driver\Exception\SSLConnectionException u; o, s! ]* E8 V) K% R
- MongoDB\Driver\Exception\UnexpectedValueException) l+ X6 Y6 T) [8 [+ d" A
- MongoDB\Driver\Exception\WriteException
复制代码
# g* K) o2 J) _$ ]( T) A. L
* Y; H3 a* a$ a9 c" x% J
# q, z. V! ^2 @$ ~点击查看全部. V1 ^* [' L) ~& m3 H
! f: N0 t6 ]& X$ Z4 ~# l
& Z* t$ Z9 |! q6 {6 X" g6 d" s/ { |
|