管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。# \& o4 T5 y1 f X9 N
8 t) ]- v E7 h- E" H: G" e
下面用PHP7新的API总结一下:
3 ]& F" O7 w4 C2 E% S& d8 ~3 ^& C" y: h( i1 W
一:CURD7 i( c' L8 k! C* w% {
2 `" J7 z' ^* h. J+ ]1 @( g
1:链接
2 n) @, N; X8 _( P% O
9 O" `, X% s, K0 B1 ^* [6 F% j- <?php0 i6 e7 ]* U& c2 y! g v0 a
- //链接mongodb8 B% A& R4 w/ j
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
; e0 l; X# E# v# N - root 用户;123:密码;如果没有密码则不写
复制代码 ) k8 x! ]$ n. h' ~- _- _
$ n4 s. Q' o2 f2 O, g! y/ R4 |& T
2:查询
( T( v* {& f- X9 G6 O4 w$ h* |5 [% J9 J! _+ D2 \$ d* W; v" w1 m# Z
- <?php
1 F. Z$ ?, f- i( h$ ?% N - $ t: s s+ A& o! x* z9 w' t
- //链接mongodb( n7 C( z& j( T+ t* v0 B, b
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! p1 [) Y, ? S: V8 O+ G
0 H9 f. }. Z. z: n( U7 P# t- //查询1 h0 w# H4 K( u% c0 n
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0& q& T4 d- {" |& |2 H3 p" U- l. [# |
- $options = [
4 w. z+ {' r* O: h$ Z+ Y. B3 Y4 { - 'projection' => ['_id' => 0], //不输出_id字段
. |1 V' V0 a3 z0 z# H - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序! n, V2 a$ j& z. K8 d- V/ r2 i
- ];" F( a$ q& d @6 r+ d7 U% q
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
% ~; g' d7 O' T/ m7 Q - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合7 b1 }- C% s) A1 d9 l. c/ d0 ~. G
$ l& v+ E- W9 X7 H- 9 u+ S: X; v5 M- }; q! c
- foreach ($list as $document) {8 f _ I3 V9 l& {
- print_r($document);
9 R! b7 q0 t2 y( Y I - }
复制代码
1 O0 l) {& h; p查询更多条件使用方法,参考第二节mongodb基本命令,查询$ u0 |' E+ N7 z" s
" G( R4 l4 e3 k' @3:添加% |) t/ z; E) u
" {4 X) s* ]6 V N: n5 n) n- <?php
3 W2 z: X+ A3 l0 B4 m: b
$ A# D5 v# W- W5 ?. f( ~) r A- //链接mongodb
& V' B5 n) V9 a$ {7 S" n - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');; Y! J: J! U0 v6 S4 ^% V* K% E
- ; V$ [: y9 D0 k- e2 t
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行' \$ a8 j. P4 j% B" S
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
6 t: v% `# b3 f& ]) H - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);6 A- D$ F8 V+ i0 e: {4 ~2 b# Q
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ S1 V1 H4 g% e9 b9 F/ E
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
# V2 u! }3 j# x2 T: c, c( @: |% P& j4:修改
# b P% r. ]7 u: V _/ z# @# }( [: E5 W' |6 s
- <?php' W& O( o5 u- r+ }
7 s; Z% d- N, b3 {3 T- //链接mongodb
0 c" q& U8 A( y8 p& [ - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
! G" U& [) Y& q: Z! V8 _! X
5 f: ~2 }: A) S+ C8 _! V- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
, L$ g8 l: ~/ J4 W - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
7 W7 H) D/ L, T$ H v% O- Y p - $bulk->update(2 B% C2 G$ ^6 v- G: [* w+ i# u
- ['user_id' => 2],
7 V5 k# O d) f - ['$set'=>['real_name'=>'中国国']
& @/ O% x' U/ Q) ` - ]);
- v5 d7 K, D& o: A* H1 S - //$set相当于mysql的 set,这里和mysql有两个不同的地方,
- ^; |! P" r- g2 j3 [: q; z! A - //1:字段不存在会添加一个字段;
1 |$ Z( Q# k! E; M - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
2 N) C* _5 |' ` - . r( X( ~4 N1 M
- ) s: Z% y9 w8 k' B0 s9 \! [9 r7 \
- //如果条件不存在不新增加,可以通过设置upsert
( C- t3 b4 f, c6 Q/ ? - //db.collectionName.update(query, obj, upsert, multi);
; M& F Z; p6 l5 q - ! h% X' T4 B+ |2 O9 I
- $bulk->update(
: j% h% z8 k+ N - ['user_id' => 5],' Y& e. H$ \6 K9 `0 x; |
- [
; D* g. B( G: p' h6 _1 z - '$set'=>['fff'=>'中国国']
; M( o8 \; K2 h4 ~ - ],
* f8 S9 W \* d) L, U* I: U - ['multi' => true, 'upsert' => false]
3 M2 s: F2 J/ a) }9 `2 ~; v( x - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条7 l& S: v" Z6 l" U; w# J6 B$ W4 S+ f
- //upsert为 treu:表示不存在就新增* Q( {( i, A' S/ |1 _& I/ g
- );
' r3 p* t6 M8 ^2 r - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 7 i, `- ?0 n0 ^
6 e0 p- M0 ~+ ~! s0 {* q H2 aordered 设置
/ |; R3 Z& z" F, g' t
, x- O2 |% _$ a8 V1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。, g/ u8 I$ K3 w4 e- B0 o
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
8 o. _0 R4 }+ @6 N* q2 ]# y% v! \& t" b5 N# \9 t
5:删除# p0 b4 \6 V3 u3 t. Z
- n+ G3 @* |, x
- <?php2 V9 m8 `& H3 c9 N$ [* x6 v
8 g9 W5 _# |/ G. y1 D) D- //链接mongodb
. _% ^# w5 l/ @3 P. q( C - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
3 L, l' R* b8 x" y+ m
) g9 J/ ^5 y4 z2 F- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行% f3 ?9 g! ]4 ]5 I
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
# ^' Z0 J2 M8 S4 J8 w g. I5 E - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
% n: d5 v/ O) v2 \2 o- z2 Z. g - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合) ^' ~, u2 n% f7 {* F& C3 v
- delete还可以通过limit设置不同删除方式
, _: s, A5 y7 u" O* Y& |, {3 p* F - ; i1 R" o D' F2 V& [# o3 p
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据 @7 V- k8 G" I
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
* A( o" E: v) l. ], [$ Q
9 X7 @" c- M% C2 w9 N6 R3 A6:捕获异常- \) y9 _; ?$ Y6 u @: x e: \
! z4 p, l! }- S. L1 o+ i# n) M
- MongoDB\Driver\Exception\AuthenticationException
( E5 n7 r; \9 E - MongoDB\Driver\Exception\BulkWriteException
- x5 f: c2 _# [9 h: u- m - MongoDB\Driver\Exception\ConnectionException( i$ f4 G& }; g# |
- MongoDB\Driver\Exception\ConnectionTimeoutException
" q D9 N) [# e( k$ F, R9 T4 z - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口5 j* ?6 `. `" h! X3 _
- MongoDB\Driver\Exception\ExecutionTimeoutException
' M# j. d: y! }, c% A! A - MongoDB\Driver\Exception\InvalidArgumentException% p) X9 d6 k9 E! T* ?0 ]' L
- MongoDB\Driver\Exception\LogicException
- U& I6 @& P4 Q$ d, Z: V - MongoDB\Driver\Exception\RuntimeException$ X4 A6 Y" E8 X
- MongoDB\Driver\Exception\SSLConnectionException
/ S, ^3 ], R9 z4 K+ v - MongoDB\Driver\Exception\UnexpectedValueException
- e. D3 O: g: l6 W: ` - MongoDB\Driver\Exception\WriteException
复制代码
7 Z/ l- A. C. S# Q- Q
% w0 {9 }1 A5 n8 a- F( O
, t; t% D: ~5 n* W! K/ N+ ^' B点击查看全部
- I( O9 \- m* s5 k/ x) ?$ d
4 u) M. |7 N! l U& L$ m( X1 n; B2 D9 Q; X9 E; Y
|
|