管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。
( a9 K; A3 ]3 y( c0 `! H; k* V3 f0 D( `; C3 C" \3 ` \4 u; N5 H
下面用PHP7新的API总结一下:
5 r6 I% n( Q5 N) ?8 I' ^6 x
, d7 s) G. d5 v3 H; e5 }一:CURD( e/ C8 T. c7 K0 _! d3 H
7 Q/ r# ^7 }" \/ n% X! l; o& V( q' @7 s1:链接
3 N$ r3 k7 Y6 q+ V; g! U
" |; x% Z) ]9 B3 m; n) m9 ]8 P: I- <?php
1 d4 H' x: f. ?7 T* F9 } - //链接mongodb
- M7 b. d& O* P: W( S* j - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
1 {/ ~$ F$ I& E2 n: ~! p. A- ] - root 用户;123:密码;如果没有密码则不写
复制代码
) c( |7 I+ n H" ]; ^
, c+ c* N# `/ _, Q4 u& Z. g) d2:查询
# _7 `# y9 t7 f {/ H+ S: Z3 o5 A* z B% B: |. h
- <?php$ N x& ~+ h0 Z* Q' I7 \
: Q5 }( `4 w0 S- k- //链接mongodb
2 x) s: F; M9 x7 c# I, Y - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
. p+ h8 u0 d$ ? W) l$ [1 }
% D5 F$ `6 W' O! Z- l" w1 i5 J- //查询
& P; p7 \2 G. f" l( T - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0" E& C" l7 ?% s* `1 B; \2 u
- $options = [
" r. n! R7 x* Y# K5 `5 t - 'projection' => ['_id' => 0], //不输出_id字段$ w7 M0 ?- t M' ?6 G
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序
" ?$ W/ k5 p6 @1 X& H - ];: L8 W' U8 s8 c- u
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求& b$ k6 v0 x' e) q3 g6 ~
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
; v* i" [) [7 z - 4 v& k+ `% S6 H0 ^ ^, H
- 4 a9 p s5 ?( S& _/ a2 {/ j% `
- foreach ($list as $document) {
! e) }& C: d' k1 E6 Y9 ?0 L4 ? - print_r($document); ! H( }( h& G y+ H
- }
复制代码 7 ?2 x1 K- M/ `# `+ _1 G
查询更多条件使用方法,参考第二节mongodb基本命令,查询
" j4 R- D9 [( i9 U& @) R
3 ^7 J3 t9 n/ @* Q$ Q3:添加
0 b6 P; ?- G2 h l$ ]; \' x1 ~! b% j, |, J1 N# G2 c
- <?php9 T2 a. H- W# p3 P5 U4 y* e
- " R- ^# p+ K) b8 _
- //链接mongodb
/ J5 `% j0 U9 g6 M% h% { - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
1 ?8 [/ t% r( k& Y. A. t2 K; E - 4 R' r$ o5 ]1 N; ?, m/ R5 i
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
; l+ o) W: l2 H6 K: t$ E% e/ @ - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
! P- w; G$ x- L2 `! D - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);
0 z* _4 K0 q2 o5 ~# y% p - $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);
; z5 f a2 W h; ]+ f7 r9 S - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 , `6 N: b E5 f A( E$ J
4:修改5 b+ l2 z o, W, S1 \
4 D% K$ d! @: e5 E+ e
- <?php: P- e! d8 u7 W- M
) [7 l0 Y1 f6 U# }& o( w- //链接mongodb# i( _* f" C- d5 ~, K- D% Q& z% }
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');! u& A; s' f& M! l# a! k) P
# s# ^/ e& ?) s s4 q& X- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
5 S3 g/ ~2 m3 f/ E - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
" P0 ?9 O) |0 X. w. a( h - $bulk->update(
. ^' O ~# g8 x$ c - ['user_id' => 2]," H) I8 K5 \1 _! p8 m& k8 l
- ['$set'=>['real_name'=>'中国国']
9 _; A2 c9 a D7 I. s - ]); ) e, P3 L$ H4 G0 ]. x* n2 m
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
. G/ B' X* D `( _ U - //1:字段不存在会添加一个字段;8 F1 b) v* k: n( N0 H( }
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert/ M* Y5 W0 X2 k" Y
- 1 e S+ @8 I6 K5 w& Z4 e
. H; a5 \+ o1 @6 D- //如果条件不存在不新增加,可以通过设置upsert
: q. T! w5 n2 s+ {: P% u - //db.collectionName.update(query, obj, upsert, multi);4 l# J, W3 Q( n" p# @1 [
- 9 A' Z( H: r( F, b
- $bulk->update(
% K7 S6 ]) ]: y9 t E! [ - ['user_id' => 5]," }( F4 ^+ p7 L$ v+ b2 o; b9 ^# C
- [9 t% W) q' I# D
- '$set'=>['fff'=>'中国国']
" ~# I1 V- u5 I% Q. B8 {+ R- a - ],
. s% A# B$ h m# _) \3 _' i' d& P - ['multi' => true, 'upsert' => false] ( v7 t+ ]4 J: S5 Y
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
& g2 ]* E3 d+ Y5 y* N" @3 o7 ` ~ - //upsert为 treu:表示不存在就新增' Z; C3 \0 P( p( [
- );" ?6 m# v; ?+ c
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . m" d; n0 C8 C: u0 |" u, |9 P
" x! _3 o) _* P9 t0 p& e) t; F* t
ordered 设置
c% f4 ]1 n5 x7 M: J8 P3 ?& M. U3 r+ C1 l/ D; Y/ {( I( D
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。9 _7 N3 C8 N6 W- A
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
! o4 Q" Z3 V9 B/ k% n
! J5 U1 [! v9 v+ q5:删除
+ Y6 O" d: O9 q; v) f$ S& R
: ~0 N5 X0 k5 l! B" r! A3 P9 u& U- <?php5 P5 l9 d+ l L
M: B9 i7 _. q- S3 N( d2 m. T- //链接mongodb$ ?& ?. s5 b- ]- b
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
/ P9 H( D& {2 v+ W% x% F, y - 4 J* F( t9 J4 k4 o: O
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行+ ^! W9 _ B2 G/ N' t
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
4 ]1 u: j: |- B+ ]$ V" K - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段2 N/ f; R: g8 o; y8 G
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合6 X* G8 _* v9 O# [/ t. b
- delete还可以通过limit设置不同删除方式
; W/ _" V" J% f: l' ~ - 0 g$ s' {' k+ ]
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
+ a t9 e) r8 Q6 K( v9 y& r - $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
1 u1 w# Q- h, _. a, ` F# c9 O
. Z% {$ F! h D! F1 x+ s6:捕获异常! p' \* s A1 R+ Y. X B& _
7 e' m9 e$ t* P9 Q- MongoDB\Driver\Exception\AuthenticationException1 r1 f S4 s: V
- MongoDB\Driver\Exception\BulkWriteException
0 \+ i# L4 {& s - MongoDB\Driver\Exception\ConnectionException
/ e) o" I% L" v - MongoDB\Driver\Exception\ConnectionTimeoutException7 x5 ]& d& t$ m$ G0 }
- MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
/ z# p9 h$ { @& J& n' P - MongoDB\Driver\Exception\ExecutionTimeoutException
6 ]" O7 k/ M( ~2 ? - MongoDB\Driver\Exception\InvalidArgumentException1 m( a% `5 z+ `' A- K
- MongoDB\Driver\Exception\LogicException4 z; F; [9 f/ \
- MongoDB\Driver\Exception\RuntimeException
6 E* d9 ^5 I' w: x, S: ? - MongoDB\Driver\Exception\SSLConnectionException6 ]$ {$ H8 {$ T# A
- MongoDB\Driver\Exception\UnexpectedValueException
) `* e7 [6 {2 S: N - MongoDB\Driver\Exception\WriteException
复制代码
6 I9 |$ h q# F* \0 s2 G5 }' n H( d; P* S$ F$ ]* X: t
) x5 h, h) b1 ~: J
点击查看全部' N2 v6 @. D7 p% u/ r% h8 }
* r6 B7 i" i$ E1 ~2 y
- V* @4 p1 [+ ^2 G8 w
|
|