管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
提示: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不支持以前的写法。1 i% L6 ^6 {; E' L1 D* ^1 `
& C( l1 v! i" | ~/ U! e2 J! G3 k下面用PHP7新的API总结一下:9 c' y9 }7 z$ \) y2 z9 m
* z5 b, p c/ Y
一:CURD( g4 I3 j2 D" Y. ]' V
$ F+ {* Z8 b1 B# ?" `) F1:链接% M$ w+ a u( b+ I/ W+ m
. F/ z& s1 ?. |! N
- <?php
% p) e- ]/ L) Y: g+ U* D4 W3 d - //链接mongodb
% R/ \7 L" ?1 `# I1 j$ M7 ~+ q4 S4 B - $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017');$ U- w4 c" R( n; |" Q! K
- root 用户;123:密码;如果没有密码则不写
复制代码
+ Z0 ~# E- W" C" R# {5 q, q
' }+ c: M- O$ \# V: Z7 ?2:查询& B4 _9 X* t) F/ ^
8 f$ H! f# M+ N- a1 E2 g1 R0 j. k7 r
- <?php
! F/ T' k4 B5 M( H; a U. m% e
2 r% M5 I8 g9 O( O- //链接mongodb3 ~% S( S+ T$ v, | c
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');
, ^; H, b H' A+ p - 0 y; P. H; C/ c- Z( _% O& u$ n
- //查询
1 R+ R+ Q! K% u- T {( D y3 p f - $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0* B5 H, b* [% w) B: j' F
- $options = [( B( k8 A. W% }# n
- 'projection' => ['_id' => 0], //不输出_id字段
3 ]6 D! o& ?2 [4 D - 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序- a& N4 I& s! z
- ];. J2 ~9 p6 p: I# ` G4 u, k! A* ]
- $query = new MongoDB\Driver\Query($filter, $options); //查询请求
: N" u* z9 b' G1 }" P - $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合
* O9 `/ l# s- P+ x `) {+ o" ^" g
; g$ l0 t2 o1 N9 [9 e7 Z* C, Z' `- , {% H5 N4 z, \5 ]& p5 b& z ]
- foreach ($list as $document) {+ Q" P0 K; F# G/ z+ `9 l- C4 a
- print_r($document);
; d; S+ z# O: o- C y - }
复制代码
9 o/ E9 j7 N2 {+ f3 ^- Z# p查询更多条件使用方法,参考第二节mongodb基本命令,查询
/ t$ x& S2 W- P) g9 M( @* f
# m# h0 g6 ]. c& f" Z5 r$ O. }1 n3:添加4 {" c- g0 |/ n# G" Z
: s2 w4 A, j) }6 s- v* s1 e3 n4 p- <?php ]/ L2 M; M7 L% m9 m+ N+ N
- $ \/ j2 B3 D3 L0 P2 p
- //链接mongodb6 \6 Z* P" |& l9 {0 q0 B6 v
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');' J8 p0 A/ v# c g' K2 n
- / Q, N: n( c- u$ }" Q: ^0 l3 d7 F
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行# Y1 q: o3 L j" p2 ?7 ]
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行! Z1 D2 U/ ?; W
- $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]);) S2 U! M8 y, ]& @
- $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]);3 ?7 l" ?/ s$ w$ r" d
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 , o" d0 n+ |0 F/ P
4:修改
4 H6 O+ M5 w4 e% r: k
2 [, g, y3 ^" C# A% n6 M4 U- <?php; z) }+ H1 n; q
; K/ W8 g' r) b% ~- //链接mongodb: @# _7 @3 f$ k+ t8 e2 y) D
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');% l' _# S, `1 m& O; C
- ( _8 ^) Y- O; O$ F" w! H
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行( S7 F0 r; r( V& L9 p) b
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
i7 \8 q6 ^+ ?7 c; q - $bulk->update(
' x9 B' _# p) q' ]' \8 { - ['user_id' => 2],2 [$ s: q5 |2 `6 q2 m0 x2 L) }: q) r
- ['$set'=>['real_name'=>'中国国']
0 y+ n2 _, F: M+ r' Y - ]); + v- U0 J8 g1 z: W, a2 f
- //$set相当于mysql的 set,这里和mysql有两个不同的地方,$ w0 z4 C6 Y7 y' `
- //1:字段不存在会添加一个字段;
! w" l8 j5 F) o9 V - //2:mongodb默认如果条件不成立,新增加数据,相当于insert
) y) b8 s& L7 s0 k
7 s T* p6 o) C) \3 B1 E
0 @2 L6 m j/ G8 h0 ]) [9 d' s) Q- //如果条件不存在不新增加,可以通过设置upsert5 K& d* t) ^3 w" g, _8 t
- //db.collectionName.update(query, obj, upsert, multi);
& f4 P7 v8 Y3 f1 f, e; A
5 g( L) v) \+ a, K) m6 f5 i4 {- $bulk->update(! X. I- y- t6 C Z2 F7 y
- ['user_id' => 5],1 u6 y3 k4 C- ]3 `) D7 \$ i
- [1 z; E; Q, G) Q: \& t
- '$set'=>['fff'=>'中国国']. p! q- T9 z$ P! X( T
- ],
3 o4 {" `: P# E c0 E, ` t5 W7 @ w2 O - ['multi' => true, 'upsert' => false] ( Y" P/ W) t2 B$ R( U
- //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条
/ e* w; y$ h4 X- \2 ]1 K! X9 U9 ? - //upsert为 treu:表示不存在就新增) S0 p' _0 t5 T
- );8 J( ?% u' q+ |* w% \6 l$ c
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
复制代码 " A. E2 U- U- o- D
7 P+ P4 }8 u* gordered 设置& d8 J; x' O6 P% N) \% ^$ b) E7 W3 ^
# W! f/ R& u6 H' r# g1 r/ L; _1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。: N0 l# }. g/ F
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行# h; a M$ T. ~3 T+ {4 L
8 X0 o) D0 W( W
5:删除. @6 P& Q5 t4 Y. w# j: Z! D* k
% T6 R. O* Q/ C+ j+ U- <?php
/ \, f4 _" c2 a9 c' I
/ {- p" z% B; ~& s- //链接mongodb' s. m( Z E( s) M/ n- v1 D8 P
- $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017');) O! N6 E0 x' X& ~: T6 L a9 I
- ( N& a: z9 D5 W* ]. `
- $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行5 ~' B9 d0 T' j8 V
- //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行
, K- j- p3 R) v! M% G) J - $bulk->delete(['user_id'=>5]);//删除user_id为5的字段7 u; B# P9 J: Q7 U$ Z4 G/ K G* b
- $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合+ B* G6 O- ^# b- N H6 R, u8 o
- delete还可以通过limit设置不同删除方式9 b* K; i' I; n. o
5 O# ?! }$ f3 t) H0 `% J+ D- $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据' o4 }4 O$ A& Y+ A
- $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
复制代码 . N+ ?/ T9 s0 E8 A- b: H
" G8 S, Y1 D; c# g6 Z3 y6:捕获异常) j6 ^; ^% W- a* n$ n& @# q
, N2 J t# l {% g1 y6 M- MongoDB\Driver\Exception\AuthenticationException/ x/ j6 |1 S0 `8 ^2 [+ W& Y
- MongoDB\Driver\Exception\BulkWriteException
& m4 q2 D' r. f; C1 D; [- o - MongoDB\Driver\Exception\ConnectionException) P y" B& p5 c* u% k2 o, p
- MongoDB\Driver\Exception\ConnectionTimeoutException
$ T6 o$ g$ Y/ T$ Q - MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口
/ U( ~: Y4 J/ k. [- q0 e6 d' f2 O - MongoDB\Driver\Exception\ExecutionTimeoutException# D. \: H9 ~1 ]
- MongoDB\Driver\Exception\InvalidArgumentException
% i3 R% y$ n0 p/ k - MongoDB\Driver\Exception\LogicException1 D% V% g4 @0 i/ ~- H2 X
- MongoDB\Driver\Exception\RuntimeException) k, X* @$ a4 y B. I
- MongoDB\Driver\Exception\SSLConnectionException0 c( T0 ?0 M1 I0 l/ R
- MongoDB\Driver\Exception\UnexpectedValueException: s- n# V c& Q. [- l* b7 t. J% r) _' q
- MongoDB\Driver\Exception\WriteException
复制代码 5 m* g! |& p. f- @
. s1 x n0 @7 H- `2 D* O: H9 Z
) [: i d9 o( A4 p( L; P2 N2 I; c2 }/ a点击查看全部# G5 P+ B3 T* _/ w# k
' S1 f3 y# }( C5 y! ]2 f
' ~/ y. P3 j6 d _3 l- B
|
|