管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。* z4 P# t7 w0 G! }' t
. C( B: ^# j5 T, @% t6 j% Z3 V+ `下面用PHP7新的API总结一下:1 ~! G; }5 o7 S t: N$ Y \& u
$ e2 ^% L0 c9 \, I
一:CURD& A6 t0 P/ P. e i/ w
/ e$ r" {5 H+ Y. |2 j1:链接
5 C- O5 b( |% p1 x! U: [$ K& ?$ J- j1 Q1 `* W4 Y' t c% s& U
- <?php
& J1 p( ?/ R* Q7 o8 H - //链接mongodb4 t+ A( w# `9 z9 {9 [
- $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');
: T8 v) e* t6 B( a$ Y' T6 j) \- E; X - root 用户;123:密码;如果没有密码则不写
复制代码 * E2 B Q3 c+ | ~: c# |
4 b, o4 i# R! B$ a6 c& o6 ?5 J& t
2:查询
1 V0 Y- `! |, {2 W* Q5 y m
+ U/ F2 p5 Y* y- <?php
/ R# Y) J- ?9 g. }' w. E1 p; D5 M, Y - ! ?1 b1 U, e& [( C9 L
- //链接mongodb
& q' e' T- ~ U0 W# O& b- h - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
' U/ K9 H6 W$ e% E3 @ - 9 M$ J& x( h* |" D3 i$ |; n
- //查询4 e" V" `' c. T3 t1 K+ N, `
- $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于05 y1 n3 w) R. j. Q, N/ [6 d
- $options = [7 M# z/ E; p/ S/ P" ?
- 'projection' => ['_id' => 0], //不输出_id字段7 z* s- u# G: \& A' l. F
- 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序 w8 ~' p5 a( X% m1 r. {/ M
- ];- C3 n$ q/ m0 i' m. t* I/ B* e
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求4 R. Q% |* d% P) y; M5 X
- $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合* n* M) Y5 z" k- v+ u! ~4 E' }
- ! O+ m% T; d/ w
- 7 I3 V) S; _% R" k5 j5 M- g1 ^: H
- foreach ($list as $document) {. L& c7 E1 S5 e
- print_r($document);
" R' X8 }- ^. M0 d! b% T$ j) n' v4 ^6 o - }
复制代码
* J$ S$ T" S9 j: |查询更多条件使用方法,参考第二节mongodb基本命令,查询
4 k: ~5 c/ a! h! ?* e% J
. i& A* u0 x7 j/ o S8 Y9 l: a3:添加
* i' x- I# i( A( B7 B3 A$ V( q7 P8 P
- <?php
) @4 n! c/ ?; H1 V
4 ~4 q# j! Q: t7 v0 W2 H v- //链接mongodb
& l" {- ~; o1 i4 ]8 ^7 ]+ `; H - $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
# i6 i( ^" ^. h% X8 H. Y% \ D# C
* B Y( _. S8 M5 Z, ~% n+ P! @/ d! _- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行
* s6 r8 ^. Q. v: L8 f9 U - //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
9 \# p1 J g1 b7 g# o" Z - $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);1 Z, ?2 _+ s3 h2 {7 q
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);$ @0 s% F E) n# a+ N# Q% e5 H
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码
, t' x2 _; \$ C4:修改
6 i' |- J1 g4 L1 O, s- J/ [9 H4 ]- v! X J& M @/ H+ r
- <?php
. U1 u0 E% L4 q( D% e5 e - 3 o& z% a6 S. a/ @
- //链接mongodb+ `: h* \* t, P
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
" y8 [0 G$ P) l8 \$ C - 8 W# N" o C) _0 V" o- q E
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行0 x* e0 q, J; `/ v( z2 w
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行5 D( A* K' H7 J) p
- $bulk->update(
" c S: W+ `* U7 D7 I; ?: U - ['user_id' => 2],& N" ~; L9 v1 P* Y8 z% Z2 t0 B: U
- ['$set'=>['real_name'=>'中国国']8 v |. z$ j: X2 R, e% u) \) k1 Q& o
- ]); 5 J. _2 x% M3 V9 C5 s2 N
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,
5 W- {: L2 A- _( W+ Z1 |0 n - //1:字段不存在会添加一个字段;7 R, n. r: K B7 R3 g2 p
- //2:mongodb默认如果条件不成立,新增加数据,相当于insert
: f/ o% B7 x3 u" Z2 d$ v5 D* L" |. I - 6 o' c3 D, |- {- O
1 U* J6 Z5 i* w- //如果条件不存在不新增加,可以通过设置upsert) v; |5 g3 C5 R7 X0 O( r7 L
- //db.collectionName.update(query, obj, upsert, multi);
6 o9 Y8 m) P( h1 Y! p2 D0 ` - + c/ @) F0 W( @
- $bulk->update(4 [% D; B2 y# u; U
- ['user_id' => 5],5 g& y/ I" g+ ~& i
- [
+ X6 Z5 v; @, t - '$set'=>['fff'=>'中国国']% l9 b6 |) m# u/ R; Q
- ],
7 e% j5 ]# F0 t - ['multi' => true, 'upsert' => false]
5 H: ^6 `6 ?7 u8 W* R( ?1 y6 u1 d - //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
' Y+ @/ |$ ]8 p& M: L - //upsert为 treu:表示不存在就新增( o, e p0 p( }3 p" e; Z- j6 D1 q
- );7 N6 M5 F k) K8 s8 s+ Y
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 . \/ C" N# S) R1 P
' d1 \- |6 y0 _/ L# [( [ordered 设置
4 E( v9 x( Q4 y6 X7 i
: @' T1 y3 D+ _4 L4 n# n; u1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。* G* J* B6 a) M
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行, I: G* R e9 e- v, \' o
7 W$ \, q+ @+ @. Y' t J1 S8 F% Y# R" O5:删除
8 `! n( n& z0 k& [ q
7 M. }1 @3 t$ w) k7 r( N, S- <?php! L* ~0 ~; y, L0 x( Y6 X
+ s: z4 ^# K9 T' J( N) B5 {, N: U- //链接mongodb$ N6 l- o _8 d; Z+ K D+ [& S
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');: a+ [3 h% l6 T# a
- 0 a- R+ X' j u# l5 L
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行) E8 I# X. v* E" B( [
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行' o1 O/ _5 p, } p! Z# p
- $bulk->delete(['user_id'=>5]);//删除user_id为5的字段
) i8 L% S" D4 u& a" U U - $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合, w: o% [+ z" d: I; ^( d
- delete还可以通过limit设置不同删除方式
; \/ M- @0 o7 I% d - ; Y( F' ^% C5 I- @, _. u4 g! S
- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据; j% t8 P! G) v+ r4 d0 H
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码
7 O- i" [: | X" B* Y
0 C+ K# Y6 W* U `5 v3 T6:捕获异常& B5 \: a d( W& Z1 o, O
8 B. g( r0 A* Q+ |" C8 Z
- MongoDB\Driver\Exception\AuthenticationException
$ @2 R3 z, @1 A4 R2 q% A2 p - MongoDB\Driver\Exception\BulkWriteException! X0 s+ s: g# C5 g. q7 s7 W
- MongoDB\Driver\Exception\ConnectionException" _1 P) h0 o% N) [) A
- MongoDB\Driver\Exception\ConnectionTimeoutException
- U Z- a8 E, K: K$ d - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口/ x) e5 Z' E) B9 h& u5 e4 ^' ~
- MongoDB\Driver\Exception\ExecutionTimeoutException0 c" i$ t2 j, A7 K& b% R% _
- MongoDB\Driver\Exception\InvalidArgumentException' ?% K0 d6 F' R# }$ S8 y4 E
- MongoDB\Driver\Exception\LogicException
4 Q0 a- q! h' k# ~' D- U/ ? - MongoDB\Driver\Exception\RuntimeException5 }3 ]3 ~% y# g3 P9 S
- MongoDB\Driver\Exception\SSLConnectionException- e. k8 q6 i) J9 O% u/ |7 m, M
- MongoDB\Driver\Exception\UnexpectedValueException/ f6 T8 E5 T( A
- MongoDB\Driver\Exception\WriteException
复制代码 ( G5 v$ v" u. |$ F- Y7 ~
: b% W9 x& v. y- |3 E
+ k, K$ C% J' m( w点击查看全部3 R+ R! j2 @9 r& [
/ R* f3 v& B( S, l9 u5 u. O* B# [0 N* m' c% ^) Y' n
|
|