管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
2 \ k0 T5 L5 T' }
7 J# p- u) O: D3 r- |! {下面用PHP7新的API总结一下:
4 T/ H7 m) x ?5 t0 c8 `: U; s0 Z: m9 _# Q+ Q$ w ^
一:CURD! a7 r% @" n& k5 y. K7 b+ `8 p$ E
6 @+ x) i# ?4 A( `! t
1:链接
& D5 x* _+ D9 E, d; b: n1 G5 ^ K7 U6 K
- <?php# u/ ]0 b0 Z9 j& O" o5 b$ o3 G
- //链接mongodb; `( M# K* O1 s X* Q/ a, A$ m- i
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
3 g. ~, s- T, E$ N1 O& Y" s - root 用户;123:密码;如果没有密码则不写
复制代码 8 R F* b+ ]. D [$ y7 S9 x
' o# i8 R- f# k/ Z% b+ D8 ?2:查询
, l, S' Y o0 Q: Z+ S$ ~$ o8 D+ J" s5 o
- <?php
; o% C5 j( v/ G+ y6 s - 8 N* E6 X% u/ o) `+ d2 `* S
- //链接mongodb4 n. _9 Z5 d/ w6 t
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
6 O5 g |5 B. }2 Z3 p% ~* R
, [4 S( |; S" Y& d: [% H* _. n- //查询$ `7 Z2 Z5 q6 h6 W
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0
v8 E& a/ L3 d/ c4 c7 A; u6 l - $options = [4 f' t7 p* \: g! H0 l$ T
- 'projection' => ['_id' => 0], //不输出_id字段* w. T3 T/ ]& J4 E5 D5 t l
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序# L! E2 |. W/ n4 E$ m2 d
- ];
5 C& c* b! O1 \ X4 ` - $query = new MongoDB\Driver\Query($filter, $options); //查询请求( w$ A7 u- g* O \7 O% ^6 l
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合, H1 S- n4 M- `& ], X: G
- . i( Q( _2 i- n! `1 W
% r# r1 v+ ?3 |2 p. k- foreach ($list as $document) {
" L; E) _$ j) D9 k5 V - print_r($document);
3 V! p& v) j* V' b - }
复制代码 2 A# `5 J* ~4 J7 Y
查询更多条件使用方法,参考第二节mongodb基本命令,查询# a) P$ S0 t! l" k
) t9 d4 q/ R+ i3 j H0 V! P% T3:添加
, }; i4 U6 D# J: E% R5 ~
" ]6 b1 U& ]" ~- <?php
. }8 x1 w: h4 j( c$ [: p - ; f1 ?3 U9 X T; C) [: J
- //链接mongodb
5 s- t' y( ]3 F0 a0 v5 n8 J - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');# b' }7 }( x8 C7 ^
0 _( A. t2 ?) a+ `, D( Y1 h- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行: o; }( U% E1 S3 q. {
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 d- a/ b1 u1 b! Y. q* V7 `2 Y - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);+ `3 V! b u# Z5 x, s' Z8 D
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);* T9 o& N' I* N
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
* E" T( ?& k+ P5 \; i f3 F) k4:修改+ C7 U' p, h1 u6 N. J. U4 E
* m4 |% C1 Y3 \4 ~. |7 r; ]
- <?php
( C; { N2 C+ C/ o- a
$ M% A5 r: k6 h) m- c3 X- //链接mongodb1 L4 b( b) S/ z% ~( V' y( u
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
) f% L" B" n7 v( ]( D
" _ ^* K; Q+ G% X. k+ h. W- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行, N8 m+ ~7 ^( t
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
- Z" K9 u; D2 K* [ - $bulk->update(( ~1 ], M0 @' }! U
- ['user_id' => 2],- h! R, o* _% }( @7 q
- ['$set'=>['real_name'=>'中国国']
( ^& O: a4 D% j - ]);
1 ^# t. f, n+ r H" i - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
' A# E* ?6 m* j. t f - //1:字段不存在会添加一个字段;# R w1 f; C+ B* L X1 o
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
( n3 Q/ t5 E" G3 t - 6 y I. z7 Z/ c# }2 _9 p- r- T
- 4 ? b J" M8 D- D
- //如果条件不存在不新增加,可以通过设置upsert
& ?# O+ }9 s& n! J8 T. m - //db.collectionName.update(query, obj, upsert, multi);
5 n( I3 O$ _! \ E/ Z1 I
/ D) }3 [& U) v+ F: n, w L- $bulk->update(; g8 }3 E# {+ ^7 H
- ['user_id' => 5],$ W' u$ i) q" u: ?8 T; ^
- [
* s( X: t1 M/ a, a: t - '$set'=>['fff'=>'中国国']
( ~) f* v) b6 X3 f& z* B3 q: x! c% h - ],
- |6 t1 w& X- B* A - ['multi' => true, 'upsert' => false]
9 M5 }3 N" t& v" Z - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条1 \* Q% S3 k3 ~: x5 B6 W3 H
- //upsert为 treu:表示不存在就新增( N8 R6 D+ Z6 F. ?3 I# X2 t
- );
& b c3 y( M8 z9 R; F; [/ j. s - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
- _! c( G G7 c( x! Y, [
$ T6 P. l- Y9 i* Wordered 设置9 M5 B) z* }, n) E8 F
* [/ S* r$ q( i x r, ^1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 }% T4 |& @4 w( ~8 u. a% |' A. v) v
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
- h5 G! ~4 F2 s6 ~+ r% Q+ d( a6 i. r: d% O
5:删除; Z0 j1 K* |( b$ w& i
# P h; O3 d- |9 h
- <?php& N! g+ G( f/ G; D) [4 k0 u; l" G/ v
% d3 P% F4 x, r' K/ ~, y/ a+ _7 R- //链接mongodb7 e/ [5 e, i$ ~" H" S% r6 W% P
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
Y8 ]5 v8 E; h - $ T) M" T9 o# {) @7 F
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( h9 L9 @7 I3 K1 L" u# _
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行7 j! Q( L% U$ O
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
! g- ^" y( F6 J4 t ~9 R& h) P+ k! M1 C - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合. t* ~1 P- B$ s9 E0 I v1 B9 |9 d9 \
- delete还可以通过limit设置不同删除方式4 `9 u, m) D! d+ B6 _" B
- 7 @' X) K4 K; l/ ~( c( |
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据) G$ \5 U: u: S( w3 X% E Y
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
. Q/ f/ w9 k7 {; l' N% Y8 h ^2 L6 s9 s
( m* ?! t @1 i. L6:捕获异常
" d! n2 N, W6 s4 d' L, G4 A0 k& O) A7 I9 R4 K2 a
- MongoDB\Driver\Exception\AuthenticationException
$ B" K/ K% l, S9 m3 ^2 }1 z - MongoDB\Driver\Exception\BulkWriteException
; i& w- m8 [2 p" w - MongoDB\Driver\Exception\ConnectionException
8 S# Y" X1 |+ @' V9 o5 i5 }$ q - MongoDB\Driver\Exception\ConnectionTimeoutException
$ ] H) O5 R! d" z/ _! b5 y - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
l) d; q& c- G3 R2 b, N# A/ V' w - MongoDB\Driver\Exception\ExecutionTimeoutException: }1 F+ }: ?& ~2 ^+ M
- MongoDB\Driver\Exception\InvalidArgumentException' \+ y( p& V7 s- d5 t( w
- MongoDB\Driver\Exception\LogicException
. V+ ]# K8 D9 ~' I9 `6 s; T - MongoDB\Driver\Exception\RuntimeException: G) U2 }2 t a8 ~( d4 @$ I
- MongoDB\Driver\Exception\SSLConnectionException4 g+ ^( J7 _' _/ C" u# E' x
- MongoDB\Driver\Exception\UnexpectedValueException
d6 p1 v5 j0 M2 ?: `& u3 \, q" H - MongoDB\Driver\Exception\WriteException
复制代码
3 m Q5 y/ d6 h ?# S. h. j: P
1 a, e( U2 M0 v0 }6 D; x
# l/ j1 y, z7 e9 w点击查看全部0 C1 M6 c* l2 Q
$ X4 C( O( D8 Y r
/ C' z/ w! Y. r4 _2 E' z8 w% @ |
|